Link and Citation Checker for AI Answers avatar

Link and Citation Checker for AI Answers

Pricing

from $2.00 / 1,000 links

Go to Apify Store
Link and Citation Checker for AI Answers

Link and Citation Checker for AI Answers

Check every link in an AI answer, report or list: does it resolve, HTTP status, redirects, page title, soft 404s, and whether the quoted text really appears on the page (HTML and PDF), with the matching passage. Catches made-up links and misquotes.

Pricing

from $2.00 / 1,000 links

Rating

0.0

(0)

Developer

LandlordTools

LandlordTools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

AI answers and reports cite links that don't exist, and quote pages that say something else. This Actor checks every link: does it resolve, where does it end up, what is the page called, and is the quoted text really on it? When a quote is wrong, you get the passage the page actually contains.

What it checks

  • Status and redirects:
    • Each URL is fetched with GET and redirects are followed one by one, so you see the whole chain (relative Location headers are resolved as RFC 9110 says 1).
    • Up to 10 redirects are followed.
  • Verdicts:
    • ok;
    • broken: 404 or 410 1, a domain that doesn't exist, a page that says it wasn't found while returning 200 (a "soft 404" 4), or a deep link redirected to the home page;
    • blocked: 401, 403, 429 2, 451 3 or a bot challenge. The site refused an automated check, which doesn't mean the link is wrong;
    • error: timeouts, 5xx and connection problems, which may be temporary;
    • invalid.
  • Quotes (HTML, PDF and plain text). Both sides are normalised first: Unicode NFKC 5, curly quotes and dashes, soft hyphens, spacing and case.
    • exact, or words (same words in the same order, punctuation aside), means the quote is there.
    • with-omissions: the quote uses ... or … and every part is on the page, in order.
    • close and partial mean a similar passage exists but the words differ. The verdict is quote-differs, with a similarity score and the real passage. This is how changed numbers and dates show up.
    • none means nothing like it is on the page (quote-not-found).
  • PDFs are read with Mozilla's PDF.js 6, including the document title.
  • Text input: paste an AI answer or Markdown. Links in Markdown, HTML and bare URLs are found, and trailing punctuation is trimmed.

Checking:

  • Unit tests replay real GOV.UK responses recorded on 3 October 2026, plus generated PDFs and edge cases.
  • tests/check_live.py checks live URLs against independent tools: curl for status and final URL, and Python's HTML parser or poppler's pdftotext for quotes. All 8 agreed on 3 October 2026.

Input

{
"links": [
{
"url": "https://www.gov.uk/vat-rates",
"quote": "The reduced rate of VAT is 8%, for example on children's car seats and home energy.",
"label": "VAT rates"
},
{
"url": "https://gov.uk/vat-rates",
"quote": "The standard rate of VAT increased to 20% on 4 January 2011 (from 17.5%).",
"label": "VAT rates"
},
{
"url": "https://www.gov.uk/guidance/rates-of-vat-on-different-goods-and-services-2031",
"label": "Rates of VAT on different goods and services"
}
],
"timeoutSecs": 20
}

Example output

One dataset row per link. Here the quoted 8% rate is wrong, and the passage shows the page says 5%:

{
"url": "https://www.gov.uk/vat-rates",
"label": "VAT rates",
"verdict": "quote-differs",
"status": 200,
"finalUrl": "https://www.gov.uk/vat-rates",
"redirects": 0,
"redirectChain": [],
"title": "VAT rates - GOV.UK",
"contentType": "text/html",
"quote": "The reduced rate of VAT is 8%, for example on children's car seats and home energy.",
"quoteFound": false,
"quoteMatch": "partial",
"similarity": 0.59,
"passage": "…of VAT What the rate applies to Standard rate 20% Most goods and services Reduced rate 5% Some goods and services, for example, children’s car seats and home energy Zero rate 0% Zero-rated goods and services,…",
"note": null,
"error": null
}

The OUTPUT record adds a count per verdict, and what each verdict means.

Integrations

Ready-made files in integrations/README.md: a Microsoft Power Platform custom connector, OpenAPI 3 (AI agents, n8n, Postman), an Excel / Power BI Power Query script, a Google Sheets function, and curl, Python and JavaScript examples.

Pricing

Pay per event: $2 per 1,000 results ($0.002 each), plus Apify's minimal start fee. A result is one row in the dataset: one link checked. The run stops at your spending limit.

Sources

  1. RFC 9110 HTTP Semantics: 15.4 Redirection 3xx, 10.2.2 Location (may be relative), 15.5.5 404 Not Found, 15.5.11 410 Gone. Accessed 3 October 2026.
  2. RFC 6585: 4. 429 Too Many Requests. Accessed 3 October 2026.
  3. RFC 7725: 3. 451 Unavailable For Legal Reasons. Accessed 3 October 2026.
  4. Google Search Central: HTTP status codes, and soft 404 errors (an error message served with 200). Accessed 3 October 2026.
  5. Unicode Standard Annex #15: Normalization Forms (NFKC, used before comparing quotes). Accessed 3 October 2026.
  6. pdfjs-dist (Mozilla PDF.js, Apache-2.0): text from PDFs. Accessed 3 October 2026.