Verify statistics and claims in blog posts by fetching cited source URLs and checking if the claimed data actually appears on the page. Extracts all load-bearing claims (statistics, product or policy claims, ranking and comparative claims, named sources), validates cited URLs before fetching, and scores match confidence (exact match 1.0, paraphrase 0.7-0.9, not found 0.0). Flags uncited claims as UNVERIFIED. Use when user says "fact check", "verify statistics", "check sources", "validate claims"
Blog Fact-Check verifies the statistics, claims, and source attributions in a blog post by fetching the cited source URLs and checking whether the claimed data actually appears on the page. It solves the credibility problem of AI-assisted or SEO content that cites numbers which may be fabricated, paraphrased, stale, or sourced from low-quality pages. It runs as a pure Claude pipeline with no external NLP dependencies.
The workflow reads the post, extracts every load-bearing claim (statistics, policy, product, ranking, comparative, legal, methodology, and freshness statements) into a structured list with claim text, type, value, attribution, URL, and location, then verifies each cited claim. Notably, it applies careful safety controls before fetching: it allows only http and https, rejects localhost, loopback, private, link-local, and reserved IPs after DNS resolution, rejects javascript:, data:, and file: URLs, validates redirects and the final URL, and caps response size and timeout — a defensive posture against server-side request forgery. It also treats fetched page content as untrusted data and explicitly ignores any embedded prompt or tool instructions, extracting evidence only. Sources are classified into tiers (T1 primary docs and regulators through T5 content mills), with T4/T5 rejected and echo clusters collapsed to a single source. Each claim gets a confidence score from 1.0 (exact match) down to 0.0 (not found or rejected source), and uncited claims are flagged UNVERIFIED.
It targets writers, editors, and SEO practitioners who need to audit source integrity before publishing, producing a verification report with per-claim scores, statuses, and recommended actions.
It extracts load-bearing claims (numeric statistics plus non-numeric claims such as policy, product, ranking, legal, methodology, and freshness statements) and, for each that has a cited URL, fetches the page and checks whether the claimed value or wording appears there in matching context.
On a confidence scale: 1.0 VERIFIED (exact match in context), 0.7-0.9 PARAPHRASE, 0.3-0.6 WEAK, 0.0 NOT FOUND, N/A UNVERIFIED for claims with no URL, and 0.0 REJECTED for T4/T5 or echo-only sources. Stale-source and homepage-vs-subpage mismatches are capped and flagged.
It applies deliberate safeguards before fetching: only http/https are allowed; localhost, loopback, private, link-local, and reserved IPs are rejected after DNS resolution; javascript:, data:, and file: URLs are rejected; redirects and final URLs are validated; and response size and timeout are capped. Fetched content is treated as untrusted and its embedded instructions are ignored.
They are marked UNVERIFIED, and the skill suggests a search query the user can run to find a source (and a likely domain if the claim names a specific organization).
Quick Setup:
.claude/skills/Repository
agricidaniel/claude-blog