Citation Count & DOI Citations Scraper — OpenCitations avatar

Citation Count & DOI Citations Scraper — OpenCitations

Pricing

from $2.00 / 1,000 opencitations results

Go to Apify Store
Citation Count & DOI Citations Scraper — OpenCitations

Citation Count & DOI Citations Scraper — OpenCitations

Get citation counts, citing papers, references and metadata by DOI, PMID or OMID from the OpenCitations open index, for bibliometrics. $4 per 1,000.

Pricing

from $2.00 / 1,000 opencitations results

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Categories

Share

Citation Count & DOI Citations Scraper returns citation counts, the papers that cite a work, the works it references, and bibliographic metadata from the OpenCitations open index, looked up by DOI, PMID, or OpenCitations Meta ID (OMID). It is built for researchers, librarians, bibliometrics teams, and knowledge-graph builders, and costs $4.00 per 1,000 records on the FREE tier plus a $0.005 start fee.

How do I get the citation count for a DOI?

Set operation to counts and list your DOIs; each identifier returns one record with citationCount (incoming citations) and referenceCount (outgoing references).

{
"operation": "counts",
"identifiers": ["10.7717/peerj-cs.421", "10.1177/09610006211036734"]
}

Counts reflect the OpenCitations index at the time of the run, so they are usually lower than Google Scholar, which indexes more non-journal sources. Use the same source for every work you compare.

Which papers cite my paper?

Set operation to citations (the default) to get one record per citing work, with the citing work's DOI and other identifiers, the citation date, the time span between the two works, and journal and author self-citation flags. Use references for the works a paper cites, or both for both directions in one run.

What citation data does it return?

Every record has the same shape, so exports and agent workflows stay predictable. Fields that do not apply to the chosen operation are null or an empty list.

FieldWhat it contains
recordTypecitation, metadata, or counts
operationcitations, references, metadata, or counts
queryIdentifierYour identifier, normalized (for example doi:10.7717/peerj-cs.421)
ociOpen Citation Identifier of a citation link
citingIdentifiers, citedIdentifiersAll IDs of each work (DOI, PMID, OMID, OpenAlex)
citingDoi, citedDoiDOI of the citing and cited work when known
creationDate, timespanCiting work's date and the gap between publications (P1Y)
journalSelfCitation, authorSelfCitationSelf-citation flags when known
title, authors, editors, publicationDateBibliographic metadata (metadata mode)
venue, volume, issue, pages, workType, publisherPublication details (metadata mode)
workIdentifiersAll IDs attached to a metadata record
citationCount, referenceCountTotals (counts mode)
sourceUrl, scrapedAtExact OpenCitations endpoint used and retrieval time

When should I use it, and when not?

Use it when you already know the DOIs, PMIDs, or OMIDs and want:

  • the citation count and reference count for a list of papers;
  • citing and cited works as edges for a citation network or knowledge graph;
  • clean bibliographic metadata for known works;
  • open, source-linked citation data for an AI research agent.

Do not use it when you need:

How do I build a citation network from a list of DOIs?

Run both on your seed DOIs; every row is one edge from citingDoi to citedDoi, labelled with its direction in operation.

{
"operation": "both",
"identifiers": ["10.7717/peerj-cs.421", "pmid:33817056", "omid:br/06101801781"],
"maxResults": 250
}

Identifiers can be bare DOIs, doi: prefixed values, https://doi.org/... URLs, PMIDs (pmid:33817056 or just the number), or OMIDs. Up to 50 unique identifiers per run; duplicates are removed first. maxResults (1–10,000, default 1,000) caps records for the whole run. requestTimeoutSeconds (5–60, default 30) bounds each request.

How do I call it from code?

Use the official Apify API clients with the same JSON input as in Console.

JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/open-citations-scraper').call({
operation: 'counts',
identifiers: ['10.7717/peerj-cs.421'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].citationCount, items[0].referenceCount);

Python (apify-client 3.x)

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/open-citations-scraper").call(
run_input={"operation": "citations", "identifiers": ["10.7717/peerj-cs.421"]}
)
for edge in client.dataset(run.default_dataset_id).iterate_items():
print(edge["citingDoi"], "->", edge["citedDoi"], edge["creationDate"])

Use it from an AI assistant

The Actor works from Claude, ChatGPT, Cursor, or any MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/open-citations-scraper as a server, then ask, for example: "How many times has DOI 10.7717/peerj-cs.421 been cited, and which papers cite it?"

