skills/blog-factcheck/SKILL.md
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 statistical claims (numbers, percentages, named sources), fetches each cited URL via WebFetch, 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", "factcheck", "source verification".
npx skillsauth add agricidaniel/claude-blog blog-factcheckInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 claims.
Scan the full text for every claim that includes a number, percentage, dollar amount, or named source. Build a claims list with these fields:
| Field | Description | |-------|-------------| | claim_text | The exact sentence or phrase containing the statistic | | value | The numeric value (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:
Process claims sequentially to avoid rate-limiting source sites.
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 linkAccording to [Source], [Number]... - attribution leadUncited statistics (flag for sourcing):
[Number]% of [noun phrase] - standalone percentage[Number]x more/less/higher/lower - multiplier claims$[Number] [claim] - dollar figures without attributionWeak signals (check context before extracting):
studies show, research indicates, data suggests + nearby numbersurvey found, report reveals, analysis shows + nearby number| 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 |
Scoring guidance:
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, only claims scoring below 0.7 are flagged in the
analysis report.
Standalone usage: /blog factcheck path/to/post.md
claude-blog inherits FLOW's evidence triple (year anchor in prose, inline citation with publisher and title, URL with retrieval date). See skills/blog-flow/references/flow-framework.md and /blog flow for the full framework.
development
Research what people are actually saying about a topic in the last 30 days across Reddit, X / Twitter, YouTube, Hacker News, dev.to, Medium, and other public discourse platforms. API-free; uses WebSearch with platform-targeted site operators plus recency filters. Produces DISCOURSE.md (a structured brief) and JSON output the writer can consume. Complements blog-researcher (which focuses on authority sources) with a recency-and-engagement lens. Use when user says "blog discourse", "discourse research", "what are people saying about", "research what people are saying", "voice of customer", "social listening", "30-day research", "trend research", "what's the discussion on", "real-time research", "practitioner discourse", "/blog discourse".
documentation
Establish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't editorial rules, taboo phrases, competitor differentiation) and VOICE.md (existing persona JSON re-expressed as readable prose), both written to the project root. When present, all blog sub-skills auto-load these files before writing or reviewing. Pairs with blog-persona, which manages the structured persona JSON. Use when user says "blog brand", "create brand context", "brand voice doc", "BRAND.md", "VOICE.md", "establish editorial brand", "brand guidelines for blog".
testing
Translate existing blog posts into one or more target languages with SEO-optimized localization. Produces native-quality translations that preserve markdown structure, frontmatter, schema JSON-LD, image and chart embeds, and citation capsules. Localizes keywords, meta tags, numbers, dates, currencies, and quote styles per locale. Flags machine-translation artifacts for review. Run BEFORE blog-localize: this handles language conversion; localize handles cultural adaptation after translation completes. Use when user says "translate blog", "blog translate", "uebersetzen", "traduire", "traducir", "translate post", "blog auf Deutsch", "blog en espanol".
testing
One-command multilingual blog creation. Writes a blog post, translates it into user-specified languages, applies cultural adaptation, and emits hreflang tags, sitemap entries, and a CMS-ready language map. The complete write-to-publish pipeline for international content. Orchestrates blog-write, blog-translate, blog-localize, and (optionally) seo-hreflang. Use when user says "multilingual blog", "blog multilingual", "write in multiple languages", "international blog", "mehrsprachiger Blog", "blog multilingue", "blog multilingue", "create blog in German and French".