The Mine Works
OpenCitations API: Build Citation Graphs from 1.6 Billion Open Citation Links
← All posts
tutorial June 23, 2026 · 3 min read

OpenCitations API: Build Citation Graphs from 1.6 Billion Open Citation Links

Pull all citing papers and cited references for any DOI from OpenCitations' 1.6B citation index. Build citation networks, map research influence, and run bibliometric analysis without a subscription.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

Web of Science charges thousands per seat per year to access citation data. OpenCitations publishes the same citation links as open data under CC0. Our OpenCitations Scraper wraps their API into a clean interface: give it a DOI, get back every paper that cites it and every reference it cites.

What is OpenCitations

OpenCitations is a scholarly infrastructure project that collects and publishes open bibliographic and citation data. Their COCI dataset covers over 1.6 billion citation links extracted from Crossref, PubMed Central, and other sources. Every link is freely available under CC0 with no access fees.

What you get per citation

  • citing_doi — DOI of the paper that cites your target
  • cited_doi — DOI of the paper being cited
  • creation — date the citation link was recorded
  • timespan — time between publication dates of the two papers
  • journal_sc — whether both papers are in the same journal
  • author_sc — whether both papers share an author

Python example

import requests, time

run = requests.post(
    "https://api.apify.com/v2/acts/themineworks~opencitations-citation-graph/runs",
    headers={"Authorization": f"Bearer {APIFY_TOKEN}"},
    json={
        "doi": "10.1038/s41586-021-03819-2",
        "direction": "both",
        "maxResults": 500
    }
)

run_id = run.json()["data"]["id"]

while True:
    status = requests.get(
        f"https://api.apify.com/v2/actor-runs/{run_id}",
        headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
    ).json()["data"]["status"]
    if status in ("SUCCEEDED", "FAILED"):
        break
    time.sleep(5)

citations = requests.get(
    f"https://api.apify.com/v2/actor-runs/{run_id}/dataset/items",
    headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
).json()

citing = [c for c in citations if c["cited_doi"] == "10.1038/s41586-021-03819-2"]
print(f"Papers citing this DOI: {len(citing)}")

Build a citation network in NetworkX

import networkx as nx

G = nx.DiGraph()
for c in citations:
    G.add_edge(c["citing_doi"], c["cited_doi"])

# Papers with the most in-degree (most cited within this network)
top_cited = sorted(G.in_degree(), key=lambda x: x[1], reverse=True)[:10]
for doi, count in top_cited:
    print(f"{count} citations: {doi}")

# PageRank influence score
scores = nx.pagerank(G)
top_influential = sorted(scores.items(), key=lambda x: x[1], reverse=True)[:10]

Combine with Crossref for full metadata

OpenCitations returns DOIs only. Pair with the Crossref Scholarly Metadata scraper to resolve each DOI to title, authors, journal, and publication date:

# After collecting citation DOIs, enrich with Crossref
all_dois = list({c["citing_doi"] for c in citations} | {c["cited_doi"] for c in citations})

crossref_run = requests.post(
    "https://api.apify.com/v2/acts/themineworks~crossref-scholarly-metadata/runs",
    headers={"Authorization": f"Bearer {APIFY_TOKEN}"},
    json={"dois": all_dois[:200]}
)

Parameters

ParameterDefaultNotes
doirequiredTarget DOI to look up
direction"both""citing" (who cites this), "cited" (what it references), or "both"
maxResults500Maximum citation links to return

Use cases

Systematic literature review. Start from a landmark paper in your field and retrieve all papers that cite it. Use those papers’ DOIs to chain further lookups and map the full research lineage.

Research impact tracking. Monitor how many papers cite your own published work over time. Schedule the actor weekly and track citation velocity.

Competitive intelligence for research labs. Identify which institutions are building on your competitors’ foundational patents or papers by analysing citing-paper affiliations from Crossref metadata.

Grant application support. Build a citation map for your target research area to demonstrate the depth of the knowledge base and identify gaps your proposed work would address.

LLM training data. Combine citation graph traversal with full-text retrieval from PubMed Central or arXiv to build domain-specific document graphs for RAG pipelines.

How it differs from Semantic Scholar and Scimago

Semantic Scholar and Scimago restrict bulk access behind registration or paid tiers. OpenCitations is CC0. Every citation link returned by this actor is legally free to download, store, and republish. There are no rate limits that require a paid account.

Pricing

$0.002 per citation link. Runs against DOIs with no citation data return zero items and are not charged.

Available on Apify.

Related Actor

Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.