# Crossref Scholarly Scraper — DOIs, Citations & Journals (`logiover/crossref-scraper`) Actor

Scrape Crossref by keyword, ISSN, or DOI list. Extract title, authors, DOI, citations, journal, publisher, funding, license for research, bibliometrics, and academic analysis. No API key required.

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

## Pricing

from $1.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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Crossref Scholarly Scraper — DOIs, Citations & Journal Works API

Extract scholarly publication metadata from Crossref at scale — DOIs, citation counts, authors, journals, funders, and licenses — without any API key.

### What does Crossref Scholarly Scraper do?

Crossref Scholarly Scraper connects directly to the [Crossref REST API](https://api.crossref.org/), the world's largest DOI registry covering 150+ million scholarly works from 50,000+ publishers. The actor supports three modes: **works search** (full-text keyword + filter queries with cursor-based deep pagination beyond 10,000 results), **journal works** (all publications from a specific ISSN), and **DOI batch lookup** (resolve a list of DOIs to full metadata). Each request is routed through Crossref's polite pool via a mailto parameter for higher rate limits. The actor extracts 17 structured fields per work — including `is-referenced-by-count` for citation counts, funder names, license URLs, and subject classifications — then pushes clean rows to an Apify dataset for immediate export. One run can retrieve hundreds to thousands of records with no authentication required.

### Who is it for?

- **Academic researchers** who need bibliometric datasets for meta-analyses or systematic reviews
- **Research librarians** building citation databases or literature inventories for their institution
- **Data scientists** training NLP/ML models on scholarly text and metadata
- **Journalists and analysts** investigating research funding, publisher dominance, or topic trends
- **Tech teams** integrating DOI resolution or citation lookup into their SaaS or knowledge management tools

### Use cases

- Download 1,000+ recent publications on "CRISPR gene editing" for a systematic literature review
- Pull all articles from a specific journal (by ISSN) to track citation growth over time
- Resolve a spreadsheet of 500 DOIs to full author/funder metadata for grant reporting
- Identify top funders and publishers in a research area using Crossref's filter API
- Build a citation graph by extracting `citationCount` and `referencesCount` across a topic

### Why use Crossref Scholarly Scraper?

- **No API key required** — Crossref is a public, open metadata infrastructure; no registration needed
- **17 structured fields** — DOI, title, authors, date, journal, publisher, type, citation count, reference count, subjects, URL, ISSN, volume, issue, page, license, funders
- **Deep pagination via cursor** — cursor-based pagination lets you retrieve far beyond the typical 10,000-item offset limit
- **Three flexible modes** — search by keyword/filter, pull a full journal, or resolve a DOI list
- **Polite pool support** — supply your mailto for Crossref's polite tier (higher throughput, no throttling)
- **Export to CSV/JSON/Excel** — all results available in Apify's dataset with one-click export

### What data can you extract?

Each scholarly work returns the following fields:

| Field | Type | Description |
|---|---|---|
| `doi` | string | Digital Object Identifier (e.g. `10.1038/s41586-023-06547-x`) |
| `title` | string | Full title of the work |
| `authors` | string | Semicolon-separated "Given Family" author names |
| `publishedDate` | string | Publication date parts joined (e.g. `2023-09-13`) |
| `containerTitle` | string | Journal or conference name |
| `publisher` | string | Publisher name (e.g. Springer Nature) |
| `type` | string | Work type: `journal-article`, `book-chapter`, `proceedings-article`, etc. |
| `citationCount` | string | How many other works cite this one (`is-referenced-by-count`) |
| `referencesCount` | string | Number of references in the work's bibliography |
| `subject` | string | Comma-separated subject classifications |
| `url` | string | Canonical DOI URL (`https://doi.org/{doi}`) |
| `issn` | string | Journal ISSN(s) |
| `volume` | string | Journal volume number |
| `issue` | string | Journal issue number |
| `page` | string | Page range (e.g. `1234-1241`) |
| `license` | string | License URL (e.g. Creative Commons URL) |
| `funders` | string | Semicolon-separated funder names |

**Example output record:**

```json
{
  "doi": "10.1038/s41586-023-06547-x",
  "title": "Highly accurate protein structure prediction with AlphaFold",
  "authors": "John Jumper; Richard Evans; Alexander Pritzel",
  "publishedDate": "2021-7-15",
  "containerTitle": "Nature",
  "publisher": "Springer Nature",
  "type": "journal-article",
  "citationCount": "23847",
  "referencesCount": "58",
  "subject": "Multidisciplinary",
  "url": "https://doi.org/10.1038/s41586-021-03819-2",
  "issn": "0028-0836, 1476-4687",
  "volume": "596",
  "issue": "7873",
  "page": "583-589",
  "license": "https://creativecommons.org/licenses/by/4.0",
  "funders": "Wellcome Trust; Google DeepMind"
}
````

### How to use

#### Option A — Search by keyword (works mode)

Search the entire Crossref index by keyword, with optional date/type filters.

**Steps:**

1. Set `mode` to `works`
2. Enter your `query` (e.g. "deep learning image classification")
3. Optionally add a `filter` (e.g. `from-pub-date:2022-01-01,type:journal-article`)
4. Set `maxResults` (e.g. 500)
5. Run the actor

**Input JSON:**

```json
{
  "mode": "works",
  "query": "deep learning",
  "filter": "from-pub-date:2023-01-01,type:journal-article",
  "maxResults": 300,
  "mailto": "you@example.com"
}
```

#### Option B — Fetch by journal ISSN (journalWorks mode)

Pull all works from a specific journal using its ISSN.

**Steps:**

1. Set `mode` to `journalWorks`
2. Enter the journal `issn` (e.g. `1476-4687` for Nature)
3. Optionally add a `filter` for date range
4. Set `maxResults`

**Input JSON:**

```json
{
  "mode": "journalWorks",
  "issn": "1476-4687",
  "filter": "from-pub-date:2023-01-01",
  "maxResults": 200,
  "mailto": "you@example.com"
}
```

#### Option C — Resolve a DOI list (workByDoi mode)

Resolve specific DOIs to full metadata. Useful when you have a list of DOIs from another source.

**Input JSON:**

```json
{
  "mode": "workByDoi",
  "dois": [
    "10.1038/s41586-021-03819-2",
    "10.1126/science.abm9891",
    "10.1016/j.cell.2022.11.001"
  ],
  "maxResults": 100,
  "mailto": "you@example.com"
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `works` | Scraping mode: `works`, `journalWorks`, or `workByDoi` |
| `query` | string | — | Keyword search for `works` mode |
| `filter` | string | — | Crossref filter (e.g. `from-pub-date:2023,type:journal-article`) |
| `issn` | string | — | Journal ISSN for `journalWorks` mode |
| `dois` | array | — | List of DOIs for `workByDoi` mode |
| `maxResults` | integer | `300` | Maximum records to return |
| `mailto` | string | `contact@logiover.com` | Email for Crossref polite pool (higher rate limits) |
| `proxy` | object | — | Apify proxy config (datacenter sufficient) |

**Full input example:**

```json
{
  "mode": "works",
  "query": "climate change adaptation",
  "filter": "from-pub-date:2020-01-01,has-full-text:true",
  "maxResults": 1000,
  "mailto": "researcher@university.edu",
  "proxy": { "useApifyProxy": true }
}
```

### Output example

```json
{
  "doi": "10.1016/j.neuron.2023.01.018",
  "title": "Cortical representations of abstract task structure during reinforcement learning",
  "authors": "Angela C. Nikou; Michael E. Frank",
  "publishedDate": "2023-3",
  "containerTitle": "Neuron",
  "publisher": "Elsevier BV",
  "type": "journal-article",
  "citationCount": "47",
  "referencesCount": "72",
  "subject": "Neuroscience",
  "url": "https://doi.org/10.1016/j.neuron.2023.01.018",
  "issn": "0896-6273",
  "volume": "111",
  "issue": "5",
  "page": "718-731.e8",
  "license": "https://creativecommons.org/licenses/by/4.0",
  "funders": "National Institutes of Health; Simons Foundation"
}
```

### Tips for best results

- **Use the polite pool**: always supply your `mailto` for Crossref's polite pool — it dramatically increases rate limits and reliability
- **Apply date filters**: `from-pub-date:2020-01-01` narrows results to recent publications; combine with `until-pub-date` for time windows
- **Filter by type**: add `type:journal-article` or `type:book-chapter` to the filter to focus on a specific publication type
- **Use specific queries**: "CRISPR therapeutic delivery 2023" returns more targeted results than just "CRISPR"
- **Combine filter flags**: Crossref supports multiple filters comma-separated, e.g. `from-pub-date:2022,has-orcid:true,has-full-text:true`
- **DOI mode for known records**: if you have DOIs from another dataset, `workByDoi` mode gives the most complete metadata per record
- **ISSN mode for journal audits**: use `journalWorks` with a date filter to track a journal's publication history
- **Check null fields**: not all Crossref records have every field — `license` and `funders` are only present in about 30–60% of records
- **Large runs**: for 5,000+ results, ensure your Apify memory is set to at least 1 GB; cursor pagination handles the depth automatically

### Integrations

- **Google Sheets**: use the Apify → Google Sheets integration to push results directly to a spreadsheet for collaboration
- **Slack**: configure a webhook to receive a notification when your scholarly scrape completes
- **Zapier / Make**: trigger downstream workflows — e.g. create Notion database entries for each paper, or email a summary CSV
- **Webhooks**: configure an Apify webhook to POST dataset results to your internal API or ETL pipeline
- **Schedule**: run on a weekly cron to monitor new publications on your research topic automatically

### API usage

**cURL:**

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~crossref-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"works","query":"deep learning","maxResults":200}'
```

**Node.js:**

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover~crossref-scraper').call({
  mode: 'works',
  query: 'machine learning drug discovery',
  maxResults: 500,
  mailto: 'you@example.com',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
run = client.actor('logiover~crossref-scraper').call(run_input={
    'mode': 'works',
    'query': 'CRISPR gene editing',
    'filter': 'from-pub-date:2022-01-01',
    'maxResults': 300,
    'mailto': 'you@example.com',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
```

### Use with AI agents (MCP)

Crossref Scholarly Scraper is available as an MCP tool for AI coding agents. Connect it to Claude, GPT-4, or any MCP-compatible agent and prompt: *"Fetch the 200 most-cited journal articles on 'transformer attention mechanism' published after 2021, then summarize the top funders and publishers."* The actor will run, return structured JSON, and your agent can proceed with analysis — no API key management required.

### FAQ

#### Does this require an API key or login?

No. Crossref's REST API is completely public and keyless. The `mailto` parameter is optional but recommended — it places you in Crossref's polite pool for higher rate limits.

#### How many results can I get in one run?

Virtually unlimited. Cursor-based pagination bypasses Crossref's 10,000-item offset limit. In practice, you can retrieve hundreds of thousands of records for broad queries.

#### What sources does Crossref cover?

Crossref covers 150+ million scholarly works from 50,000+ publishers, including journals, conference proceedings, books, preprints, datasets, and reports. Coverage is strongest for journal articles published after 2000.

#### Why do some fields return null?

Not every publisher submits complete metadata. Fields like `license`, `funders`, `abstract`, `issn`, `volume`, and `page` are only present when publishers deposit them. Citation counts are available for most journal articles.

#### What does the filter parameter support?

Crossref supports many filter flags: `from-pub-date`, `until-pub-date`, `type` (journal-article, book-chapter, etc.), `has-full-text`, `has-orcid`, `has-references`, `has-funder`, `member` (publisher member ID), and more. See [Crossref filter docs](https://api.crossref.org/swagger-ui/index.html).

#### Can I get zero results?

Yes, if your query or ISSN doesn't match any Crossref records. Try broadening the query, removing filters, or checking the ISSN format (e.g. `1476-4687` not `14764687`).

#### How do I export results?

In the Apify dataset view, click **Export** and choose CSV, JSON, XLSX, XML, or RSS. You can also use the Apify API to fetch results programmatically.

#### How fast does it run?

Crossref's polite pool allows ~50 requests/second. Each page fetches 100 items, so 300 results takes roughly 3-6 seconds of API time. A run of 5,000 results typically completes in under 2 minutes.

#### Is there a cost?

You pay Apify platform compute costs (typically $0.005–$0.02 per 1,000 results). There is no per-use charge from Crossref.

#### How often is Crossref data updated?

Crossref updates in near real-time as publishers deposit metadata. New publications typically appear within hours to days of being registered.

#### Can I filter by open access only?

Yes — use `filter: "has-license:true"` to return only works with a license deposited (usually open access). Combine with `from-pub-date` for recent OA literature.

#### What's the difference between citationCount and referencesCount?

`citationCount` (Crossref field: `is-referenced-by-count`) = how many other Crossref works cite this paper. `referencesCount` = how many references are in this paper's bibliography.

### Is it legal?

Crossref is an open scholarly infrastructure funded by member publishers to make DOI metadata freely available. The Crossref REST API is publicly documented and intended for programmatic access. This actor accesses only the public, unauthenticated endpoints, respects rate limits via the polite pool, and does not bypass any access controls. Academic metadata scraped here contains factual bibliographic information with no personal data concerns. Always review [Crossref's terms of service](https://www.crossref.org/services/metadata-retrieval/metadata-plus/) and your institution's data use policies before using results in published research.

### Related scrapers

- [logiover/pubmed-scraper](https://apify.com/logiover) — PubMed/MEDLINE articles with abstracts and MeSH terms
- [logiover/arxiv-scraper](https://apify.com/logiover) — arXiv preprints by category, keyword, or author
- [logiover/github-activity-scraper](https://apify.com/logiover) — GitHub repository events, commits, and contributor activity
- [logiover/cve-advisory-scraper](https://apify.com/logiover) — CVE advisories and security vulnerability data from NVD

# Actor input Schema

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

Scraping mode: 'works' = search/browse works, 'journalWorks' = fetch works by journal ISSN, 'workByDoi' = fetch specific DOIs.

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

Optional full-text search across titles, abstracts and authors (e.g. 'deep learning', 'climate change'). Leave empty to browse the most-cited works.

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

Optional filter by publication type. Leave as 'Any type' for all.

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

How to order results. 'Most cited' surfaces the most-referenced works (used automatically when browsing with no query). 'Relevance' only applies when a search query is provided.

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

Direction for the selected sort.

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

Optional raw Crossref filter string for power users (e.g. 'from-pub-date:2023-01-01,has-full-text:true'). Combined with the Work type dropdown above. See https://api.crossref.org/swagger-ui/index.html.

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

ISSN of the journal for 'journalWorks' mode (e.g. '1476-4687' for Nature).

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

List of DOIs to fetch in 'workByDoi' mode (e.g. \['10.1038/s41586-023-06547-x']).

## `maxResults` (type: `integer`):

Maximum number of works to return (default 300). Uses cursor pagination for large result sets.

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

Your email to join the Crossref polite pool for higher rate limits (recommended). E.g. 'you@example.com'.

## `proxy` (type: `object`):

Apify Proxy configuration. Automatic proxy works well for Crossref; the Actor also falls back to a direct connection if a proxy IP fails.

## Actor input object example

```json
{
  "mode": "works",
  "type": "",
  "sort": "",
  "order": "desc",
  "maxResults": 300,
  "mailto": "contact@logiover.com",
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = { "proxy": { "useApifyProxy": True } }

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

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

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

```

## CLI example

```bash
echo '{
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call logiover/crossref-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/crossref-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Crossref Scholarly Scraper — DOIs, Citations & Journals",
        "description": "Scrape Crossref by keyword, ISSN, or DOI list. Extract title, authors, DOI, citations, journal, publisher, funding, license for research, bibliometrics, and academic analysis. No API key required.",
        "version": "1.0",
        "x-build-id": "qAGYCQLIxY6huESqk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~crossref-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-crossref-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~crossref-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-crossref-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~crossref-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-crossref-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode — what to scrape",
                        "enum": [
                            "works",
                            "journalWorks",
                            "workByDoi"
                        ],
                        "type": "string",
                        "description": "Scraping mode: 'works' = search/browse works, 'journalWorks' = fetch works by journal ISSN, 'workByDoi' = fetch specific DOIs.",
                        "default": "works"
                    },
                    "query": {
                        "title": "Search Query (optional)",
                        "type": "string",
                        "description": "Optional full-text search across titles, abstracts and authors (e.g. 'deep learning', 'climate change'). Leave empty to browse the most-cited works."
                    },
                    "type": {
                        "title": "Work type",
                        "enum": [
                            "",
                            "journal-article",
                            "book-chapter",
                            "proceedings-article",
                            "posted-content",
                            "book",
                            "book-section",
                            "book-part",
                            "reference-entry",
                            "dataset",
                            "dissertation",
                            "report",
                            "monograph",
                            "peer-review",
                            "standard",
                            "grant",
                            "component",
                            "journal",
                            "journal-issue",
                            "journal-volume",
                            "book-series",
                            "book-set",
                            "edited-book",
                            "reference-book",
                            "proceedings",
                            "proceedings-series",
                            "report-series",
                            "report-component",
                            "database",
                            "other"
                        ],
                        "type": "string",
                        "description": "Optional filter by publication type. Leave as 'Any type' for all.",
                        "default": ""
                    },
                    "sort": {
                        "title": "Sort by",
                        "enum": [
                            "",
                            "is-referenced-by-count",
                            "published",
                            "indexed",
                            "relevance",
                            "references-count"
                        ],
                        "type": "string",
                        "description": "How to order results. 'Most cited' surfaces the most-referenced works (used automatically when browsing with no query). 'Relevance' only applies when a search query is provided.",
                        "default": ""
                    },
                    "order": {
                        "title": "Sort direction",
                        "enum": [
                            "desc",
                            "asc"
                        ],
                        "type": "string",
                        "description": "Direction for the selected sort.",
                        "default": "desc"
                    },
                    "filter": {
                        "title": "Advanced Crossref Filter (optional)",
                        "type": "string",
                        "description": "Optional raw Crossref filter string for power users (e.g. 'from-pub-date:2023-01-01,has-full-text:true'). Combined with the Work type dropdown above. See https://api.crossref.org/swagger-ui/index.html."
                    },
                    "issn": {
                        "title": "Journal ISSN (journalWorks mode)",
                        "type": "string",
                        "description": "ISSN of the journal for 'journalWorks' mode (e.g. '1476-4687' for Nature)."
                    },
                    "dois": {
                        "title": "DOI List (workByDoi mode)",
                        "type": "array",
                        "description": "List of DOIs to fetch in 'workByDoi' mode (e.g. ['10.1038/s41586-023-06547-x'])."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of works to return (default 300). Uses cursor pagination for large result sets.",
                        "default": 300
                    },
                    "mailto": {
                        "title": "Email (Polite Pool, optional)",
                        "type": "string",
                        "description": "Your email to join the Crossref polite pool for higher rate limits (recommended). E.g. 'you@example.com'.",
                        "default": "contact@logiover.com"
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Automatic proxy works well for Crossref; the Actor also falls back to a direct connection if a proxy IP fails.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
