# Crossref Scraper (`anyxsolutions/crossref-scraper`) Actor

Search 180M+ scholarly papers, books and preprints registered with Crossref, or look up works by DOI. Get titles, journals, authors with ORCID iDs and affiliations, abstracts, citation counts, funders, licenses and full-text links as clean JSON. No API key, no proxy.

- **URL**: https://apify.com/anyxsolutions/crossref-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![banner](https://anyx.solutions/banners/crossref-scraper.png)

## Crossref Scraper

**Search 180 million scholarly works, or look papers up by DOI, and get clean metadata: authors, abstracts, citations, funders and full-text links.**

Crossref is the registry behind most DOIs: journal articles, conference papers, book chapters,
preprints, dissertations and datasets from more than 20,000 publishers. This Actor searches it
by keyword, author or journal, or looks works up by DOI, and returns one clean row per work:
title, journal, publisher, publication date, authors with ORCID iDs and affiliations, the
abstract as plain text and HTML, reference and citation counts, ISSNs, volume, issue and pages,
licenses, funders with grant numbers, and links to the full text. Filter by publication date,
work type or abstract availability, and sort by relevance, date or citations. There is no
login, no API key and no proxy to configure. Built for literature reviews, research
intelligence, bibliometrics, citation tracking and building datasets for AI and search.

### ⚡ Quick start

```json
{
  "startUrls": [
    {
      "url": "https://search.crossref.org/search/works?q=microplastics+in+drinking+water&from_ui=yes"
    }
  ],
  "maxItems": 5
}
```

Or search by keyword with filters:

```json
{
  "searchTerms": ["crispr off-target effects"],
  "dateFrom": "2023",
  "type": "journal-article",
  "hasAbstract": true,
  "sortBy": "is-referenced-by-count",
  "maxItems": 50
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                              |
| -------------------- | ------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | no       | —                            | Crossref search URLs (`search.crossref.org/search/works?q=…`) or DOI links (`https://doi.org/10.1145/3641289`).                                          |
| `searchTerms`        | array   | no       | —                            | Words to search titles, abstracts, authors and journals for, one search per entry.                                                                       |
| `author`             | string  | no       | —                            | Narrow every search to works by this author. On its own, it searches for the author's works.                                                             |
| `dois`               | array   | no       | —                            | DOIs to look up, such as `10.1145/3641289`. DOI links and the `doi:` prefix work too.                                                                    |
| `issns`              | array   | no       | —                            | Journal ISSNs whose works to list, such as `0028-0836` for Nature.                                                                                       |
| `dateFrom`           | string  | no       | —                            | Published from: only works published on or after this date (`2024`, `2024-03` or `2024-03-01`).                                                          |
| `dateTo`             | string  | no       | —                            | Published until: only works published on or before this date.                                                                                            |
| `type`               | string  | no       | —                            | Work type: `journal-article`, `proceedings-article`, `book-chapter`, `book`, `posted-content` (preprints), `dissertation`, `report`, `dataset` and more. |
| `hasAbstract`        | boolean | no       | `false`                      | Only works with an abstract.                                                                                                                             |
| `sortBy`             | string  | no       | `"relevance"`                | Sort by `relevance`, `published` (newest first) or `is-referenced-by-count` (most cited).                                                                |
| `maxItems`           | integer | no       | —                            | Maximum works per search term, start URL or journal. The input form starts at 5; leave it empty to get every match.                                      |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. Crossref's public data needs no proxy.                                                                                                   |

Give at least one of `startUrls`, `searchTerms`, `author`, `dois` or `issns`. The filters and the
sort order apply to every search and journal; DOI lookups always return the one work.

