Developer tools · Automation
Crossref Works Scraper — DOIs, Authors & Citations
Search Crossref's 150M+ DOI registry by query and metadata filters, and export flattened rows — DOI, title, publisher, journal, full author list with ORCID and affiliation, citation counts, funder/award data, license, ISSN, and abstract — as clean JSON, CSV, or Excel.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
Crossref is the DOI registration agency behind most scholarly publishing — 150M+ journal articles, book chapters, datasets, preprints, and proceedings, each with publisher-submitted metadata exposed through one keyless JSON API. The catch is cursor-only deep paging plus metadata that nests authors, funders, and licenses several levels down. This Actor walks Crossref's cursor pages for you and flattens every work into one row — authors keep their ORCID and affiliation, funders keep their award numbers — so a scholarly-output tracker or funder-compliance report lands straight in a spreadsheet.
What we handle for you
- 🛡️ Browser fingerprint rotation — the target sees a real browser TLS handshake, not a script.
- 🌐 Proxy rotation — fresh exit on every block through Apify Proxy.
- 🔁 Retries with backoff — 408 / 429 / 5xx retried up to five times, Retry-After honoured.
- 🧊 Clean, typed rows — schema-validated output with ISO-8601 timestamps.
- 💰 Pay per result — no data, no result charge.
Use cases
- Track a competitor lab's or institution's new publications as they're registered with Crossref.
- Pull citation counts for a grant or tenure report without hand-rolling the API.
- Check funder compliance — confirm published works credit the right funder and award number.
- Build a publisher- or journal-level dataset of works, ISSNs, and licenses for a research-ops pipeline.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
query | string | no | Free-text bibliographic search (title, author, journal, year all matched together). Leave empty if you are filtering only. |
fromPublicationDate | string | no | Only works published on or after this date, as YYYY-MM-DD. Leave empty for no floor. |
untilPublicationDate | string | no | Only works published on or before this date, as YYYY-MM-DD. Leave empty for no ceiling. |
workType | string | no | Restrict to one Crossref work type. Leave empty to match every type. |
publisherName | string | no | Substring match against the publisher name, e.g. Elsevier. Leave empty for any publisher. |
hasOrcid | boolean | no | Only return works where at least one author has an ORCID on file. |
hasAbstract | boolean | no | Only return works that carry an abstract. |
hasFullText | boolean | no | Only return works Crossref has a full-text link for. |
funderName | string | no | A funder's common name (e.g. Wellcome Trust) matched case-insensitively against each work's funder list, or an exact Funder Registry DOI (e.g. 10.13039/100004440) sent straight to Crossref as a server-side filter.… |
sortField | string | no | Field Crossref sorts results by. |
sortOrder | string | no | Ascending or descending. |
maxResults | integer | no | Stop after this many works. Each work is one billed result row. |
{
"query": "climate change adaptation",
"workType": "journal-article",
"maxResults": 3,
"proxyConfiguration": {
"useApifyProxy": false
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
doititletypepublishercontainer_titleauthorsauthor_countpublished_datevolumeissuepageissnlicense_urllicense_countfundersis_referenced_by_count
{
"doi": "10.1371/journal.pone.0212345",
"title": "Example study on citation graphs",
"type": "journal-article",
"publisher": "Public Library of Science (PLoS)",
"container_title": "PLOS ONE",
"authors": [
{
"name": "Jane Q. Researcher",
"orcid": "0000-0002-1234-5678",
"affiliation": "University of Somewhere"
}
],
"author_count": 1,
"published_date": "2023-04-12",
"volume": "18",
"issue": "4",
"page": "e0212345",
"issn": [
"1932-6203"
],
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"license_count": 1,
"funders": [
{
"name": "Wellcome Trust",
"doi": "10.13039/100004440",
"award_numbers": [
"WT12345"
]
}
],
"is_referenced_by_count": 42,
"abstract": "<jats:p>We present an analysis of...</jats:p>",
"url": "https://doi.org/10.1371/journal.pone.0212345"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0020 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Metadata only — it does not download PDFs or full text.
- The
abstractfield is passed through verbatim, JATS XML tags included; the Actor does not strip or reformat it. - Free-text funder-name matching is a client-side substring match and can return false positives (e.g. "Gates" matches multiple foundations) — pass the exact Funder DOI for precision.
FAQ
Do I need an API key?
How deep can I page?
Can I filter by funder name instead of a Funder DOI?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors