Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
jkitchin avatar

Citation Verifier

  • 76 installs
  • 32 repo stars
  • Updated June 22, 2026
  • jkitchin/skillz

Extract and verify DOIs, URLs, arXiv, PubMed, and ISBN citations in a document to detect hallucinated or broken references.

About

A skill that extracts citation identifiers from Markdown, LaTeX, org-mode, and text and validates each via API lookups and web fetches. A developer uses it to audit AI-generated or scientific documents for fake or broken citations.

  • Extracts DOIs, URLs, arXiv, PubMed, and ISBN identifiers
  • Validates each via API lookup and web fetch with a status report

Citation Verifier by the numbers

  • 76 all-time installs (skills.sh)
  • Ranked #707 of 1,879 Documentation skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/jkitchin/skillz --skill citation-verifier

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs76
repo stars32
Last updatedJune 22, 2026
Repositoryjkitchin/skillz

What it does

Extract and verify DOIs, URLs, arXiv, PubMed, and ISBN citations in a document to detect hallucinated or broken references.

Files

SKILL.mdMarkdownGitHub ↗

Citation Verifier

Detect and verify citations in scientific documents to identify hallucinated, broken, or invalid references.

Purpose

AI-generated content sometimes includes plausible-looking but fake citations. This skill systematically extracts all citation identifiers from a document and verifies each one against authoritative sources, producing a detailed report with verification status and suggestions for fixing invalid citations.

When to Use

This skill should be invoked when:

  • User asks to "verify citations" or "check references" in a document
  • User suspects hallucinated citations in AI-generated content
  • User wants to validate DOIs, URLs, or other identifiers in a paper
  • User asks to audit a document for broken links or fake references
  • User mentions "citation verification", "reference checking", or "DOI validation"

Supported Document Formats

1. Markdown (.md): Inline links [text](url), reference links [text][ref], bare URLs, DOIs 2. LaTeX/BibTeX (.tex, .bib): \cite{}, @article{}, DOI fields, URL fields 3. Org-mode (.org): [[url][text]] links, #+BIBLIOGRAPHY, cite links 4. Plain text (.txt): Bare URLs, DOIs, arXiv IDs, author-year patterns

Citation Identifiers Detected

DOIs (Digital Object Identifiers)

  • Pattern: 10.\d{4,}/[^\s]+ or doi.org/10.\d{4,}/[^\s]+
  • Example: 10.1038/nature12373, https://doi.org/10.1126/science.abc1234
  • Verification: CrossRef API at https://api.crossref.org/works/{doi}

URLs to Papers

  • Patterns: Links to known publishers and repositories
  • Domains: nature.com, science.org, sciencedirect.com, springer.com, wiley.com, acs.org, rsc.org, pnas.org, cell.com, plos.org, mdpi.com, frontiersin.org, academic.oup.com, tandfonline.com
  • Verification: HTTP HEAD/GET request, check for 200 status and paper metadata

arXiv IDs

  • Pattern: arXiv:\d{4}\.\d{4,5}(v\d+)? or arxiv.org/abs/\d{4}\.\d{4,5}
  • Example: arXiv:2301.07041, https://arxiv.org/abs/2301.07041v2
  • Verification: arXiv API or direct URL check

PubMed IDs (PMIDs)

  • Pattern: PMID:\s*\d+ or pubmed.ncbi.nlm.nih.gov/\d+
  • Example: PMID: 12345678
  • Verification: PubMed URL https://pubmed.ncbi.nlm.nih.gov/{pmid}/

ISBNs

  • Pattern: ISBN[:\s]*[\d-]{10,17} (ISBN-10 or ISBN-13)
  • Example: ISBN: 978-0-13-468599-1
  • Verification: Open Library API https://openlibrary.org/isbn/{isbn}.json

Author-Year Citations

  • Pattern: ([A-Z][a-z]+(?:\s+(?:et\s+al\.?|and|&)\s+[A-Z][a-z]+)?,?\s*\d{4})
  • Example: (Smith et al., 2023), (Johnson and Lee, 2022)
  • Verification: WebSearch to find matching paper (lower confidence)

Verification Procedure

Step 1: Read and Parse Document

Use the Read tool to load the document. Extract all citation identifiers using pattern matching:

DOI patterns:
- https?://(?:dx\.)?doi\.org/(10\.\d{4,}/[^\s\])"'>]+)
- doi:\s*(10\.\d{4,}/[^\s\])"'>]+)
- (10\.\d{4,9}/[-._;()/:A-Z0-9]+)  (bare DOI)

arXiv patterns:
- arXiv:(\d{4}\.\d{4,5}(?:v\d+)?)
- arxiv\.org/abs/(\d{4}\.\d{4,5}(?:v\d+)?)

PubMed patterns:
- PMID:\s*(\d+)
- pubmed\.ncbi\.nlm\.nih\.gov/(\d+)

URL patterns:
- https?://[^\s\])"'<>]+  (filter for academic domains)

