Academic Papers Search: Research Papers via OpenAlex & Crossref
Pricing
from $0.70 / 1,000 papers
Academic Papers Search: Research Papers via OpenAlex & Crossref
Search academic and research papers in OpenAlex and Crossref (incl. arXiv preprints) by keywords, title, author, DOI, arXiv id, date range and open access. One clean record per paper: authors, venue, DOI, citation count, open-access PDF link, and the abstract where its licence allows.
Pricing
from $0.70 / 1,000 papers
Rating
0.0
(0)
Developer
Michael Costa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
What does Academic Papers Search do?
Academic Papers Search takes keywords, a DOI or an arXiv id and returns research papers as clean records: title, authors, year, venue, DOI, citation count, open-access status and free PDF link, and reusable abstracts. It searches OpenAlex and Crossref through their official public APIs, merging duplicates.
Input fields · API · Use it from Claude, ChatGPT or Cursor (MCP)
Jump to: Monitor a topic · Fields · Price · How to use · Input · Output · AI agents (MCP) · Limits · FAQ
Try it in one click: the input comes pre-filled with the search CRISPR base editing. That's 20 papers
(the best matches of both sources), or roughly $0.02 (20 × $0.001 per paper, plus $0.00005 for the run start).
Then replace it with what you actually want.
Monitor new papers on a topic
Academic Papers Search can run your topic searches on a schedule and give you only the papers you haven't seen yet. Set it up once:
- Save a task. Fill in Searches, DOIs or arXiv ids, set Sort to Newest first and turn on Only new
works (
sort: "newest",onlyNew: truein the API). For schedules, add your own free OpenAlex API key (see the pricing section). Then click Save as a new task at the top right of the actor's page. The first run returns the top matches; later runs return only works this search hasn't returned before. - Schedule it. In Apify Console, open Schedules, click Create new, pick the task and set how often it runs
(for example every Monday at 07:00, cron
0 7 * * 1). - Send the new papers where you work, from the task's Integrations tab:
- Slack: a message in the channel you choose when a run succeeds (you pick the events and can edit the message).
- Email: Send results email via Gmail sends the run's results, with the dataset attached.
- Webhook: a POST to your URL on the
ACTOR.RUN.SUCCEEDEDevent. The payload'sresource.defaultDatasetIdpoints to the new papers:GET https://api.apify.com/v2/datasets/<defaultDatasetId>/items?format=jsonwith your API token. - Make, Zapier or n8n: each has an Apify step that starts on a finished run and reads its dataset.
A run that finds nothing new returns 0 papers and costs only the $0.00005 start fee. Slack and email are sent for every successful run, including a quiet one; to hear only about new papers, use the webhook or Make/Zapier/n8n and skip runs whose dataset is empty. Add the run failed event too, so a failed run doesn't go unnoticed. Keep the task's filters fixed: the memory is per search line and filter set, so changing them starts a fresh search.
What data does Academic Papers Search return?
| Field | Example | Notes |
|---|---|---|
title | CRISPR-Cas9 DNA Base-Editing and Prime-Editing | |
authors | Ariel Kantor, Michelle E. McClements, ... | Names only. |
year, publicationDate | 2020, 2020-08-28 | Implausible future dates are set aside (see Output). |
venue, type | International Journal of Molecular Sciences, article | |
doi, arxivId, pmid, openalexId | 10.3390/ijms21176240 | Whichever identifiers the sources have. |
citationCount | 468 | |
isOpenAccess, oaStatus, license | true, gold, cc-by | oaStatus is gold, diamond, green, hybrid, bronze or closed. |
pdfUrl, landingPageUrl | https://www.mdpi.com/...pdf | The best free copy and the publisher's page. |
abstract, abstractLicense | Many genetic diseases..., cc-by | Only when the licence allows reuse; else null. |
sources | openalex, crossref | Which catalogues had the paper. |
id | doi:10.3390/ijms21176240 | Stable across runs, for deduplication. |
Every paper has the same fields; the full record is under Output.
How much does it cost to search academic papers?
You pay per paper returned: $1.00 per 1,000 papers, plus $0.00005 each time a run starts. A repeat run with nothing new costs only the start fee.
It's cheaper on paid Apify plans: $0.90 per 1,000 papers on Starter, $0.80 on Scale and $0.70 on Business. The prices on this page are the Free-plan price, so on a paid plan you pay less than the examples show.
- The example below: 20 papers × $0.001 = $0.02, plus the $0.00005 start fee; the repeat run $0.00005.
- A month, for example: 10 topic searches run weekly with only-new on, about 20 new papers per search per week: 800 × $0.001 = $0.80, plus 4 starts.
- Caps: Max results per run in the input, and Maximum cost per run in the run options. It stops cleanly at whichever comes first, and stops fetching as soon as the limit is covered, so a capped run is also a fast one.
OpenAlex's own daily limit. OpenAlex counts every API call against a free daily usage budget that resets at midnight UTC (example costs). Without a key the budget is $0.10 of usage a day and a search request costs $0.001, so that's about 100 search requests a day. Each request returns up to 100 works: a search for 20 or 100 works uses one, a search for 1,000 uses ten. DOI and arXiv lookups barely use it (a lookup by id is free).
For more, create a free OpenAlex account and paste your API key into OpenAlex API key (optional): a free key gives 10 times the budget ($1 a day, about 1,000 search requests) at no cost to you. The field is a secret input (Apify stores it encrypted), and the key is only ever sent to OpenAlex, in a request header: never in a URL, the output or the run statistics. If the budget runs out mid-run, the run log says so, and Crossref's results are still returned.
Scheduling searches? Add your own key. OpenAlex's documentation doesn't say how it tells keyless callers apart. If it counts them by IP address, runs on Apify's shared servers may share one keyless budget with other Apify users, so it can run out well before 100 searches. With your own free key the budget is yours alone.
How to search academic papers
- Open the actor and type one search per line into Searches, DOIs or arXiv ids: keywords, or a DOI / arXiv id to look up that paper.
- Optionally set Author, Published from / to, Open access only or Sort.
- Click Start.
- Open the Output tab and export the papers as JSON, CSV or Excel, or read them through the API.
- To follow a topic, save it as a task and schedule it (see Monitor new papers on a topic above).
OpenAlex has over 300 million works, including the preprints on arXiv; Crossref is the DOI registry for most journals. A paper both of them know comes back once, with the best of both records.
Example: a topic search, then a re-check
The pre-filled search, with Only new works turned on:
{"queries": ["CRISPR base editing"], "maxResultsPerQuery": 20, "searchIn": "all", "sort": "relevance","sources": ["openalex", "crossref"], "onlyNew": true}
The best match (real output from a local run on 2026-09-25; authors shortened):
{"id": "doi:10.1038/s41586-021-03534-y","title": "In vivo CRISPR base editing of PCSK9 durably lowers cholesterol in primates","authors": ["Kiran Musunuru", "Alexandra C. Chadwick", "Taiji Mizoguchi", "..."],"year": 2021,"venue": "Nature","type": "article","doi": "10.1038/s41586-021-03534-y","pmid": "34012082","abstract": null,"citationCount": 805,"isOpenAccess": false,"oaStatus": "closed","landingPageUrl": "https://doi.org/10.1038/s41586-021-03534-y","sources": ["openalex"]}
The abstract is null because the paper has no open licence (see the FAQ). Run again straight after, the same
search returned 0 papers, so only the start fee was charged.
Ready-to-run examples
Each example opens with the input already filled in. Run it as it is, or change the input first.
- Find the most cited research papers on a topic: Search OpenAlex and Crossref for papers on any topic and get the most cited ones first, with authors, DOI, abstract, citation count and open-access links.
- Track new research papers on a topic: Run on a schedule and get only papers published since the last run for your research topics, newest first, with DOI, abstract and open-access links.
Input
| Field | What it does |
|---|---|
| Searches, DOIs or arXiv ids | One per line. Keywords run a search; a DOI or arXiv id (or their links) looks up that paper. |
| Max works per search | At most this many works per search line, the best matches of both sources (1 to 1,000; default 20). |
| Search in | Everything the source indexes (title, abstract, full text where available), or the title only. |
| Author | Only works with this author in the byline. |
| Published from / to | A year (2020), a month (2020-06) or a date (2020-06-15). |
| Open access only | Only works that are free to read. |
| Sort | Best match, newest first (by publication date), or most cited first. |
| Sources | OpenAlex, Crossref, or both (default). |
| Only new works | Skip works this search returned in an earlier run. |
| OpenAlex API key (optional) | Your free OpenAlex key (secret input); raises OpenAlex's daily budget 10x. Sent to OpenAlex only. |
| Max results per run | Cap the total number of works across all searches. |
The filters (author, dates, open access, sort) apply to searches, not to direct DOI / arXiv lookups.
{"queries": ["large language models evaluation", "10.1038/nmat1849", "arXiv:1706.03762"],"maxResultsPerQuery": 50,"publishedFrom": "2023","openAccessOnly": true,"sort": "mostCited"}
Output
Every paper has the same fields. Fields the sources don't have are null.
{"id": "doi:10.3390/ijms21176240","query": "CRISPR base editing","title": "CRISPR-Cas9 DNA Base-Editing and Prime-Editing","authors": ["Ariel Kantor", "Michelle E. McClements", "Robert Edward MacLaren"],"year": 2020,"publicationDate": "2020-08-28","unreliablePublicationDate": null,"venue": "International Journal of Molecular Sciences","type": "article","doi": "10.3390/ijms21176240","arxivId": null,"openalexId": "W3081580655","pmid": "32872311","abstract": "Many genetic diseases and undesirable traits are due to base-pair alterations ...","abstractLicense": "cc-by","citationCount": 468,"isOpenAccess": true,"oaStatus": "gold","license": "cc-by","pdfUrl": "https://www.mdpi.com/1422-0067/21/17/6240/pdf?version=1598944845","landingPageUrl": "https://doi.org/10.3390/ijms21176240","sources": ["openalex", "crossref"],"scrapedAt": "2026-09-24T19:40:00Z"}
id is stable across runs (doi:..., else arxiv:..., else openalex:...), so you can use it to deduplicate.
Authors are names only. For arXiv papers (arxivId set), pdfUrl and landingPageUrl always point to
arxiv.org (https://arxiv.org/pdf/<id> and https://arxiv.org/abs/<id>), whichever copy the catalogue listed
first; for other papers they are the best free copy OpenAlex knows and the publisher's page. For papers only Crossref has, isOpenAccess is true when the published version has a
Creative Commons licence and null (unknown) otherwise.
Dates too far in the future are set aside. The sources sometimes date a work years ahead (on 2026-09-25,
Crossref's newest "CRISPR base editing" works included one dated 2047 and one dated 2030). A date later than the
end of next year is treated as a data error: year and publicationDate are null and the source's value is kept
in unreliablePublicationDate, so the work is still returned but sorts and filters as undated. Dates up to the end
of next year are kept as they are: journals date forthcoming issues ahead, and articles already online in
September often carry the next year's issue date. If one source has a credible date for a work and the other an
implausible one, the credible one is used.
With Newest first, both sources are asked for nothing dated after the end of next year, so mistyped dates can't fill the top of the list, and the merged list is sorted by publication date, newest first (works without a date last). Forthcoming issues therefore come first: on 2026-09-25 the top 20 for "CRISPR base editing" were articles registered with Crossref in July to September 2026 under issue dates from February to July 2027 (many publishers register only the issue date). With the other sorts, the sources' results are interleaved by rank: OpenAlex's best match, Crossref's best match, then each one's second, and so on.
Run it on a schedule, or from your own code
- Schedule: save the input as a task and add it to a schedule, as in Monitor new papers on a topic above.
- API: fetch a task's latest results with
GET https://api.apify.com/v2/actor-tasks/<task id>/runs/last/dataset/items?status=SUCCEEDED&format=csvand your API token (formatcan also bejsonorxlsx). - Webhooks and automation: a webhook when a run succeeds, or Make, Zapier or n8n through Apify's integrations.
Can I use Academic Papers Search from an AI agent (MCP)?
Yes, through Apify's MCP server, from Claude, ChatGPT, Cursor or any other MCP client. Add this to your client's MCP configuration (or let the agent find it with the server's actor search); your client signs you in to Apify:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=humble-echidna/academic-papers"}}}
To use an Apify API token instead of signing in, add
"headers": {"Authorization": "Bearer <APIFY_TOKEN>"} next to url.
The agent passes the same input JSON as above. A DOI or arXiv id looks up one paper; for searches, keep Max works per search small so answers stay short.
Who it's for
Researchers, research offices, R&D and competitive-intelligence teams, and science writers who follow a topic: schedule a search with Only new works and get the papers you haven't seen yet, with DOI, venue, citation count and a link to a free copy where one exists.
Why this one?
- One flat price, no usage bill. You pay per result at the price above and nothing else: no compute, proxy or storage charges on top, apart from the $0.00005 run-start fee, so you know what a run costs before it starts. Results you don't get aren't charged.
- Two catalogues, one list, no duplicates. Results from OpenAlex and Crossref are merged by DOI and arXiv id, within a search and across all the searches in a run. Each record says which sources had it.
- Open access done properly. Every OpenAlex result has its open-access status (gold, diamond, green, hybrid, bronze or closed), licence, and a link to the best free copy and its PDF when there is one.
- Abstracts you can actually reuse. An abstract is included only when the paper's licence allows reuse (CC BY, CC BY-SA, CC BY-ND, CC0, public domain); many publishers own their abstracts' copyright.
- DOI and arXiv lookups. Paste
10.1038/nmat1849,https://doi.org/...,2010.11929or an arxiv.org link and get that paper's record. - Alerts. "Only new works" + "Newest first" on a schedule gives you only the papers you haven't seen.
- Polite and safe. It identifies itself honestly (User-Agent
HumbleEchidnaApify), follows each site's robots.txt, and keeps to each API's published rate limit (Crossref: one request per second, one at a time). - Reliable. One failing search never affects the others, and if one source is down you still get the other's
results. The run log and the
RUN_STATSrecord say exactly what failed and why.
Limits
- No arXiv API. arXiv's robots.txt disallows it, so arXiv preprints come through OpenAlex (see the FAQ).
- Abstracts only under an open licence; many papers come back without one.
- OpenAlex's free daily budget caps keyless searches at about 100 requests a day (see the pricing section); add your own free key for more.
- Up to 1,000 works per search line.
FAQ
Why isn't arXiv's API queried directly?
arXiv's robots.txt disallows it: export.arxiv.org, the API host,
has Disallow: / for every crawler, and arxiv.org disallows /api and /search. This actor follows robots.txt,
so it never calls arXiv at all. arXiv preprints are still found: OpenAlex indexes arXiv, and an arXiv id is looked
up through OpenAlex by the DOI arXiv registers for every paper (10.48550/arXiv.<id>). Each arXiv result has its
arxivId, with pdfUrl set to https://arxiv.org/pdf/<id> and landingPageUrl to https://arxiv.org/abs/<id>.
Those are links built from the id, not pages this actor opens.
Why do some papers have no abstract?
Either the source has none, or the paper's licence doesn't allow reuse (for
example CC BY-NC, or no open licence at all). Follow landingPageUrl to read it.
Why does something that used to work now fail or return fewer results?
An API may have changed its format without notice. The run log names the search and what went wrong, and every other search in the run is unaffected. Please open an issue with the input you used.
Is it legal to search and reuse academic paper data?
Yes. It only uses the owners' public, documented APIs, never a login, and it collects no personal data beyond the author names printed on each paper.
- OpenAlex data is released under CC0: "the data is a public good, released under a CC0 public-domain license
with no 'personal use only' carve-out and no permission to ask"
(OpenAlex pricing). Its API allows keyless basic use and asks for no
more than 100 requests per second within a daily budget
(authentication and rate limits). Its robots.txt allows
everything (
User-agent: * / Allow: /). - Crossref: "almost none of the metadata is subject to copyright, and you may use it for any purpose. Some abstracts contained in the metadata may be subject to copyright by publishers or authors" (Crossref REST API). That's why abstracts are only included under an open licence. This actor keeps to the public pool's published limits and identifies itself in its User-Agent, as Crossref's etiquette asks. api.crossref.org has no robots.txt.
- arXiv: not contacted (see above). Its papers' links are built from their ids and point to arxiv.org; other PDF links point to where OpenAlex says the paper is hosted. This actor never downloads or redistributes the PDFs.
Related actors
| Actor | Use it when |
|---|---|
| PDF to Text Converter | You want the papers' text and tables: pass it the open-access pdfUrl links (where the host's robots.txt allows it). |
| Dataset Transformer | You want to filter by year, venue or citations and export a reading list as CSV. |
Feedback and support
Found a bug, or need a field or source that isn't here? Open an issue on the Issues tab with the input you used.
Versions
Current version: 1.1. See the Changelog tab for what changed in each version.