What does the output look like?

Citation records from the default run on 2026-10-26 (empty metadata fields omitted for brevity):

[
{
"recordType": "citation",
"operation": "citations",
"queryIdentifier": "doi:10.7717/peerj-cs.421",
"oci": "06103952512-06101801781",
"citingIdentifiers": ["omid:br/06103952512", "doi:10.1177/09610006211036734", "openalex:W3189909973"],
"citedIdentifiers": ["omid:br/06101801781", "doi:10.7717/peerj-cs.421", "openalex:W3134956838", "pmid:33817056"],
"citingDoi": "10.1177/09610006211036734",
"citedDoi": "10.7717/peerj-cs.421",
"creationDate": "2021-08-04",
"timespan": "P0Y4M25D",
"journalSelfCitation": false,
"authorSelfCitation": false,
"citationCount": null,
"referenceCount": null,
"sourceUrl": "https://api.opencitations.net/index/v2/citations/doi:10.7717/peerj-cs.421",
"scrapedAt": "2026-10-26T06:57:57.682Z"
},
{
"recordType": "citation",
"operation": "citations",
"queryIdentifier": "doi:10.7717/peerj-cs.421",
"oci": "06404435594-06101801781",
"citingDoi": "10.1063/5.0110347",
"citedDoi": "10.7717/peerj-cs.421",
"creationDate": "2023",
"timespan": "P1Y",
"journalSelfCitation": false,
"authorSelfCitation": false,
"sourceUrl": "https://api.opencitations.net/index/v2/citations/doi:10.7717/peerj-cs.421"
}
]

Every run also writes a SUMMARY record with the outcome (DATA, EMPTY, BLOCKED, FAILED, or REJECTED), request counts, records returned, and warnings.

How much does citation data cost?

You pay per record saved to the dataset, plus one start fee. Platform usage is included in these prices.

EventFREEBRONZESILVERGOLD, PLATINUM, DIAMOND
OpenCitations result (per record)$0.004$0.004$0.004$0.002
Actor start (per started GB of allocated memory)$0.005$0.005$0.005$0.005

The default memory is 256 MB, so a run normally pays one start event. Worked totals on the FREE tier:

  • Default run (one DOI, 3 citing works on 2026-10-26): $0.005 + 3 × $0.004 = $0.017.
  • Counts for 50 DOIs (50 records): $0.005 + 50 × $0.004 = $0.205 (GOLD: $0.105).

Limits and reliability

  • The Actor calls OpenCitations' public REST APIs and spaces requests to stay under the documented fair-use limit of 180 requests per minute. It retries transient failures and honors Retry-After.
  • Counts mode uses two requests per identifier; other modes use one.
  • Invalid identifiers are rejected before any request, with a correction example and no result charges.
  • A well-formed identifier that OpenCitations does not know returns no rows and status: EMPTY; no placeholder records are created.
  • If every request fails, the run reports BLOCKED in SUMMARY and is marked failed, with no result charges. When only some requests fail, records from the other identifiers are kept.
  • The status message shows the maximum cost at the live prices for your tier. With a maximum cost per run set, the Actor stops before saving a record the limit cannot pay for.
  • The default run (one DOI) finished in about 3 seconds on 2026-10-26.

FAQ

How do I find the number of citations for a paper?

Run the Actor with operation: "counts" and the paper's DOI or PMID. The citationCount field is the number of citing works in OpenCitations.

Why is the citation count lower than Google Scholar?

OpenCitations counts only citations in its open index, built from the open reference data its sources contribute. Google Scholar also counts theses, preprints, and web documents, so its numbers are usually higher.

Can I search by title or keyword?

No. The Actor needs a DOI, PMID, or OMID. Find identifiers first with Semantic Scholar Scraper, then pass them here.

How many papers can I look up in one run?

Up to 50 identifiers and up to 10,000 records per run. For larger jobs, split the list across runs or use OpenCitations' bulk data dumps.

Is OpenCitations data open?

OpenCitations states that its data is released under the CC0 public-domain waiver. Cite OpenCitations in research outputs where appropriate.

Is there a citation API I can call directly from code?

Yes. Call the Actor through the Apify API with the JavaScript or Python client above; the input and output are plain JSON.

The Actor reads OpenCitations' public APIs and records the exact endpoint behind every record. It does not access paywalled full text, publisher accounts, or personal data. Respect OpenCitations' fair-use limits and attribution guidance.

Last verified: 2026-10-27