**Search URLs.** Search on [search.crossref.org](https://search.crossref.org/) and paste the address
of the results page. "Sort by year" and "Filter on this publication" carry over.

### 📤 Output

Each work is one dataset row. Fields Crossref has no value for are `null`, or an empty list.

#### Fields

| Field             | Type   | Description                                                                                                                    |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| `doi`             | string | The work's DOI.                                                                                                                |
| `url`             | string | The DOI link, which resolves to the publisher's page.                                                                          |
| `title`           | string | Title.                                                                                                                         |
| `subtitle`        | string | Subtitle, when set.                                                                                                            |
| `containerTitle`  | string | The journal, book or proceedings the work appears in.                                                                          |
| `publisher`       | string | Publisher.                                                                                                                     |
| `type`            | string | Work type, such as `journal-article`, `book-chapter` or `posted-content`.                                                      |
| `publishedDate`   | string | Publication date (ISO 8601: `2024-03-29`, or `2024-03` / `2024` when only that is known).                                      |
| `authors`         | array  | Authors in order: `given`, `family`, `name`, `orcid` (iD link) and `affiliations`.                                             |
| `abstractText`    | string | Abstract as plain text, one paragraph per line.                                                                                |
| `abstractHtml`    | string | Abstract as HTML, with italics, sub/superscripts, section headings and paragraphs.                                             |
| `referencesCount` | number | Number of references the work cites.                                                                                           |
| `citedByCount`    | number | Number of Crossref works that cite this one.                                                                                   |
| `subjects`        | array  | Subject areas, when the publisher sets them.                                                                                   |
| `issn`            | array  | ISSNs of the journal.                                                                                                          |
| `isbn`            | array  | ISBNs, for books and chapters.                                                                                                 |
| `volume`          | string | Volume.                                                                                                                        |
| `issue`           | string | Issue.                                                                                                                         |
| `page`            | string | Page range.                                                                                                                    |
| `articleNumber`   | string | Article number, for journals that number articles instead of pages.                                                            |
| `language`        | string | Language code, when set.                                                                                                       |
| `licenseUrls`     | array  | License links, such as a Creative Commons license.                                                                             |
| `funders`         | array  | Funders: `name`, `doi` (Funder Registry ID) and `awards` (grant numbers).                                                      |
| `fullTextLinks`   | array  | Full-text links the publisher lists: `url`, `contentType` and `intendedApplication` (`text-mining`, `similarity-checking`, …). |
| `publisherUrl`    | string | The page the DOI resolves to.                                                                                                  |
| `sourceUrl`       | string | The search, journal or DOI link this work was found through.                                                                   |

<details><summary>Example output</summary>

```json
{
  "doi": "10.1145/3641289",
  "url": "https://doi.org/10.1145/3641289",
  "title": "A Survey on Evaluation of Large Language Models",
  "subtitle": null,
  "containerTitle": "ACM Transactions on Intelligent Systems and Technology",
  "publisher": "Association for Computing Machinery (ACM)",
  "type": "journal-article",
  "publishedDate": "2024-03-29",
  "authors": [
    {
      "given": "Yupeng",
      "family": "Chang",
      "name": "Yupeng Chang",
      "orcid": "https://orcid.org/0000-0001-7178-6088",
      "affiliations": [
        "School of Artificial Intelligence, Jilin University, Changchun, China"
      ]
    },
    {
      "given": "Xu",
      "family": "Wang",
      "name": "Xu Wang",
      "orcid": "https://orcid.org/0009-0001-5904-5313",
      "affiliations": [
        "School of Artificial Intelligence, Jilin University, Changchun, China"
      ]
    }
  ],
  "abstractText": "Large language models (LLMs) are gaining increasing popularity in both academia and industry, owing to their unprecedented performance in various applications. …",
  "abstractHtml": "<p>Large language models (LLMs) are gaining increasing popularity in both academia and industry, … focusing on three key dimensions: <i>what to evaluate</i>, <i>where to evaluate</i>, and <i>how to evaluate</i>. …</p>",
  "referencesCount": 267,
  "citedByCount": 2920,
  "subjects": [],
  "issn": ["2157-6904", "2157-6912"],
  "isbn": [],
  "volume": "15",
  "issue": "3",
  "page": "1-45",
  "articleNumber": null,
  "language": "en",
  "licenseUrls": [
    "https://www.acm.org/publications/policies/copyright_policy#Background"
  ],
  "funders": [{ "name": "NSF", "doi": null, "awards": ["III-2106758"] }],
  "fullTextLinks": [
    {
      "url": "https://dl.acm.org/doi/10.1145/3641289",
      "contentType": "unspecified",
      "intendedApplication": "text-mining"
    },
    {
      "url": "https://dl.acm.org/doi/pdf/10.1145/3641289",
      "contentType": "unspecified",
      "intendedApplication": "similarity-checking"
    }
  ],
  "publisherUrl": "https://dl.acm.org/doi/10.1145/3641289",
  "sourceUrl": "https://doi.org/10.1145/3641289"
}
```

</details>

### 💡 Use cases

- **Literature reviews** — pull every paper on a topic, with abstracts, into a spreadsheet or reference manager.
- **Research intelligence** — follow a field, a journal or a competitor lab's output, newest first.
- **Bibliometrics** — rank works by citations and break output down by journal, publisher, funder or year.
- **Funding analysis** — see which funders and grants stand behind the work in a field.
- **Metadata enrichment** — turn a list of DOIs into complete, clean citation records.
- **AI and search datasets** — collect titles, abstracts and open-license full-text links at scale.

### ❓ FAQ

- **Do I need an API key or a Crossref account?** No. Crossref's metadata is public, and the Actor runs without a proxy.
- **Why is the abstract empty for some works?** Abstracts are deposited by publishers, and many don't. Turn on "Only works with an abstract" to skip those works.
- **What does `citedByCount` count?** Citations from other works registered with Crossref. It is usually lower than Google Scholar's count, which also counts web pages, theses and preprint servers.
- **A DOI returned nothing.** Crossref holds most journal and book DOIs, but not all: arXiv and Zenodo DOIs, for example, are registered with DataCite. The log says when a DOI is not found.
- **Can I get more than 10,000 results?** Yes, when sorting by relevance or by citations. Sorting newest first stops at 10,000 results per search; narrow it with the date filters, or run several date ranges.
- **Can I run many searches at once?** Yes. Add several search terms, URLs or ISSNs; `maxItems` applies to each one separately.

### 🔗 More scrapers by Anyx

- [Google Search Scraper](https://apify.com/anyxsolutions/google-search-scraper)
- [Bing Search Scraper](https://apify.com/anyxsolutions/bing-search-scraper)
- [Web Content Scraper](https://apify.com/anyxsolutions/web-content-scraper)
- [Substack Scraper](https://apify.com/anyxsolutions/substack-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [crossref.org](https://www.crossref.org/)

# Actor input Schema

## `startUrls` (type: `array`):

Crossref search URLs, such as https://search.crossref.org/search/works?q=large+language+models, or DOI links such as https://doi.org/10.1145/3641289.

## `searchTerms` (type: `array`):

Words to search titles, abstracts, authors and journals for, one search per entry, for example "large language models" or "crispr off-target effects".

## `author` (type: `string`):

Narrow every search to works by this author, for example "Jennifer Doudna". On its own, it searches for the author's works.

## `dois` (type: `array`):

DOIs to look up, one per entry, for example 10.1145/3641289. DOI links and the doi: prefix work too.

## `issns` (type: `array`):

Journal ISSNs whose works to list, one per entry, for example 0028-0836 for Nature. Combine with the filters and sorting below to follow a journal.

## `dateFrom` (type: `string`):

Only works published on or after this date, as a year, month or day, for example 2024 or 2024-03-01.

## `dateTo` (type: `string`):

Only works published on or before this date, as a year, month or day, for example 2025-12-31.

## `type` (type: `string`):

Only works of this type, such as journal articles or book chapters. Leave empty for every type.

## `hasAbstract` (type: `boolean`):

Skip works whose publisher did not deposit an abstract with Crossref.

## `sortBy` (type: `string`):

Order of search results. Newest first stops at 10,000 results per search; relevance and most cited have no limit.

## `maxItems` (type: `integer`):

Maximum number of works to return per search term, start URL or journal. Leave empty to get every match.

## `proxyConfiguration` (type: `object`):

Proxy settings. Crossref's public data needs no proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://search.crossref.org/search/works?q=microplastics+in+drinking+water&from_ui=yes"
    }
  ],
  "hasAbstract": false,
  "sortBy": "relevance",
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://search.crossref.org/search/works?q=microplastics+in+drinking+water&from_ui=yes"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/crossref-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://search.crossref.org/search/works?q=microplastics+in+drinking+water&from_ui=yes" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/crossref-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://search.crossref.org/search/works?q=microplastics+in+drinking+water&from_ui=yes"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/crossref-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyxsolutions/crossref-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/nVbMk4hZ3oC4RX6Ir/builds/rPs9EK2BxeXhd7XB3/openapi.json
