{"id":"047c8239-9e91-45a5-af7b-53b21ad1329c","shortId":"PfYsQ8","kind":"skill","title":"blog-factcheck","tagline":"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 m","description":"# Blog Fact-Check\n\nVerify statistics, claims, and source attributions in blog posts. Pure Claude\npipeline with no external NLP dependencies.\n\n## Workflow\n\n### Step 1: Read the Blog Post\n\nRead the target file and identify all sections containing data claims.\n\n### Step 2: Extract Statistical Claims\n\nScan the full text for every claim that includes a number, percentage, dollar\namount, or named source. Build a claims list with these fields:\n\n| Field | Description |\n|-------|-------------|\n| claim_text | The exact sentence or phrase containing the statistic |\n| value | The numeric value (e.g., \"42%\", \"$1.2M\", \"3x\") |\n| attribution | Named source if present (e.g., \"HubSpot\", \"Gartner 2025\") |\n| url | Cited URL if present (from markdown link or parenthetical) |\n| location | Heading or line number where the claim appears |\n\n### Step 3: Verify Cited Claims\n\nFor each claim that includes a URL:\n\n1. Fetch the source page via WebFetch\n2. Search the returned content for the specific numeric value\n3. If exact value found, check surrounding context matches the claim topic\n4. Assign a confidence score (see Verification Scoring below)\n\nProcess claims sequentially to avoid rate-limiting source sites.\n\n### Step 4: Flag Uncited Claims\n\nFor claims without a URL:\n\n- Mark status as UNVERIFIED\n- Suggest a search query the user can run to find a source\n- If the attribution names a specific organization, suggest their domain\n\n### Step 5: Generate Verification Report\n\nOutput the full results table, summary statistics, and recommended actions.\n\n## Claim Extraction Patterns\n\nIdentify claims matching these structures:\n\n**Fully cited** (highest priority):\n- `[Number]% [claim] ([Source], [Year])` - parenthetical citation\n- `[claim] [Number]% ... [markdown link to source]` - inline link\n- `According to [Source], [Number]...` - attribution lead\n\n**Uncited statistics** (flag for sourcing):\n- `[Number]% of [noun phrase]` - standalone percentage\n- `[Number]x more/less/higher/lower` - multiplier claims\n- `$[Number] [claim]` - dollar figures without attribution\n\n**Weak signals** (check context before extracting):\n- `studies show`, `research indicates`, `data suggests` + nearby number\n- `survey found`, `report reveals`, `analysis shows` + nearby number\n- Round numbers in isolation (e.g., \"millions of users\") - skip unless specific\n\n## Verification Scoring\n\n| Score | Status | Criteria |\n|-------|--------|----------|\n| 1.0 | VERIFIED | Exact number found on cited page in matching context |\n| 0.7-0.9 | PARAPHRASE | Similar data found but with different wording, rounding, or timeframe |\n| 0.3-0.6 | WEAK | Source page exists and covers the topic but the specific statistic is not visible |\n| 0.0 | NOT FOUND | Cited page does not contain the claimed data anywhere |\n| N/A | UNVERIFIED | No source URL provided for the claim |\n\n**Scoring guidance**:\n- A claim of \"43%\" when the source says \"nearly half\" scores 0.8\n- A claim of \"2024\" data when the source only has \"2023\" scores 0.7\n- A claim citing a homepage when the stat lives on a subpage scores 0.3\n- A 404 or unreachable URL scores 0.0\n\n## Output Format\n\n### Verification Report: [Post Title]\n\n**File**: [path]\n**Claims found**: [total]\n**Verified**: [count] | **Paraphrase**: [count] | **Weak**: [count] | **Not Found**: [count] | **Unverified**: [count]\n\n| # | Claim | Source URL | Score | Status | Notes |\n|---|-------|-----------|-------|--------|-------|\n| 1 | \"73% of marketers...\" | https://example.com/report | 1.0 | VERIFIED | Exact match found in section 3 |\n| 2 | \"5x ROI improvement\" | https://example.com/study | 0.8 | PARAPHRASE | Source says \"nearly 5x\" |\n| 3 | \"60% prefer video\" | (none) | N/A | UNVERIFIED | Try: \"video preference statistics 2025\" |\n\n### Recommended Actions\n- [List claims that need source URLs]\n- [List claims with weak or not-found scores that need replacement sources]\n- [List claims where the source data may be outdated]\n\n## Integration\n\nThis skill can be called from `blog-analyze` as an optional deep-verification step.\nWhen invoked from the analyzer, only claims scoring below 0.7 are flagged in the\nanalysis report.\n\nStandalone usage: `/blog factcheck path/to/post.md`\n\n## Cross-reference\n\nclaude-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.\n\n## Limitations\n\n- **Paywalled content**: WebFetch cannot access content behind login walls. These\n  score as WEAK (0.5) with a note about paywall detection.\n- **Dynamic pages**: JavaScript-rendered content may not be available via WebFetch.\n  If the page returns minimal content, note this in the status.\n- **PDF sources**: WebFetch may not extract PDF text reliably. Flag PDF URLs for\n  manual verification.\n- **Archived pages**: If a URL returns 404, suggest checking web.archive.org.\n- **Rate limits**: Process no more than 10 URLs per run to avoid overwhelming\n  source servers. If a post has more than 10 cited URLs, verify the first 10 and\n  list the remainder as SKIPPED.","tags":["blog","factcheck","claude","agricidaniel","agent-skills","ai-citations","ai-content","ai-marketing","ai-marketing-hub","blog-writing","claude-code","claude-code-skill"],"capabilities":["skill","source-agricidaniel","skill-blog-factcheck","topic-agent-skills","topic-ai-citations","topic-ai-content","topic-ai-marketing","topic-ai-marketing-hub","topic-blog","topic-blog-writing","topic-claude-code","topic-claude-code-skill","topic-claude-plugin","topic-claude-skill","topic-content-creation"],"categories":["claude-blog"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AgriciDaniel/claude-blog/blog-factcheck","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AgriciDaniel/claude-blog","source_repo":"https://github.com/AgriciDaniel/claude-blog","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 753 github stars · SKILL.md body (5,099 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:53:29.855Z","embedding":null,"createdAt":"2026-05-18T12:54:52.708Z","updatedAt":"2026-05-18T18:53:29.855Z","lastSeenAt":"2026-05-18T18:53:29.855Z","tsv":"'-0.6':392 '-0.9':379 '/blog':610,641 '/report':511 '/study':526 '0.0':408,476 '0.3':391,469 '0.5':661 '0.7':378,455,601 '0.8':442,527 '1':70,176,505 '1.0':367,512 '1.2':133 '10':722,737,743 '2':87,183,520 '2023':453 '2024':446 '2025':144,544 '3':165,193,519,533 '3x':135 '4':205,225 '404':471,712 '42':132 '43':434 '5':261 '5x':521,532 '60':534 '73':506 'access':652 'accord':301 'action':274,546 'actual':22 'amount':104 'analysi':347,606 'analyz':584,596 'anchor':625 'anywher':419 'appear':23,163 'archiv':706 'assign':206 'attribut':56,136,252,305,328 'avail':677 'avoid':218,727 'behind':654 'blog':2,9,47,58,73,583,618 'blog-analyz':582 'blog-factcheck':1 'build':108 'call':580 'cannot':651 'check':17,50,198,331,714 'citat':292,629 'cite':13,37,146,167,284,373,411,458,738 'claim':7,20,30,53,85,90,97,110,117,162,168,171,203,215,228,230,275,279,288,293,322,324,417,428,432,444,457,485,499,548,554,567,598 'claud':61,617 'claude-blog':616 'confid':44,208 'contain':83,124,415 'content':187,649,653,673,685 'context':200,332,377 'count':489,491,493,496,498 'cover':398 'criteria':366 'cross':614 'cross-refer':613 'data':21,84,339,382,418,447,571 'date':637 'deep':589 'deep-verif':588 'depend':67 'descript':116 'detect':667 'differ':386 'dollar':103,325 'domain':259 'dynam':668 'e.g':131,141,355 'everi':96 'evid':622 'exact':45,120,195,369,514 'example.com':510,525 'example.com/report':509 'example.com/study':524 'exist':396 'extern':65 'extract':27,88,276,334,696 'fact':49 'fact-check':48 'factcheck':3,611 'fetch':12,35,177 'field':114,115 'figur':326 'file':78,483 'find':247 'first':742 'flag':226,309,603,700 'flow':620,642 'format':478 'found':197,344,371,383,410,486,495,516,560 'framework':646 'full':93,267,645 'fulli':283 'gartner':143 'generat':262 'guidanc':430 'half':440 'head':156 'highest':285 'homepag':460 'hubspot':142 'identifi':80,278 'improv':523 'includ':99,173 'indic':338 'inherit':619 'inlin':299,628 'integr':575 'invok':593 'isol':354 'javascript':671 'javascript-rend':670 'lead':306 'limit':221,647,717 'line':158 'link':152,296,300 'list':111,547,553,566,745 'live':464 'locat':155 'login':655 'm':46,134 'manual':704 'mark':234 'markdown':151,295 'market':508 'match':43,201,280,376,515 'may':572,674,694 'million':356 'minim':684 'more/less/higher/lower':320 'multipli':321 'n/a':420,538 'name':33,106,137,253 'near':439,531 'nearbi':341,349 'need':550,563 'nlp':66 'none':537 'not-found':558 'note':504,664,686 'noun':314 'number':31,101,159,287,294,304,312,318,323,342,350,352,370 'numer':129,191 'option':587 'organ':256 'outdat':574 'output':265,477 'overwhelm':728 'page':26,180,374,395,412,669,682,707 'paraphras':380,490,528 'parenthet':154,291 'path':484 'path/to/post.md':612 'pattern':277 'paywal':648,666 'pdf':691,697,701 'per':724 'percentag':32,102,317 'phrase':123,315 'pipelin':62 'post':10,59,74,481,733 'prefer':535,542 'present':140,149 'prioriti':286 'process':214,718 'prose':627 'provid':425 'publish':631 'pure':60 'queri':241 'rate':220,716 'rate-limit':219 'read':71,75 'recommend':273,545 'refer':615 'reliabl':699 'remaind':747 'render':672 'replac':564 'report':264,345,480,607 'research':337 'result':268 'retriev':636 'return':186,683,711 'reveal':346 'roi':522 'round':351,388 'run':245,725 'say':438,530 'scan':91 'score':42,209,212,363,364,429,441,454,468,475,502,561,599,658 'search':184,240 'section':82,518 'see':210,638 'sentenc':121 'sequenti':216 'server':730 'show':336,348 'signal':330 'similar':381 'site':223 'skill':577 'skill-blog-factcheck' 'skills/blog-flow/references/flow-framework.md':639 'skip':359,749 'sourc':14,34,55,107,138,179,222,249,289,298,303,311,394,423,437,450,500,529,551,565,570,692,729 'source-agricidaniel' 'specif':190,255,361,403 'standalon':316,608 'stat':463 'statist':5,29,52,89,126,271,308,404,543 'status':235,365,503,690 'step':69,86,164,224,260,591 'structur':282 'studi':335 'subpag':467 'suggest':238,257,340,713 'summari':270 'surround':199 'survey':343 'tabl':269 'target':77 'text':94,118,698 'timefram':390 'titl':482,633 'topic':204,400 'topic-agent-skills' 'topic-ai-citations' 'topic-ai-content' 'topic-ai-marketing' 'topic-ai-marketing-hub' 'topic-blog' 'topic-blog-writing' 'topic-claude-code' 'topic-claude-code-skill' 'topic-claude-plugin' 'topic-claude-skill' 'topic-content-creation' 'total':487 'tri':540 'tripl':623 'uncit':227,307 'unless':360 'unreach':473 'unverifi':237,421,497,539 'url':15,38,145,147,175,233,424,474,501,552,634,702,710,723,739 'usag':609 'user':243,358 'valu':127,130,192,196 'verif':211,263,362,479,590,705 'verifi':4,51,166,368,488,513,740 'via':39,181,678 'video':536,541 'visibl':407 'wall':656 'weak':329,393,492,556,660 'web.archive.org':715 'webfetch':40,182,650,679,693 'without':231,327 'word':387 'workflow':68 'x':319 'year':290,624","prices":[{"id":"5f0a5d60-806c-42ab-9f76-862248add723","listingId":"047c8239-9e91-45a5-af7b-53b21ad1329c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AgriciDaniel","category":"claude-blog","install_from":"skills.sh"},"createdAt":"2026-05-18T12:54:52.708Z"}],"sources":[{"listingId":"047c8239-9e91-45a5-af7b-53b21ad1329c","source":"github","sourceId":"AgriciDaniel/claude-blog/blog-factcheck","sourceUrl":"https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-factcheck","isPrimary":false,"firstSeenAt":"2026-05-18T12:54:52.708Z","lastSeenAt":"2026-05-18T18:53:29.855Z"}],"details":{"listingId":"047c8239-9e91-45a5-af7b-53b21ad1329c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AgriciDaniel","slug":"blog-factcheck","github":{"repo":"AgriciDaniel/claude-blog","stars":753,"topics":["agent-skills","ai","ai-citations","ai-content","ai-marketing","ai-marketing-hub","blog","blog-writing","claude-code","claude-code-skill","claude-plugin","claude-skill","content-creation","content-optimization","content-strategy","eeat","geo","multilingual","open-source","seo"],"license":"mit","html_url":"https://github.com/AgriciDaniel/claude-blog","pushed_at":"2026-05-15T04:45:18Z","description":"Claude Code blog skill suite: 30 sub-skills, 5 agents, 5-gate v1.9.0 Blog Delivery Contract, dual-optimized for Google rankings and AI citations. Active development at AI-Marketing-Hub/claude-blog (AI Marketing Hub Pro community); public releases ship here.","skill_md_sha":"1e3381a13ce3acfdb65cdafd234dbfab569f8bf4","skill_md_path":"skills/blog-factcheck/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-factcheck"},"layout":"multi","source":"github","category":"claude-blog","frontmatter":{"name":"blog-factcheck","license":"MIT","description":"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\"."},"skills_sh_url":"https://skills.sh/AgriciDaniel/claude-blog/blog-factcheck"},"updatedAt":"2026-05-18T18:53:29.855Z"}}