How to Check Legal Citations with Claude Using Full-Text Court Opinions
A practical workflow for using Claude and CourtListener to confirm cases exist, check quotations, and compare a brief's propositions with the full text of each opinion.
A legal citation can fail even when the case is real. The quotation may be inaccurate. The cited passage may not support the sentence in the brief. The decision may address a different issue or arrive in a different procedural posture.
Claude can perform a rigorous first-pass review of each of those questions when you give it the brief and the full text of the cited opinions. CourtListener by DocketDrafter makes that workflow practical by letting Claude Cowork and Claude Code retrieve the primary opinions, read them in full, compare them with the brief, and save them on your computer.
The basic workflow is:
- Extract every case citation from the brief.
- Confirm which citations resolve to real opinions.
- Download the full text of each available opinion.
- Compare every quotation and proposition with the source.
- Send exceptions to the attorney for review.
- Check later treatment through an appropriate citator or a separate treatment review.
Here is a video showing the workflow in Claude Code:
You can also watch the cite-checking walkthrough on YouTube.
What are you actually checking?
"Check the citations" is too vague. Break the job into separate questions.
1. Does the case exist?
Search by reporter citation, then fall back to party name, court, and date if necessary. A citation that does not resolve in CourtListener is not automatically fake because CourtListener has coverage gaps. It is an exception that needs another source, such as an official court website, Google Scholar, Westlaw, or Lexis.
2. Is the citation accurate?
Compare the case name, reporter, court, and year in the brief with the retrieved opinion. This catches real cases paired with incorrect reporter citations or typographical errors.
3. Is the quotation exact?
Claude can locate the quoted language in the full opinion and compare it character by character with the brief. The review should flag omitted language, altered words, and quotation marks around language that does not actually appear in the source.
4. Does the opinion support the proposition?
This requires reading, not citation lookup. Claude should identify the sentence or paragraph that cites the case, explain the proposition attributed to it, and compare that proposition with the opinion's relevant reasoning and disposition.
A real case can still be used incorrectly. The brief may rely on dicta, describe an argument as a holding, omit a limiting fact, or cite a decision applying a different standard of review.
5. Is the case still good law?
CourtListener does not provide a Shepard's or KeyCite treatment signal. Claude can search for and read later opinions that cite the case, but a citing reference alone does not tell you whether the later court followed, limited, distinguished, criticized, or overruled it.
Use an appropriate citator or conduct a deliberate later-treatment review before making a final validity judgment.
Step 1: Give Claude the brief
Use Claude Cowork or Claude Code so Claude can work with files on your computer. Put the brief in a normal matter or working folder. Do not place your brief inside the CourtListener Library, which should remain reserved for downloaded source material.
Start with:
Read this brief and create a table of every cited judicial opinion. Include cases cited in the body even if they are missing from the table of authorities. For each one, list the case name, citation as written, every page of the brief where it appears, and whether the brief uses a direct quotation. Do not evaluate the cases yet.
Separating extraction from evaluation makes omissions easier to spot. It may also identify cases cited in the text but missing from the table of authorities.
Step 2: Confirm that the cases exist
If you have not installed the free extension, follow the CourtListener by DocketDrafter installation guide. It covers both Claude Cowork and Claude Code.
Then ask:
Use CourtListener to check whether every case in the citation table resolves to a real opinion. Search by citation first, then use reasonable variations of party name, court, date, and docket number when needed. Give me a table with the citation from the brief, the matched case, court, date, CourtListener link, and status. Do not describe any holding unless you have downloaded and read the opinion. Put anything unresolved in a separate exceptions section.
This is the fast pass. It catches fabricated cases, malformed citations, and obvious mismatches without requiring Claude to read every opinion yet.
CourtListener applies API rate limits, so a large brief may need to be checked in batches. Do not treat a rate-limit error as evidence that a case does not exist.
Step 3: Download the full opinions
Next, retrieve the opinions that resolved successfully:
Download the full opinions for the resolved citations into my CourtListener Library. Report which opinions were newly downloaded, which were already saved, and which could not be retrieved. Do not begin the substantive comparison yet.
The extension saves each opinion in formats that Claude can read, including compact Markdown. The source remains available as a file on your computer, so you can inspect exactly what Claude reviewed.
For an opinion missing from CourtListener, obtain it from another reliable source and save it in your working folder. Tell Claude where the file came from.
Step 4: Compare each citation with its source
Accuracy improves when the task is narrow. For an important brief, check one opinion per fresh conversation, or use small batches rather than asking one crowded session to analyze dozens of cases.
Claude Cowork and Claude Code can make this easier with subagents. Ask Claude to spin up a separate Sonnet subagent for each opinion, or for small groups of opinions. Each subagent can read the brief, read its assigned opinion, and return a focused report without filling the main conversation with every source. For example:
Spin up separate Sonnet subagents to cite-check these opinions in parallel. Assign one opinion to each subagent. Each subagent should read the brief and its assigned full-text opinion, check every use of that case, quote the relevant source language, and return only exceptions and supporting links. Do not evaluate later treatment or good-law status.
Whether you use subagents or separate conversations, give each reviewer the same narrow instructions. Use this prompt:
Cite-check the use of [CASE NAME] in the attached brief. Read the full downloaded opinion before answering. For every place the brief cites the case:
- identify the proposition or quotation attributed to it;
- locate the relevant language in the opinion;
- check any quotation for exact accuracy;
- determine whether the opinion fairly supports the proposition;
- flag material limits involving facts, procedure, jurisdiction, disposition, or standard of review;
- quote the source language needed for me to verify your conclusion; and
- link to the CourtListener opinion.
Do not evaluate whether the case remains good law. If the answer is ambiguous, say so and explain what the attorney should review.
The instruction to quote relevant source language is important. It gives the reviewing attorney a concrete path back to the opinion instead of asking them to trust a bare pass/fail label.
Step 5: Produce an exception report
A useful final report should focus attention on problems, not bury the attorney in a long list of successful checks.
Ask Claude to group the results into:
- unresolved or possibly incorrect citations
- inaccurate or unverifiable quotations
- propositions not supported by the cited opinion
- support that is qualified or ambiguous
- procedural or jurisdictional mismatches
- cases requiring separate later-treatment review
- citations that passed the defined checks
For each exception, require the brief page, citation, disputed proposition, relevant source language, CourtListener link, and recommended attorney review.
A practical accuracy strategy
There is a tradeoff between speed and careful review. Confirming that 30 citations exist is a relatively narrow batch task. Reading 30 opinions and comparing each one with a brief is not.
For higher-stakes work:
- separate existence checking from substantive checking
- use fresh conversations or separate agents for small groups of opinions
- give each reviewer only the brief and the opinions needed for that assignment
- require source excerpts and links
- instruct Claude to flag uncertainty rather than force a conclusion
- keep a final human review focused on exceptions and important authorities
The result is a scalable cite-checking process grounded in the actual source text. Claude handles the repetitive comparison work and gives the attorney the excerpts, exceptions, and links needed for focused review.
Complete the workflow with treatment review
CourtListener is free and works directly inside Claude. Westlaw and Lexis add broader commercial coverage, editorial features, and citator treatment signals.
That makes the tools complementary:
- Use Claude and CourtListener to retrieve full opinions, check quotations, and compare cited propositions with source text.
- Use official sources and commercial databases to fill coverage gaps and perform the final currentness and treatment review appropriate for the matter.
The valuable change is replacing a manual search-and-copy process with a source-grounded review that shows its work. The attorney can spend final-review time on exceptions, important authorities, and later treatment rather than locating and comparing every source by hand.
Try the workflow
Install CourtListener by DocketDrafter using our step-by-step guide, then try the workflow on a brief you already know well.
The extension is free and open source. If you want help installing it in Claude Cowork or Claude Code, email me at tommy@docketdrafter.com.
DocketDrafter also builds firm-specific drafting playbooks and document workflows around Claude and other AI agents. You do not need the paid product to use the CourtListener extension or this cite-checking process.