20 checks · deterministic · rule-based

Twenty checks before your agent cites a page.

Every parse returns clean Markdown plus Litmus — twenty rule-based checks your agent can inspect before it trusts a page.

$0.005 per parse  ·  3 free tries a day

response.json
{
  "url": "https://example.org/cohort-study",
  "markdown": "# Study Finds Correlation Between Diet and Longevity …",
  "litmus": {
    "litmus_version": "2",
    "verdict": "cite",
    "flags": [],
    "source": { "type": "news", "authority": 0.82 },
    "authorship": { "present": true, "name": "Jane Chen", "kind": "person", "source": "jsonld" },
    "content_type": { "type": "news_article" },
    "outbound_authority": { "score": 0.71, "top_domains": ["who.int", "thelancet.com"] },
    "citations": { "has_references": true, "external_links": 12, "external_per_1k_words": 3.2, "primary_domain_links": 5 },
    "structured_data": { "json_ld": true, "schema_types": ["NewsArticle"], "open_graph": true, "canonical": "https://example.org/cohort-study", "meta_description": true },
    "structural_trust_score": { "level": "high", "trust_factors": ["High-authority source", "Named authorship", "Dense citations"] },
    "hedge_language": { "density": "low", "markers": 2 },
    "content_density": { "thin_content": false, "ratio": 0.78 },
    "boilerplate_ratio": { "ratio": 0.18, "confidence": "high" },
    "quote_density": { "attributed_quotes": 3, "attribution_verbs": 5, "per_1k_words": 0.7 },
    "freshness": { "published": "2026-01-14", "age_days": 276, "stale_warning": false, "correction_noted": false },
    "page_status": { "is_error_page": false, "kind": null, "confidence": "high" },
    "paywall": { "detected": false, "note": null },
    "syndication": { "detected": false, "canonical_url": null },
    "is_archived": { "wayback": true, "archive_today": false },
    "redirects": { "final_url": "https://example.org/cohort-study", "hops": 0, "cross_domain": false },
    "tldr": { "text": "A 20-year cohort study links the Mediterranean diet to a 7.3-year increase in average lifespan." },
    "key_figures": [
      { "value": "7.3 yr", "context": "increase in life expectancy on the Mediterranean diet" },
      { "value": "24,200", "context": "participants across seven countries" }
    ],
    "reading_time": { "minutes": 7 }
  }
}
Source Trust Validity Read

Four patterns to check first.

The signals only matter if they change what happens next. These four cover nearly every call an agent makes.

Safe to build on

verdict is "cite" — authorship present, citations dense, density high, no flags. The page says what it claims and shows its work. Cite it, and log the verdict.

Wrong page, not wrong source

page_status fires, or paywall is detected, or content is truncated. The agent read a gate, not the article. Do not cite; retry elsewhere or escalate.

Right content, wrong copy

syndication is detected, or redirects crossed domains. The content is real but you are holding a copy. Cite the original via canonical.

Assertion dressed as evidence

Thin content, heavy hedging, no citations, no authorship. Treat it as opinion. Fine to mention, not fine to build on.

Source

Who wrote it, and do they show their work?

source

Page type, authority score, and the reasoning behind it.

✓ type: "news" · authority: 0.82✗ type: "blog" · authority: 0.21
how →
authorship

A named person, an organisation, or nobody — and where it was found.

✓ present: true · kind: "person"✗ present: false · kind: "unknown"
how →
content_type

What the page actually is, not what the URL suggests.

✓ type: "news_article"✗ type: "thin_listing"
how →
outbound_authority

A score plus the domains it links out to — primary sources or more blogs.

✓ score: 0.71 · top: "who.int"✗ score: 0.22 · top: "blog.example"
how →
citations

References section, external links, and links per 1,000 words.

✓ has_references: true · per_1k: 3.2✗ has_references: false · per_1k: 0
how →
structured_data

JSON-LD schema, OpenGraph, and the canonical URL.

✓ json_ld: true · og: true✗ json_ld: false · og: false
how →

Trust

Is it substance, or hedging and bare assertion?

structural_trust_score

High, medium or low — with the factors behind it, so it can be inspected.

✓ level: "high" · trust_factors: 3✗ level: "low" · trust_factors: 1
how →
hedge_language

Density of "reportedly", "some say", "allegedly" — claim vs rumour.

✓ density: "low" · markers: 2✗ density: "high" · markers: 14
how →
content_density

Thin-content flag plus ratio of substantive sentences.

✓ thin_content: false · ratio: 0.78✗ thin_content: true · ratio: 0.31
how →
boilerplate_ratio

How much is nav, ads and furniture. High + low density is the content-farm shape.

✓ ratio: 0.18✗ ratio: 0.74
how →
quote_density

Attributed quotes and attribution verbs per 1,000 words.

✓ quotes: 3 · per_1k: 0.7✗ quotes: 0 · per_1k: 0
how →

Trust is where false confidence hides. These five don't ask a model — they count what's actually on the page.

Validity

