Verify statistics, claims, and source attributions in blog posts. Pure Claude pipeline with no external NLP dependencies.
Read the target file and identify all sections containing data or other load-bearing claims.
Scan the full text for every claim that would need evidence if challenged. Include numeric claims and non-numeric load-bearing claims such as policy, product, ranking, methodology, legal, comparative, "best", "first", "latest", or platform-behavior statements. Build a claims list with these fields:
| Field | Description |
|---|---|
| claim_text | The exact sentence or phrase containing the claim |
| claim_type | Statistic, policy, product, ranking, comparative, legal, methodology, freshness |
| value | The numeric value if present (e.g., "42%", "$1.2M", "3x") |
| attribution | Named source if present (e.g., "HubSpot", "Gartner 2025") |
| url | Cited URL if present (from markdown link or parenthetical) |
| location | Heading or line number where the claim appears |
For each claim that includes a URL:
http and https only, reject
localhost, loopback, private, link-local, and reserved IPs after DNS
resolution, reject javascript:, data:, and file: URLs, limit redirects
and validate the final URL, and cap response size and timeout.Verify every cited URL unless the user explicitly sets a cutoff. Batch requests with rate limiting and emit resumable output so long source lists can continue after an interruption.
For claims without a URL:
Output the full results table, summary statistics, and recommended actions.
Identify claims matching these structures:
Fully cited (highest priority):
- [Number]% [claim] ([Source], [Year]) - parenthetical citation
- [claim] [Number]% ... [markdown link to source] - inline link
- According to [Source], [Number]... - attribution lead
Uncited statistics (flag for sourcing):
- [Number]% of [noun phrase] - standalone percentage
- [Number]x more/less/higher/lower - multiplier claims
- $[Number] [claim] - dollar figures without attribution
Weak signals (check context before extracting):
- studies show, research indicates, data suggests + nearby number
- survey found, report reveals, analysis shows + nearby number
- Round numbers in isolation (e.g., "millions of users") - skip unless specific
Non-numeric load-bearing claims (extract even without numbers):
- Platform or policy changes ("FAQ rich results were retired", "Google Search ignores llms.txt for ranking or visibility")
- Product or model availability ("gemini-3.1-flash-tts is the current Gemini TTS model")
- Ranking or comparative statements ("X is the latest core update", "Y is stronger than Z")
- Legal, compliance, or regulatory statements
- Methodology claims about how a study measured its result
Before assigning a positive score, classify the source:
| Tier | Examples | Action |
|---|---|---|
| T1 | Official docs, regulator pages, .gov, .edu, primary datasets, standards bodies | Preferred |
| T2 | Named studies with methodology, original industry research, academic papers | Accept with methodology note |
| T3 | Reputable reporting that links to the upstream source | Accept only when no primary source is available |
| T4 | Generic SEO blogs, affiliate roundups, unsourced explainers | Reject |
| T5 | Content mills, scraped pages, AI spam, pages with no source trail | Reject |
Reject T4/T5 claims rather than giving them 0.7 for plausible wording. If three articles repeat one upstream study, treat them as one echo cluster and cite the upstream source when available.
| Score | Status | Criteria |
|---|---|---|
| 1.0 | VERIFIED | Exact number found on cited page in matching context |
| 0.7-0.9 | PARAPHRASE | Similar data found but with different wording, rounding, or timeframe |
| 0.3-0.6 | WEAK | Source page exists and covers the topic but the specific statistic is not visible |
| 0.0 | NOT FOUND | Cited page does not contain the claimed data anywhere |
| N/A | UNVERIFIED | No source URL provided for the claim |
| 0.0 | REJECTED SOURCE | Source is T4/T5, an echo-only recap, or contradicts the claim |
Scoring guidance: - A claim of "43%" when the source says "nearly half" scores 0.8 - A claim of "2024" data when the source only has "2023" is stale-source risk; cap it at 0.5 and flag it even if the wording otherwise matches - A claim citing a homepage when the stat lives on a subpage scores 0.3 - A 404 or unreachable URL scores 0.0
File: [path] Claims found: [total] Verified: [count] | Paraphrase: [count] | Weak: [count] | Not Found: [count] | Unverified: [count]
| # | Claim | Source URL | Score | Status | Notes |
|---|---|---|---|---|---|
| 1 | "73% of marketers..." | https://example.com/report | 1.0 | VERIFIED | Exact match found in section 3 |
| 2 | "5x ROI improvement" | https://example.com/study | 0.8 | PARAPHRASE | Source says "nearly 5x" |
| 3 | "60% prefer video" | (none) | N/A | UNVERIFIED | Try: "video preference statistics 2025" |
This skill can be called from blog-analyze as an optional deep-verification step.
When invoked from the analyzer, flag claims scoring below 0.7 and always flag
stale-source risk, T4/T5 rejection, echo-cluster dependence, primary-source
mismatch, and untrusted fetched-page notes.
Standalone usage: /blog factcheck path/to/post.md
claude-blog applies FLOW's evidence discipline through claim-appropriate
provenance. Include the source details, relevant date or study period,
methodology, limitations, and stable URL when they are needed to identify,
verify, or interpret a claim. No fixed citation form is required. See
skills/blog-flow/references/flow-framework.md and /blog flow for the full
framework.
SKIPPED: user cutoff.