OpenAlex Academic Paper Search & DOI Lookup avatar

OpenAlex Academic Paper Search & DOI Lookup

Pricing

Pay per event

Go to Apify Store
OpenAlex Academic Paper Search & DOI Lookup

OpenAlex Academic Paper Search & DOI Lookup

Search OpenAlex papers or look up DOIs in batches. Get authors, abstracts when available, citation counts and open-access links. Full text is separate.

Pricing

Pay per event

Rating

0.0

(0)

Developer

mia.cx

mia.cx

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Security

Limited permissions

Share

Give an agent paper metadata and available abstracts without parsing search pages. Search OpenAlex or send a batch of DOIs to get authors, citations, topics and open-access links. Full text is separate; PDF links are not downloaded or verified. Each successful paper costs $0.0005, plus $0.00005 per run start at default memory.

Try it

{"dois":["10.1038/nature12373"]}

Empty input {} searches for retrieval augmented generation and returns up to ten papers. The Actor reads OpenAlex. No upstream credential field is required in the input.

Use from an agent

Add https://mcp.apify.com?tools=miacx/academic-paper-search to your MCP client and sign in to Apify. Call the dedicated Actor tool, then use get-dataset-items to read the completed run's dataset. Or set APIFY_TOKEN to your Apify API token and call the API:

curl --fail-with-body 'https://api.apify.com/v2/actors/miacx~academic-paper-search/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \
-d '{"dois":["10.1038/nature12373"]}'

What you get

The dataset contains one row per paper, plus rows for invalid inputs, missing DOIs or source failures. Read status first. Only ok rows incur Paper events; missing metadata can still occur on successful rows. Nonempty dois selects DOI lookup instead of search.

Selected fields from replaying the recorded tests/fixtures/doi.json response:

{
"status": "ok",
"input": "10.1038/nature12373",
"openAlexId": "https://openalex.org/W2159974629",
"doi": "https://doi.org/10.1038/nature12373",
"title": "Nanometre-scale thermometry in a living cell",
"year": 2013,
"venue": "Nature",
"type": "article",
"citationCount": 1961,
"isOpenAccess": true,
"openAccessStatus": "bronze",
"pdfUrl": "https://www.nature.com/articles/nature12373.pdf"
}

This is fixture output, not a fresh lookup. Citation counts and links can change. Rows also contain source, fetchedAt, reason, authors, abstract, landingUrl, topics and concepts. source is the OpenAlex request URL without credentials. reason is null on success.

Missing metadata stays null. Error rows keep the same fields with null metadata and empty arrays. authors contains {name, orcid} objects in source order; each value can be null. topics and legacy concepts contain {id, name, score} objects in source order; missing scores are null. These arrays are not deduplicated. Concepts are deprecated upstream; topics are the current classification.

Abstracts reconstruct OpenAlex's inverted index literally, without rewriting. Missing indexes produce null abstracts. pdfUrl comes only from an open-access best location. An open-access label does not guarantee a PDF. landingUrl prefers the best OA landing page, then primary landing page, OA URL and DOI. Fetch full text separately.

Input

FieldDefaultAccepted input
query"retrieval augmented generation"1–500 characters after trimming. Used when dois is empty.
dois[]Up to 500 DOI strings, doi: identifiers or doi.org URLs. Nonempty selects DOI lookup.
yearFrom0Inclusive first publication year, 1500–2200; 0 means no lower bound.
yearTo0Inclusive last publication year, 1500–2200; 0 means no upper bound.
openAccessOnlyfalseRestrict search to works OpenAlex marks open access.
type"all"all, article, review, preprint, book, book-chapter, dataset or dissertation.
minCitations0Nonnegative integer; inclusive minimum OpenAlex citation count.
sort"relevance"relevance, citations (most cited), newest or oldest by publication date.
maxResults101–500 unique successful search rows, subject to the run budget.

Nonempty dois overrides query, search filters, sort and maxResults. All fields still validate before either mode runs. Valid DOIs normalize case and prefixes; duplicates merge within the run. Each unique valid DOI produces a paper or error row. Invalid entries each produce invalid_doi before valid lookup results. Valid DOI results follow first-seen input order, not citation or date order.

Normalized DOIs allow up to 250 characters. Whitespace, quotes, pipes and control characters are rejected. Nonzero year bounds must be ordered. Empty or whitespace-only queries are invalid, even in DOI mode. See the .actor/input_schema.json for the complete contract.

To search recent open-access reviews:

{"query":"battery recycling","yearFrom":2022,"openAccessOnly":true,"type":"review","minCitations":10,"sort":"citations","maxResults":20}

Pricing

A Paper costs $0.0005 and counts one successful row, including cached results and papers with missing metadata. Search results deduplicate OpenAlex work IDs; DOI mode deduplicates normalized valid DOI inputs within one run. Errors and no-result rows incur no Paper events.

One thousand Paper events cost $0.50, plus $0.00005 per run start at default memory. A ten-paper search costs $0.00505 including startup. Default memory is 256 MB. Apify counts one start event per GB of memory, with a minimum of one event. The $0.00005 run start at default memory applies even with no billable papers.

The Actor checks remaining event capacity before fetching and emits only the charged subset of a batch. A budget below one Paper event returns budget_reached. Increase the budget or request fewer papers.

Limits and data freshness

Search uses at most five pages of up to 100 results. DOI lookups group up to 100 unique values per request. OpenAlex coverage can omit papers, abstracts and metadata. An empty search returns no_results. A later page can fail after earlier papers succeeded; inspect every row.

The upstream deadline is 25 seconds, with eight-second request timeouts and up to three transient-failure attempts. OpenAlex rate limits and quota apply. The operator can configure an OpenAlex key; the Actor has no credential input field. No browser or runtime LLM calls are used.

Search responses can be reused for one hour; identical DOI batches for 24 hours. Overlapping DOI batches with different grouping do not share cache entries. The named store paper-search-openalex-cache-v1 keeps at most 256 hashed response slots; collisions cause misses. fetchedAt marks row production time, including cache hits, and does not prove a fresh OpenAlex fetch.

If a row fails

StatusNext step
invalid_inputRead reason; correct the query, field values or year bounds.
invalid_doiSupply a valid DOI or doi.org URL without unsupported delimiter characters.
no_resultsWiden search filters or check the DOI. OpenAlex may not cover the work.
budget_reachedRaise the run budget or reduce the requested work.
upstream_429, timeoutRetry later after checking upstream quota and rate limits.
dns_error, network_error, upstream_5xxRetry later; the source could not complete the request. Actual HTTP codes appear in the status.
upstream_invalid_responseReport the input and reason; OpenAlex returned an unexpected shape.
Other upstream_<HTTP status>Read reason for the source response.

Field definitions are in the .actor/dataset_schema.json.