← Browser Extensions
Browser Extensions 2026-10-05

Receipts

Checks each claim in a Google AI Overview against the pages it cites, and shows you the sentence it found (or tells you it found nothing).

Receipts
Prototype

Receipts

Checks each claim in a Google AI Overview against the pages it cites, and shows you the sentence it found (or tells you it found nothing).

Date: 2026-10-05 Form factor: Browser extension (Manifest V3) Browser surface: content script on Google search result pages, toolbar popup, service worker (fetches cited pages), chrome.storage Status: Prototype

What it is

On a Google search that shows an AI Overview, you click the Receipts icon and then Check the overview's sources. Receipts splits the overview into individual claims, reads each page cited next to a claim, and finds the closest passage on that page. Each claim gets a badge in place: found, partial, differs (the passage covers the same thing with different numbers), or not found. The popup lists the flagged claims first, each with the quoted passage, so you can judge it yourself in a few seconds.

Receipts doesn't decide whether a claim is true. It answers a narrower question: does the page Google pointed to actually say this? Then it shows you the passage, so you can see the evidence it's working from.

Why it has to be an extension

The AI Overview only exists in your own search results page. It's generated for each query, can differ from one user or session to the next, and Google offers no API for it. A website can't see your search results. A server could scrape Google, but that breaks Google's terms and gets back a different overview from the one you're reading. A content script can read the overview as it rendered in your tab, including the citation links next to each paragraph. A service worker can then fetch those cited pages from your browser and compare them, which a web page can't do because cross-origin fetches are blocked without the extension's host permission.

Who it serves

People who use AI Overviews but can't afford to take one at its word: students and teachers, reporters and researchers, and anyone looking up a medical, financial, or home-repair figure before acting on it. Their problem is specific. The overview looks sourced, with a link chip right next to the sentence, and clicking through to check is slow enough that almost nobody does it. Receipts turns that click-through into a quoted passage you can read in about two seconds.

Why it could be profitable