Is it even the page you asked for?

freshness

Published date, age, Last-Modified, staleness, and corrections.

✓ published: "2026-01-14" · stale: false✗ published: "2019" · stale: true
how →
page_status

Soft 404, login wall, captcha, JS shell. A 200 is not proof you got the article.

✓ kind: null — a real page✗ kind: "soft_404" — not the article
how →
paywall

Detected or not, with a note — a gate never passes as content.

✓ detected: false✗ detected: true
how →
syndication

Is this a copy of something published elsewhere? Cite the original.

✓ detected: false✗ detected: true
how →
is_archived

Presence in the Wayback Machine and archive.today.

✓ wayback: true✗ wayback: false
how →
redirects

Final URL, hop count, and whether it crossed domains.

✓ hops: 0 · cross_domain: false✗ hops: 2 · cross_domain: true
how →

Read

What does it say, and what does it cost you in context?

tldr

A one-line summary of what the page says — extractive, not generated.

✓ "A 20-year cohort study links…"✗ "" — nothing extracted
how →
key_figures

The numbers on the page, each with the context it appeared in.

✓ 7.3 yr — "increase in life expectancy"✗ 0 figures
how →
reading_time

Minutes, to budget context before you spend it.

✓ minutes: 7✗ minutes: 1
how →

Same page, same Litmus version, same signals.

Every signal is rule-based and extractive — no model, no temperature. A given page and a given Litmus version produce the same signals every time, so the verdict can be logged and audited.

What we look at

Nearly every signal comes from the rendered page itself — the DOM, the Markdown, the response headers. tldr is extractive: it selects the page's strongest sentence, it does not write one.

What looks outside the page

Two signals check the wider web: is_archived queries the Wayback Machine and archive.today, and source.authority leans on a domain reference list. These can change over time — which is why the version is pinned.

Full thresholds and word lists are published in the methodology reference — see the MCP repo.

Run it on your own URL.

No account, no wallet. Three free tries, then $0.005 per parse.

Try a sample page:
✗ BEFORE — RAW DOM JUNK
<html>
  <head>
    <script>!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function()
    {n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(
    !f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.creat
    eElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.
    insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en
    _US/fbevents.js');</script>
    <link rel="stylesheet" href="/bundle.7f8a3c.css">
  </head>
  <body class="template-article">
    <div class="top-banner-ad">
      <iframe src="https://ad.doubleclick.net/..."></iframe>
    </div>
    <nav id="sticky-header">
      <ul><li><a href="/">Home</a></li>
      <li><a href="/sports">Sports</a></li>
      <li><a href="/opinion">Opinion</a></li></ul>
    </nav>
    <aside class="sidebar">
      <div class="trending-widget">Most Read</div>
      <div class="newsletter-cta">Sign up for our newsletter</div>
    </aside>
    <div id="content">
      <div class="article-header">
        <h1>Study Finds Correlation Between Diet and Longevity</h1>
      </div>
      <p>A comprehensive 20-year study published in <em>The Lancet</em> has found
      a strong correlation between dietary patterns and increased lifespan.</p>
      <table class="data-table">
        <thead><tr><th>Diet</th><th>Avg Lifespan</th><th>Sample</th></tr></thead>
        <tbody><tr><td>Mediterranean</td><td>83.4 yr</td><td>n=12,400</td></tr>
        <tr><td>Standard Western</td><td>76.1 yr</td><td>n=11,800</td></tr></tbody>
      </table>
      <div class="in-article-ad">
        <img src="/ad-300x250.jpg" alt="Sponsored">
      </div>
    </div>
    <footer>
      <div class="cookie-banner">We use cookies to improve your experience.</div>
      <div class="related-articles">You may also like...</div>
      <div class="comments-section">42 Comments</div>
    </footer>
  </body>
</html>
✔ AFTER — CLEAN MARKDOWN + TABLES
# Study Finds Correlation Between Diet and Longevity

*By Jane Chen, Health Correspondent*

A comprehensive 20-year study published in *The Lancet* has found
a strong correlation between dietary patterns and increased lifespan.

| Diet              | Avg Lifespan | Sample    |
| ----------------- | ------------ | --------- |
| Mediterranean     | 83.4 yr      | n=12,400  |
| Standard Western  | 76.1 yr      | n=11,800  |

Researchers noted that participants following a Mediterranean diet showed
a 7.3-year increase in average life expectancy compared to the control group.

The study controlled for socioeconomic factors and exercise habits across
24,200 participants in seven countries.
+ LITMUS — WHAT YOUR AGENT NOW KNOWS
{
  "source": { "type": "news", "authority": 0.82 },
  "freshness": { "published": "2026-01-14", "age": "7 months ago" },
  "tldr": "20-year study links Mediterranean diet to a 7.3-year increase in average lifespan.",
  "structural_trust_score": { "level": "high", "trust_factors": ["High-authority source"] },
  "content_type": "news_article"
}

No account, no wallet — three free tries per IP per day, then $0.005 per parse via x402.