Crossref Works Scraper icon

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.

FieldTypeRequiredWhat 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

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0020Per 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 abstract field 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?
No. Crossref's works API is free and keyless. The Actor sends a polite, identifying User-Agent so runs stay inside Crossref's shared rate limit.
How deep can I page?
Crossref's cursor paging has no ~10 000-record wall the way offset paging does — the only limit is the <b>Maximum works</b> you set.
Can I filter by funder name instead of a Funder DOI?
Yes — type a funder's common name (e.g. "Wellcome Trust") and the Actor keeps only works whose funder list contains a case-insensitive match. Pass the exact Funder Registry DOI (e.g. <code>10.13039/100004440</code>) for an exact server-side filter instead.

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

Teams that run this also run