Model. Freemium. The free tier gets 10 overview checks a day. Pro, at around $4/month, removes the cap, keeps a history of past checks, and would extend coverage to other AI answer surfaces with inline citations (Bing's Copilot answers, Perplexity, ChatGPT search). The stronger revenue line is probably site licenses for schools, libraries, and newsrooms. Those buyers already pay for research and verification tools. Whether they'd budget for one aimed at AI answers is an open question I can't answer from desk research.

Why now. On 2026-09-29, Washington University in St. Louis published results from an audit of 55,393 Google searches run between March 13 and April 21, 2026. Of 98,020 verifiable claims in AI Overviews, about 7% weren't supported by the pages Google cited and about 4% contradicted them. Only 41.9% of overviews were fully grounded. The researchers also found that source quality and claim fidelity were largely independent, so a trustworthy-looking citation doesn't mean the sentence next to it is faithful. That finding is the case for this extension. Separately, Google keeps adding more citation surfaces to AI Overviews (a "Further Exploration" section, subscription labels, inline link previews, announced in May 2026), so there are more links to check, not fewer.

Where the case is thin. Most searchers won't pay to double-check a search result, and the 11% problem rate means a casual user sees a flag on only one or two claims in a typical overview. Competition already exists. "AI Fact Checker" on the Chrome Web Store sends a highlighted selection to Gemini to verify it against the sources. Receipts takes a different approach: it checks the whole overview at once, runs locally without sending your searches to any model, and shows you a quote rather than a verdict. Whether that difference is enough to win paying users is untested. The biggest operational risk is that Google changes the overview's markup. The content script anchors on the visible "AI Overview" heading rather than class names, but it will still break sometimes and need fixes quickly.

How to load it in Chrome

  1. Open chrome://extensions and turn on Developer mode.
  2. Click Load unpacked and select this folder's extension/ directory.
  3. Search Google for a question that usually gets an AI Overview (question-form searches trigger one far more often than single words). Click the Receipts icon, then Check the overview's sources. The first check asks for permission to read pages on other sites. That's how it fetches the cited pages. (The prototype ships without an icon, so Chrome shows its default badge in the toolbar.)

How to try the demo

  1. Open index.html in any modern browser. The sample data is also inlined in the page, so it works from file:// with no server.
  2. Click the receipt icon at the right of the mock toolbar.
  3. Click Check the overview's sources. After a short pause, badges appear on the overview and the popup lists the results. Expand any claim to see the passage. Hover a badge on the page to see the same quote.

The search page and the five cited sites are invented, and their text comes from sample-data.json instead of being fetched over the network. Everything else runs the extension's own files: content.js finds the overview and extracts claims from the mock page, matcher.js does the matching, and popup.js and popup.css render the popup.

Permissions, and why each one

Permission Why it's needed
storage Keeps the daily free-check count and plan in chrome.storage.local.
optional_host_permissions: https://*/* The service worker fetches the pages an overview cites, and those can be on any domain. It's optional. Chrome asks for it the first time you click Check, not at install, and you can revoke it. Fetches are sent without cookies, so cited sites see a logged-out visitor.
Content script on https://www.google.com/search* Reads the AI Overview and its citation links, and places the badges. It runs only on Google search result pages.

What's in this prototype

  • A content script that finds the AI Overview by its visible heading, extracts sentence-level claims with the citation links next to each, and adds status badges in place (with the quoted passage as a tooltip). It guards against double injection, and all its class names start with rcpt-.
  • A service worker that fetches each cited page once, strips it to text, and treats paywalled or script-rendered pages that come back nearly empty as "unread" rather than "not found".
  • matcher.js, a lexical matcher shared by the service worker and the demo. It scores word overlap and checks whether every figure in the claim appears in the passage. When the passage has different figures, it reports differs.
  • A popup with a summary bar, flagged claims listed first, an expandable quote for each claim, a daily free-tier counter, and Copy report (plain text for pasting into notes or an assignment).
  • Stubbed: payment and the Pro plan, check history, and every search engine other than google.com.

The matcher is deliberately simple. It catches missing support and changed numbers well. It can't catch a claim that rewords its source while flipping the meaning (a negation, or "used to" vs. "still does"), so a found badge means "the words and numbers are there," not "the claim is right." The quote is there so you can check that yourself.

Roadmap

  • Use Chrome's built-in on-device model (the Prompt API) to judge the passages the lexical matcher flags, so negations and reworded contradictions get caught without sending anything off the device.
  • Support Google's regional domains and AI Mode, then Bing Copilot answers and Perplexity's inline citations.
  • Check history with a per-domain view: which sites keep getting cited for things they don't say.
  • A publisher-side version: alert a site owner when an AI Overview cites their page for a claim the page doesn't make. This would need a backend, and it's a separate paid product.
  • A classroom mode that exports a check as a worksheet: the claim, the quote, and a blank for the student's verdict.

Sources

Requirements

Receipts — Requirements

Goals

  • A user can see, for every claim in an AI Overview, whether the page cited next to it contains matching text, in under 10 seconds for a typical overview with 4–6 cited pages.
  • Every flag comes with the evidence behind it: the closest passage and its domain, or an explicit "nothing close" or "couldn't read the page."
  • The extension never sends the user's searches or the overview text to a third party. Only the cited pages are fetched, and they're fetched without cookies.
  • Host access is requested when the user first clicks Check, not at install.

Primary user

Someone who uses Google's AI Overviews for real decisions or for work that will be graded or published: a student, a teacher, a reporter, a researcher, or a homeowner checking a figure before buying something. They're on the search results page, they have an overview in front of them, and they want to know which sentences they can trust before they act on or repeat them. Today the only option is clicking each citation and searching the page by hand.

Functional requirements

  • FR1: The content script runs only on https://www.google.com/search* and detects an AI Overview by its visible "AI Overview" heading, without relying on Google's class names.
  • FR2: The content script splits the overview into sentence-level claims of six or more words, capped at 15 per overview.
  • FR3: Each claim is associated with the external links cited in its own paragraph or list item, or in the citation row immediately after it. Google /url?q= redirects are unwrapped.
  • FR4: A claim with no citation of its own is checked against every page the overview cites.
  • FR5: The service worker fetches each distinct cited URL once per check, with an 8-second timeout, credentials: "omit", and a 600,000-character cap on the HTML read.
  • FR6: Non-HTML responses, HTTP errors, timeouts, and pages with under 400 characters of readable text are reported as unreachable with a reason, never as missing.
  • FR7: The matcher scores each claim against every single sentence and every adjacent sentence pair of its cited pages, and returns the best passage with one status: found, partial, conflict, or missing.
  • FR8: A claim is conflict when the best passage shares at least 40% of its content words but contains different figures from the claim.
  • FR9: The content script adds a status badge to each checked claim, with the passage and domain as its tooltip, and marks conflict and missing paragraphs with a left rule. Re-running a check replaces the badges instead of duplicating them.
  • FR10: The popup shows the found/total tally, a proportional status bar, a per-status count, and the number of cited pages successfully read.
  • FR11: The popup lists claims with flagged ones first (conflict, missing, partial, unreachable, then found). Each expands to show its quote, and for conflict the figures on both sides.
  • FR12: The popup requests the optional https://*/* host permission inside the Check click handler, and if the user declines, it explains that nothing was checked.
  • FR13: The free plan allows 10 checks per calendar day, counted in chrome.storage.local and reset on the first popup open of a new day. The Check button is disabled at the limit.
  • FR14: Copy report writes a plain-text summary (query, date, each claim with its status and quote) to the clipboard.
  • FR15: On a tab without the content script, or a search without an overview, the popup says so and disables Check.

User stories

  • As a student, I want to see which sentences in an AI Overview are backed by their cited page, so that I don't quote an unsupported claim in an assignment.
  • As a reporter, I want the exact passage a claim came from, so that I can cite the original source instead of the summary.
  • As a homeowner comparing quotes, I want to know when the overview's number differs from its source's number, so that I don't plan around the wrong figure.
  • As a teacher, I want to copy a check as plain text, so that I can use real examples in a lesson about evaluating sources.
  • As a privacy-conscious user, I want the extension to ask for site access only when I first use it, and to fetch pages without my cookies, so that it doesn't do anything I didn't ask for.
  • As a free user, I want to see how many checks I have left today, so that the limit doesn't surprise me.
  • As any user, I want "couldn't read this page" kept separate from "not found," so that a paywall doesn't look like a fabricated claim.

Extension surfaces

  • Content script (www.google.com/search*) — finds the overview, extracts claims and citations, places badges.
  • Toolbar popup — starts a check, shows the summary and per-claim evidence, copies the report, shows quota.
  • Service worker — fetches cited pages cross-origin and runs the matcher.
  • chrome.storage.local — daily check count and plan.
  • chrome.permissions — runtime request for optional host access.

Non-functional requirements

  • Privacy: no analytics, no remote code, no model calls. The query and overview text never leave the browser. Cited pages are fetched without credentials.
  • Permission minimalism: one required permission (storage), and broad host access only as an optional permission granted at first use.
  • Resilience: if overview detection fails, the popup reports "No AI Overview" instead of guessing. No class-name selectors against Google's markup.
  • Host-page safety: all injected classes and the style element use the rcpt- prefix. Badges are appended and never replace Google's nodes.
  • Accessibility: popup controls are buttons and <details> elements, keyboard reachable, with visible focus rings. Status changes go to an aria-live region. Status is shown as text as well as color.
  • Performance: cited pages are fetched in parallel. Matching an overview with 5 pages finishes in under 200 ms on a mid-range laptop.

Out of scope (for the prototype)

  • Payments, accounts, and the Pro plan.
  • Search engines other than google.com, Google's regional domains, and AI Mode.
  • Meaning-level checks (negation, paraphrase that changes the meaning). The lexical matcher reports overlap only.
  • Check history and per-domain statistics.
  • Custom toolbar icons.

Open questions

  • How often does Google's overview markup change in ways that break heading-based detection, and how quickly can a fix ship through Web Store review?
  • Will Chrome's built-in Prompt API be fast enough on mid-range hardware to judge 10–15 passages per check?
  • Is https://*/* as an optional permission acceptable to Web Store review for this purpose, or will reviewers push for per-domain requests?
  • Do schools and newsrooms buy per seat or per site, and who signs off on a browser extension in those settings?
  • Should a partial result count against the found tally, or would that make overviews look worse than they are?

More from Browser Extensions