ISBN patterns:
- ISBN[:\s-]*((?:\d[-\s]?){9}[\dXx]|(?:\d[-\s]?){13})

Step 2: Deduplicate and Categorize

Create a list of unique identifiers, categorized by type:

  • DOIs
  • arXiv IDs
  • PubMed IDs
  • ISBNs
  • URLs (academic)
  • Author-year citations (text-based)

Step 3: Verify Each Identifier

For each identifier, perform verification in order of reliability:

DOI Verification

1. Construct CrossRef API URL: https://api.crossref.org/works/{doi} 2. Use WebFetch to check the API 3. If successful, extract: title, authors, journal, year 4. If 404 or error: mark as INVALID

arXiv Verification

1. Construct URL: https://arxiv.org/abs/{arxiv_id} 2. Use WebFetch to verify page exists 3. Extract: title, authors, abstract snippet 4. If 404: mark as INVALID

PubMed Verification

1. Construct URL: https://pubmed.ncbi.nlm.nih.gov/{pmid}/ 2. Use WebFetch to verify 3. Extract: title, authors, journal 4. If 404: mark as INVALID

ISBN Verification

1. Construct URL: https://openlibrary.org/isbn/{isbn}.json 2. Use WebFetch to check 3. Extract: title, authors, publisher 4. If 404: mark as INVALID

URL Verification

1. Use WebFetch to access the URL 2. Check for HTTP 200 and academic content indicators 3. Look for: paper title, authors, DOI on page 4. If unreachable or non-academic: mark as SUSPICIOUS

Author-Year Verification (lowest confidence)

1. Use WebSearch with query: "{author}" "{year}" paper 2. Look for matching papers in results 3. If found: mark as LIKELY VALID with source 4. If not found: mark as UNVERIFIED

Step 4: Generate Report

Produce a structured verification report:

# Citation Verification Report

**Document:** [filename]
**Date:** [date]
**Total citations found:** [count]

## Summary
- Valid: [count]
- Invalid: [count]
- Suspicious: [count]
- Unverified: [count]

## Detailed Results

### Valid Citations
| ID | Type | Title | Source |
|----|------|-------|--------|
| 10.1038/xxx | DOI | Paper Title | CrossRef |

### Invalid Citations (HALLUCINATED)
| ID | Type | Error | Suggestion |
|----|------|-------|------------|
| 10.9999/fake | DOI | 404 Not Found | Remove or find correct DOI |

### Suspicious Citations
| ID | Type | Issue | Recommendation |
|----|------|-------|----------------|
| https://... | URL | Timeout | Verify manually |

### Unverified Citations
| Citation | Type | Notes |
|----------|------|-------|
| (Smith, 2023) | Author-year | No matching paper found via search |

Verification Status Definitions

  • VALID: Identifier resolves to a real paper with matching metadata
  • INVALID: Identifier does not exist or returns 404 (likely hallucinated)
  • SUSPICIOUS: Could not fully verify; may be rate-limited, paywalled, or temporarily unavailable
  • UNVERIFIED: Text-based citation that couldn't be confirmed (conservative approach)

Best Practices

1. Batch similar requests: Group DOI checks together to minimize API calls 2. Respect rate limits: Add delays between requests if hitting rate limits 3. Cross-reference: If a URL contains a DOI, verify the DOI directly 4. Context matters: Note where citations appear (methods vs. claims) 5. Report uncertainty: Always distinguish between "confirmed invalid" and "could not verify"

Output Suggestions for Invalid Citations

For each invalid citation, provide actionable suggestions:

  • Wrong DOI format: "DOI appears malformed. Check for typos or extra characters."
  • Non-existent DOI: "No paper found. This may be hallucinated. Search for the actual paper title."
  • Dead URL: "URL returns 404. Try searching for the paper title on Google Scholar."
  • Suspicious journal: "Publisher not recognized. Verify this is a legitimate source."
  • Author-year not found: "Could not verify. Add DOI or URL for confirmation."

Example Verification Session

User request: "Verify the citations in my-paper.md"

Expected behavior: 1. Read my-paper.md 2. Extract all DOIs, URLs, arXiv IDs, etc. 3. Report: "Found 15 citations: 8 DOIs, 5 URLs, 2 arXiv IDs" 4. Verify each identifier using appropriate API/fetch 5. Generate report showing:

  • 10 valid citations with metadata
  • 3 invalid citations (404 errors) marked as likely hallucinated
  • 2 suspicious citations (timeouts) requiring manual check

6. Provide suggestions for fixing invalid citations

Limitations

  • Rate limits: CrossRef and other APIs may rate-limit requests
  • Paywalled content: Cannot verify full content behind paywalls
  • New papers: Very recent papers may not be indexed yet
  • Author-year citations: Low confidence without additional identifiers
  • Non-English sources: Limited support for non-English citation formats
  • Private/institutional URLs: Cannot access authenticated content

Related Skills

  • literature-review: For conducting systematic literature searches
  • scientific-reviewer: For reviewing scientific document quality
  • scientific-writing: For writing with proper citations

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.