Apply to my task
arXiv:2610.32781 ★ 86 Oct 23, 2026

Quote-Grounded Extraction: Every Fact Gets In Only With a Verbatim Quote and Several Layers of Checks

Key result

Discovered: ask a model “does this page confirm that customer X uses product Y?” and it will happily say “yes”. The same testimonial on four pages got three “yes” votes and one “no”. Quote-Grounded Extraction lets you pull facts from websites and articles (who is whose customer, who integrates with whom) where every fact comes with a verbatim quote you can check with Ctrl+F. One call only proposes candidates; the others only verify them against a single narrow criterion. If the evidence is split (the headline names the product, the testimonial names the company), a referent resolution step kicks in: the model rereads the whole page. This step more than doubled the number of relationships found.

01

TL;DR

Quote-Grounded Extraction (“grounding by quote”) is a way to pull facts out of text so you can actually trust them. First the model casts a wide net for candidates and has to attach a verbatim quote to every one of them. Then each fact runs through narrow checks: the quote is searched for in the text as a literal string, and if the quote names only one side of the relationship, the model rereads the whole page. At the end, five independent calls vote on “yes/no” questions.

The core pain: ask “does this page confirm that customer X uses product Y?” and the model is way too eager to say “yes”. It judges the very same sentence differently: one and the same testimonial on four pages got three “yes” votes and one “no”. The more text the model reads and produces in one go, the worse the result. And a bogus “customer” on the list does more damage than a missing one: it creates false confidence.

The method splits up the jobs. One call only proposes (generously, with a quote). Other calls only verify (narrowly, one criterion each). If the evidence is split (the testimonial names the hospital, the headline names the product), a “read the whole page” step kicks in. The final call is made by a vote, and the share of “yes” votes doubles as a confidence score.

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

02

Method Blueprint

STEP 1: Collect pages (the vendor's entire site + web search on a budget) → text cache
STEP 2: Extraction (generous, 1 call per page) → relationship + verbatim quote
STEP 3: Quote repair (if it was stitched together from fragments) → quote from the original text
STEP 4: Referent resolution: if the quote doesn't name both sides,
        the model reads the WHOLE page → argument + yes/no + evidence sentence from the page
STEP 5: Form checks (no model) → is the quote in the text? is it an organization, not “hospitals” or a person?
STEP 6: Panel: 5 identical calls × yes/no questions → a criterion passes if “yes” ≥ half
STEP 7: Accept with quote, URL and timestamp — or reject with a reason code

Steps 2–6 are separate requests. One do-it-all request can't replace them, because the whole method relies on each call staying narrow.

03

Example in Action

Task: A marketer at a SaaS startup is putting together a comparison against HubSpot. They need a list of the competitor's real customers, with evidence. Sources: case study pages, press releases, the blog. Mistakes are costly here: if the deck names a company as a customer when it isn't one, the sales team ends up with egg on its face.

The typical problem with these pages: the headline names the product (“How X rolled out HubSpot”), while the testimonial below names only the company (“We cut our lead response time in half”). No single quote contains both sides at once.

Prompt 1 (extraction, generous):

You are extracting facts about customers of the product “HubSpot” from the text of a page.

Find every organization that might be using “HubSpot”.
If the wording is ambiguous, include it anyway — we'll decide later.

For each relationship, return:
- organization
- quote: ONE continuous passage copied from the text verbatim.
  Grab the neighboring heading or sentences so that the quote
  contains both the organization's name and a sign that it uses the product
- evidence type: case study / testimonial / logo / press release / other

Do not count as usage: investments, awards, association membership,
partnerships without an actual deployment.

Page text:
[paste text]

Prompt 2 (referent resolution, reads the whole page):

Here is the full page and a claim: “The company {organization} uses
HubSpot.”

Read the page and answer:
1. Argument: what on the page speaks for or against it (2-3 sentences).
   Keep in mind that “we” in a testimonial may refer to the testimonial's author,
   and the product name may appear only in the headline.
2. Verdict: YES or NO
3. Evidence sentence: a sentence copied from the page verbatim.

If there is no direct confirmation, the verdict is NO.

Page:
[paste text]

Result: Prompt 1 returns a list of candidates with quotes, some of them shaky. For each shaky candidate, Prompt 2 gives an argument, a YES/NO, and a sentence you can verify with a text search (Ctrl+F). Only candidates with a YES and a sentence that's actually found get accepted. Then five runs of a short judge (template below) weed out the remaining doubtful cases.

04

Why It Works

The model's weakness. The question “does the page confirm this?” invites agreement, and the answer drifts from run to run. When the model reads a lot and spits out a lot in one go, quality drops. Ask it to “find and verify at the same time” and you get both done worse.

The model's strength. It does well on a narrow task with a clear format: copy a passage, answer “yes/no” to a single question. Copying can be checked with a plain string search. Results become reproducible once you average the answers of several independent calls.

How the method exploits this. The quote turns “do I trust the model?” into “is this sentence on the page?”, and a text search answers that. Splitting the roles removes the conflict: the extractor can err on the side of generosity because filters stand behind it. The referent-resolution step plugs the biggest hole in narrow checks: they lose evidence that's scattered across the page. In the experiments, this step more than doubled the number of relationships found.

Control knobs: - Number of votes (5) → drop to 3 to save money, raise it if answers still drift. - The “half the votes” threshold → raise it to “all five” if a false positive costs more than a miss. - The criteria list → add one question for each error you spot, e.g. “is this an award rather than usage?” - How much text the judge sees → wider means fewer true facts lost, narrower means less noise. In the study, a narrow slice of the page produced lots of false rejections. - Extraction strictness → “generous” for hunting opportunities, “strict” for a report that's going to a client.

05

Prompt Template

A template of three prompts, one per stage. The paper lists the judge's criteria in Table 8, which isn't in the available part of the text. So the criteria below are examples based on the paper's description — adapt them.

Prompt A — Extractor (generous):

<Role>You extract relationships of the form “{subject} {relation_type} {object}” from text.</Role>

<Task>
Find every relationship that might be present in the text. When in doubt,
extract it — the decision will be made at the next step.
</Task>

<EvidenceRules>
- For each relationship, give ONE continuous quote copied from the text verbatim.
- Grab the neighboring heading or sentences so that the quote contains
  both names and the sign of the relationship.
- Do not alter, stitch together or shorten the quote.
</EvidenceRules>

<NotARelation>
{what does NOT count as a relationship: e.g., investment, award, membership}
</NotARelation>

<Output>
List: [subject | relationship | object | quote]
</Output>

Text:
{text}

Prompt B — Referent resolution (reads everything):

<Task>
Claim: “{subject} {relation_type} {object}”.
Read the whole page.
</Task>

<Hint>
Pronouns (“we”, “our team”) refer to the author of the testimonial.
The product name may appear only in a heading or caption.
{rule_for_page_type: the vendor's own page or a third-party one}
</Hint>

<Output>
1. Argument: 2-3 sentences
2. Verdict: YES / NO
3. Evidence sentence: verbatim from the page
No direct confirmation means the verdict is NO.
</Output>

Page:
{page}

Prompt C — Judge (run it 5 times independently, each time in a new chat or call):

Claim: “{subject} {relation_type} {object}”
Page fragment: {fragment_around_quote}
Additional info (if available, from the previous step): {argument_and_sentence}

Answer only YES or NO for each criterion:
1. {criterion_1: does the page present the organization as a user of the product?}
2. {criterion_2: is the subject a specific organization, not “clinics” in general?}
3. {criterion_3: is the relationship something other than an investment, award or membership?}
4. {criterion_4}
5. {criterion_5}
Format: number — YES/NO — one-line reason.

Final rule: a criterion passes if “YES” gets at least half the votes. A relationship is accepted if it passes every applicable criterion. The share of “YES” votes is your confidence score: send anything below the threshold to manual review.

What to fill in: {relation_type} — what you're looking for (“uses”, “integrates with”, “supplies”); {NotARelation} — an explicit list of things that look similar but don't count; criteria — one checkable idea each.

🚀 Quick start — paste this into the chat:

Here is a template for three-step fact extraction with quotes (extractor → referent resolution → 5-vote judge).
Adapt it to my task: [your task].
Ask me questions to fill in the fields.

[paste the template above]

The LLM will ask which relationships you're looking for, what looks like them but doesn't count, and where the evidence tends to be split up. You need those answers to write the “doesn't count” list and the judge's criteria — the method's precision rests on them. For everything else, it'll borrow the pattern from the template.

06

Limitations

⚠️ Quote ≠ truth: a quote only proves that the page claimed it. It doesn't check whether the relationship is current or real. The vendor may have written about a customer who left long ago.

⚠️ Losing true facts: even the final pipeline misses roughly one in three true facts. Most often they get cut by the judge, who sees only a slice of the page and misses the “Trusted by” heading above a row of logos.

⚠️ The score depends on the reference: measured against the company's manual list, the method got low precision because the list is incomplete. Most of the “errors” turned out to be real relationships missing from the list. Check your results against the pages, not against someone else's spreadsheet.

⚠️ Labeling was done by models: the “correct answers” were assigned by one strong model and rechecked by another. Some verdicts had to be flipped, and a human read only a sample.

⚠️ Integrations are harder than customers: “product — product” relationships are verified noticeably less accurately than “organization — product” ones.

⚠️ Cost and scale: five votes per relationship plus several calls per page add up to a lot of requests. Done by hand in a chat, the method works for dozens of pages; thousands need automation.

⚠️ Risky sources: three aggregator sites produced fabricated relationships and had to be blocked. Third-party pages give lower recall, and often there's no evidence on them at all.

⚠️ Part of the paper is unavailable: the text cuts off at the section on the confidence score. The findings on long context, run-to-run variance and prompt tuning (Section 6) aren't covered here.

07

How They Studied It

The idea was simple: a relationship gets into the knowledge graph only with a quote. The team took 61 products for healthcare and the catalog of the Elion marketplace, with its manual list of customers and integrations. The pipeline went through all the pages: 3284 pages, 6428 candidates. Each candidate was labeled by a strong model (which read the whole page), and the verdict was rechecked by another model. Because of that, 14% of the verdicts were flipped.

There are two metrics. Against the page-level labels, precision is 0.94 and recall is 0.71. Against the catalog's manual list, just 0.34 and 0.41. But of the 803 pairs missing from the list, 716 (89%) were confirmed by the page. So the list is incomplete — the method isn't bad.

The most telling experiment ran on 266 pages from 21 vendors. Without the referent-resolution step, the method found 133 relationships; with it, 291. Recall jumped from 0.36 to 0.81, and precision went up too (0.89 → 0.93). The manual list didn't register this gain at all. The practical takeaway: measure with the wrong yardstick and a useful step will look useless.

The web-search agent cost $2.19 for all 61 vendors and found evidence for 37% of the customers that aren't on the vendor's own site. From the panel's vote shares, the authors built a confidence score (a simple logistic regression). At the same 0.94 precision, it keeps 0.77 of the true relationships versus 0.63 for the hard rule. The share of “yes” among the five calls alone gives almost the same result as the full model. For practitioners this means counting votes matters more than inventing fancy formulas.

Surprises: the criterion that loses true relationships most often is “the page presents the organization as a user.” It depends on context outside the quote. And roughly one quote in eleven turned out to be stitched together from two fragments: the model skipped the characters between them.

08

Adaptations and Extrapolations

🔧 Technique: widen the judge's context → fewer true facts lost

Among the relationships the panel rejected, 594 had already been confirmed by the referent-resolution step on the full page, and 391 of those were true. If the judge rejects things the full-page read already confirmed, give it this along with the fragment:

Additional info: the previous step read the whole page and confirmed the relationship. Its argument: {argument}. Its evidence sentence: {sentence}. Take this into account, but check that the sentence actually appears in the fragment or is consistent with it.

That's exactly what the authors did: they passed the argument and the sentence to the judge, labeled as “the previous step's claim.”

Extrapolation: research-agent rules in a system prompt or CLAUDE.md

The paper didn't test this prompt; it carries the ideas of the agentic step over to instructions:

You are researching the customers of {company} on the web.

Limits: no more than 25 searches and 15 page reads.
Start every tool call with a single line: “Reason: …”.
Read only pages whose URLs were returned by search.
Do not read: social networks, job sites, app stores, aggregators {list}.
Record every relationship you find with a verbatim quote and the URL.
If there is no quote, don't record the relationship.
At the end, return the pages worth saving and the reason for each one.
09

Resources

  • Paper: Every Edge Needs a Quote: Building a Quote-Grounded Knowledge Graph of Healthcare Software Adoption with Language-Model Agents — Juan Felipe Duran, Arthur Tobler, Martin Vallières (McGill University, Montreal; Toboggan Labs). Preprint.
  • Catalog: Elion — elion.health
  • Attribution: Rashkin et al. (the idea of tying claims to sources)
  • ReAct agent: Yao et al.
  • Tools: LangGraph, OpenRouter, Braintrust, Firecrawl, Graphiti, Neo4j

Research digest

Key result

Discovered: ask a model “does this page confirm that customer X uses product Y?” and it will happily say “yes”. The same testimonial on four pages got three “yes” votes and one “no”. Quote-Grounded Extraction lets you pull facts from websites and articles (who is whose customer, who integrates with whom) where every fact comes with a verbatim quote you can check with Ctrl+F. One call only proposes candidates; the others only verify them against a single narrow criterion. If the evidence is split (the headline names the product, the testimonial names the company), a referent resolution step kicks in: the model rereads the whole page. This step more than doubled the number of relationships found.

Principle

It's an assembly line. Each stage does one job and stays out of everyone else's. The process: generous candidate collection with quotes → checking the quote as a string (no model) → rereading the whole page if the quote names only one side → five independent judges answer “yes/no”. The quote turns “do I trust the model?” into “is this sentence on the page?”. A plain text search settles the second question. The share of “yes” among the five votes serves as a confidence score. Anything below the threshold goes to manual review.

Why it works

The model fumbles when it reads a lot and outputs a lot at once. Ask it to “find and verify right away” and you get both done worse. And the question “does the page confirm it?” nudges it toward agreement all on its own, with the answer bouncing around from run to run. On the flip side, the model is good at narrow tasks with a clear format: “copy the passage” or “answer yes/no to one question.” Copying is checked with a string search. The variance gets smoothed out by averaging five independent calls. The extractor is allowed to err on the side of generosity because filters stand behind it, and the filters don't have to search for anything. A bogus “customer” on the list does more harm than a missing one: it creates false confidence. The price of the method: even the final pipeline loses roughly one in three true facts.

When to apply

Collecting provable facts from texts → specifically competitor customer lists, integrations and partnerships, especially when a mistake on the list costs you your reputation (a deck, a client report, a knowledge base). For a strict report, set the threshold to “all five votes.” For hunting opportunities, “half” is enough. Not a fit: when you need freshness. A quote only proves that the page claimed it. The customer may have left long ago. Thousands of pages call for automation: done by hand in a chat, the method handles dozens. “Product — product” relationships are verified worse than “organization — product” ones. In the study, aggregator sites produced fabricated relationships, so it's better to exclude sources like that.

Mini recipe

1. Collect the texts: save the case study, testimonial, press release and blog pages as plain text. 2. Run the generous extractor: one page per call. Let it grab everything that's even doubtful and attach one verbatim quote to each relationship, with the organization's name and a sign of usage. 3. Write the “doesn't count” list: investments, awards, association membership, partnerships without a deployment. Your precision rests on it. 4. Check the quotes without a model: search for each one in the page text with Ctrl+F. Not in the text — toss it. Make sure the subject is a specific organization, not “clinics in general.” 5. Reread the whole page: if a quote names only one side of the relationship, give the model the full page. Have it return an argument, YES/NO and a verbatim sentence. No direct confirmation — NO. 6. Call the judge five times: each time in a new chat. Ask 3-5 yes/no questions, one idea per question. A criterion passes if “yes” gets at least half the votes. 7. Accept or reject: an accepted fact keeps its quote, link and date. A rejected one keeps a reason code. That comes in handy when you add a new criterion for the next error you spot.

Examples

[BAD]: `Here's a page. Tell me whether it's true that the company Acme Corp uses HubSpot, and give me evidence` [GOOD]: Step 1, generous collection: `Find every organization that might be using “HubSpot”. If it's ambiguous, include it. For each one, give ONE verbatim quote, and grab the neighboring heading so it contains both the organization and the product. Do not count as usage: investments, awards, association membership.` Step 2, for the doubtful ones: `Here is the full page and a claim: “The company Acme Corp uses HubSpot.” Give me: 1) the argument for and against in 2-3 sentences, keeping in mind that “we” in a testimonial is the testimonial's author and the product may be named only in the headline; 2) a verdict of YES or NO; 3) a verbatim sentence from the page. No direct confirmation means the verdict is NO.` Step 3, the judge (5 times, in fresh chats): `Claim: “Acme Corp uses HubSpot.” Fragment: [around the quote]. Answer YES or NO for each item: 1) the page presents the organization as a user of the product; 2) Acme Corp is a specific company; 3) this is not an award, investment or membership. Format: number — YES/NO — one-line reason.` Outcome: the competitor list only gets relationships where the sentence was found with Ctrl+F and most judges said “yes”. Everything else goes to manual review.

In plain words

Models are shameless suck-ups: ask one whether a text confirms a fact and it'll almost always cheerfully reply “yes, absolutely”. Trying to make an LLM find facts and vouch for them at the same time is a guaranteed fail. In a giant wall of text, the model starts hallucinating and mixing up wishful thinking with reality, turning your knowledge graph into a landfill of guesswork.

It's like hiring an intern to check expense reports: take his word for everything and the company goes under fast. He swears on his mother's grave there was a receipt, but he can't produce it. Quote-Grounded Extraction flips on nitpicky-auditor mode: nobody's word counts — every fact must come with a direct quote, letter for letter.

The setup is simple and ruthless. First the model throws out hypotheses, but bolts a quote onto every single link. Then a dumb script steps in and runs a character-by-character string search against the source: get even one punctuation mark wrong and the fact goes in the trash. Finally, a council of 5 independent calls convenes and votes anonymously with a binary “yes/no” to rule out random generation glitches.

The study used it to map software in healthcare, but the principle is universal. It's a lifesaver for any kind of competitive intel: say, when you're hunting down a competitor's real customers for a hard-hitting comparison. If a fake case study sneaks into the sales deck, the sales team will die of embarrassment, but with a filter this tough, every logo comes with rock-solid receipts.

Bottom line: never ask a model to “just extract the data” in a single pass — it'll lie with a straight face. Separate collection from auditing, tie everything to quotes, and make the models double-check each other by voting. Otherwise, instead of a base of reliable knowledge, you'll build a house of cards that collapses at the very first fact-check.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on Quote-Grounded Extraction: Every Fact Gets In Only With a Verbatim Quote and Several Layers of Checks arXiv:2610.32781

Sign in to apply this study New accounts get 50 free credits.