OpenAlex Scraper — Academic Papers, Citations, Authors
Pricing
from $0.70 / 1,000 result items
OpenAlex Scraper — Academic Papers, Citations, Authors
Search 250M+ scholarly works via OpenAlex: title, authors and institutions, year, venue, citations count, open-access PDF link, DOI, concepts, abstract. Filter by year and citations, sort by relevance or citations. Complements arXiv. No API key.
Pricing
from $0.70 / 1,000 result items
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
OpenAlex Scholarly Search — works, authors, journals, institutions, topics with citations & open access
Query OpenAlex, the open index of 250M+ scholarly works from every publisher (journals, preprints, books, datasets), plus its 100M authors, 250k sources, 100k institutions, funders and topics. Filter by year/date, citations, open-access status, type, language, country, institution, author, journal, topic or funder; sort by citations, date or field-weighted impact; get counts per group (groupBy) for instant analytics; crawl the citation graph with cites / citedBy. Built for research analysts, tech-scouting and competitive-intel teams, grant offices, science journalists and AI agents.
No API key, no proxy, no browser — the free OpenAlex REST API (polite pool).
Use cases
- Expert / KOL discovery —
entity: "authors",query: "battery electrolytes",countryCodes: ["DE"],sortBy: "cited_by_count"→ researchers based in Germany who published on the topic sincefromYear, most cited first, with papers on the topic (topicWorksCount), h-index, ORCID and current institution. (OpenAlex's own author search matches names only — the actor finds the matching papers and ranks their authors; seeauthorSearchMode.) - Competitive research intelligence —
institutionIds: ["I…"]of a competitor's lab +fromDate→ everything they published this quarter, with topics and funders. - Citation alerts —
cites: "W2741809807"run weekly → new papers citing your key patent/paper. - Market-sizing of a research field —
groupBy: "publication_year"or"authorships.institutions.country_code"on a query gives publication trends and country shares in one request. - Journal selection / APC budgeting —
entity: "sources",query: "machine learning",customFilter: "is_in_doaj:true"→ open-access journals with APC prices and h-index. - Literature review / RAG corpus —
openAccessOnly: true,hasAbstract: true,fields: ["id","doi","title","abstract","pdfUrl"],limit: 5000. - Grant landscape —
funderIds: ["F4320306076"](NSF) + topic query → funded work, corresponding authors, institutions.
Input
All fields are optional. Provide at least a query, one filter, ids/dois or sample. Works-only filters are ignored (with a warning) for other entities.
| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
entity | string | works | works, authors, sources, institutions, topics, concepts, funders, publishers |
query | string | – | Search text: stemmed, case-insensitive, "quoted phrases", AND / OR / NOT, -excluded. When sorting works by anything other than relevance, a plain 2–6 word query is matched as an exact phrase (falls back to all words if no work contains the phrase); add your own quotes or operators to control matching. |
searchIn | string | titleAndAbstract | Works (and experts by topic): titleAndAbstract, title, abstract, default (title + abstract + full text — broadest, but also matches papers that merely mention the words in their body), fulltext, keyword, rawAffiliation, semantic (embedding search, ranks by meaning). |
authorSearchMode | string | auto | entity: "authors" + query only. topic = experts by topic: works matching the query (with all works filters — fromYear, countryCodes, types…) grouped by author, ranked by papers on the topic (topicWorksCount) or by the author's citations / works count via sortBy; countryCodes keeps authors whose last known institution is there; minCitations applies to the author; max 200 authors. name = OpenAlex author name search. auto = name search only when the query looks like a person's name that OpenAlex knows ("Ashish Vaswani"), otherwise topic. |
fromYear / toYear | integer | 2020 / – | Publication year window (works). |
fromDate / toDate | string | – | YYYY-MM-DD; overrides the year fields. |
minCitations / maxCitations | integer | – | cited_by_count range. maxCitations: 0 = uncited only. |
openAccessOnly | boolean | false | is_oa:true. |
oaStatus | string[] | [] | diamond, gold, green, hybrid, bronze, closed |
types | string[] | [] | article, book-chapter, dataset, preprint, dissertation, book, review, paratext, libguides, letter, other, reference-entry, report, editorial, peer-review, erratum, standard, grant, supplementary-materials, retraction |
languages | string[] | [] | ISO 639-1 (en, ru, de, zh…). |
countryCodes | string[] | [] | ISO 3166-1 alpha-2. Works: any author affiliated there; authors: last known institution; institutions/sources/funders/publishers: own country. |
institutionIds | string[] | [] | I… ids (lineage — child institutes included). Find with entity: "institutions". |
authorIds | string[] | [] | A… ids. Find with entity: "authors". |
sourceIds | string[] | [] | S… ids (journal/repository), e.g. S137773608 = Nature. |
topicIds | string[] | [] | T… ids. Find with entity: "topics". |
funderIds | string[] | [] | F… ids, e.g. F4320306076 = NSF, F4320320879 = ERC. |
ids | string[] | [] | Fetch specific records by OpenAlex id (any entity), ≤100. Full URLs accepted. |
dois | string[] | [] | Fetch works by DOI, ≤100. |
cites | string | – | W…: works that cite this work (incoming citations). |
citedBy | string | – | W…: works this work cites (its reference list). |
hasDoi / hasAbstract | boolean | – | Presence filters (unset = any). |
excludeRetracted | boolean | false | is_retracted:false. |
customFilter | string | – | Raw OpenAlex filter appended verbatim (see Reference), e.g. primary_location.source.is_in_doaj:true,authorships.institutions.type:company. |
sortBy | string | relevance_score | works: relevance_score, cited_by_count, publication_date, publication_year, fwci, display_name, created_date, updated_date; other entities: relevance_score, cited_by_count, works_count, display_name (+ level for concepts). Relevance without a query falls back to citations / works count. |
sortOrder | string | desc | desc, asc |
limit (alias maxItems) | integer | 25 | 1–10 000, cursor paging 200 per request. |
groupBy | string | – | Return counts per group instead of records (max 200 groups). Any filter field, e.g. publication_year, type, oa_status, authorships.institutions.country_code, primary_location.source.id, primary_topic.id, funders.id. |
sample | integer | – | Reproducible random sample of N matching records (seed 42) instead of the sorted list. |
flagCitationAnomalies | boolean | true | Sanity-check citation counts of up to 25 works with ≥500 citations per run (+1 cheap request each): citationsSuspect: true when ≥5% of the citing works were published 2+ years before the work itself — see FAQ. |
includeAbstract | boolean | true | Rebuild the abstract from the inverted index (works). |
maxAuthors | integer | 10 | Truncate author lists; authorsCount keeps the real number. |
includeAuthorDetails | boolean | false | Adds authorsDetailed (id, ORCID, position, corresponding flag, institutions with ROR/country). |
includeCountsByYear | boolean | false | Adds countsByYear. |
includeReferencedWorks | boolean | false | Adds referencedWorks (W… ids) for graph crawling. |
fields | string[] | [] | Keep only these output fields. |
mailto | string | Yadroo's | Your e-mail for the OpenAlex polite pool. |
apiKey | string | – | Optional OpenAlex premium key. Never required. |
Reference
Entity ids
| Prefix | Entity | Example |
|---|---|---|
W | work | W2741809807 (Attention Is All You Need) |
A | author | A5103024730 |
S | source (journal / repository / conference) | S137773608 (Nature), S4306400194 (arXiv) |
I | institution | I136199984 (Harvard), I185571130 (Al-Farabi KazNU) |
T | topic | T10028 (Topic Modeling) |
F | funder | F4320306076 (NSF) |
P | publisher | P4310319965 (Springer Nature) |
C | concept (legacy) | C41008148 (Computer Science) |
Work filters usable in customFilter (most common)
Syntax: field:value, several values a|b = OR, several filters separated by , = AND, !value = NOT, numbers accept > / <. Full list: https://docs.openalex.org/api-entities/works/filter-works
| Filter | Meaning |
|---|---|
publication_year, publication_date, from_publication_date, to_publication_date | when published |
from_created_date, from_updated_date | when OpenAlex added / updated the record (needs apiKey for created_date) |
type, type_crossref, language, is_retracted, is_paratext | record kind |
cited_by_count, fwci, citation_normalized_percentile.value, referenced_works_count | impact |
is_oa, oa_status, open_access.any_repository_has_fulltext, best_oa_location.license | open access |
authorships.author.id, authorships.author.orcid, authorships.is_corresponding, authors_count | authors |
authorships.institutions.id, .lineage, .ror, .country_code, .continent, .type (education, company, government, healthcare, nonprofit, facility, archive, other), .is_global_south | affiliations |
primary_location.source.id, .issn, .type (journal, repository, conference, ebook platform, book series), .is_in_doaj, .is_core, .publisher_lineage, .host_organization | venue |
primary_topic.id, topics.id, primary_topic.subfield.id, .field.id, .domain.id, keywords.id, concepts.id | subject |
funders.id, grants.award_id, sustainable_development_goals.id | funding / SDG |
has_doi, has_pmid, has_pmcid, has_abstract, has_fulltext, has_references, has_orcid | completeness |
ids.pmid, ids.openalex, doi, title.search, abstract.search, fulltext.search, raw_affiliation_strings.search, default.search | ids and searches |
cites, cited_by, related_to | graph |
indexed_in (crossref, pubmed, doaj, arxiv, datacite), locations_count, has_oa_accepted_or_published_version | misc |
Other entities: authors — last_known_institutions.id/.country_code, affiliations.institution.id, orcid, has_orcid, works_count, cited_by_count, summary_stats.h_index; sources — type, country_code, is_oa, is_in_doaj, is_core, apc_usd, host_organization, issn; institutions — country_code, type, continent, is_global_south, lineage, ror; topics — subfield.id, field.id, domain.id; funders / publishers — country_code, works_count, grants_count.
Open-access status
oaStatus | Meaning |
|---|---|
diamond | OA journal without APC |
gold | OA journal (usually APC) |
hybrid | OA article in a subscription journal |
green | free copy only in a repository |
bronze | free on the publisher site, no license |
closed | no free copy known |
Examples
Most cited recent papers on a topic (literature review starter)
{ "query": "solid-state battery electrolyte", "searchIn": "titleAndAbstract", "fromYear": 2023, "minCitations": 20, "sortBy": "cited_by_count", "limit": 100 }
Who works on this in Kazakhstan — experts by topic, ranked by citations
{ "entity": "authors", "query": "wheat breeding", "countryCodes": ["KZ"], "sortBy": "cited_by_count", "limit": 50 }
Returns authors of KZ-affiliated papers on wheat breeding since 2020 whose last known institution is in Kazakhstan (e.g. Al-Farabi KazNU, Seifullin Agro Technical University), with topicWorksCount, total citations and h-index. Drop sortBy to rank by number of papers on the topic.
Look up an author by name
{ "entity": "authors", "query": "Ashish Vaswani", "authorSearchMode": "name", "limit": 5 }
Weekly citation alert for a key paper
{ "cites": "W2741809807", "fromDate": "2026-09-06", "sortBy": "publication_date", "limit": 200, "fields": ["id", "doi", "title", "publishedAt", "venue", "authors", "url"] }
Country shares of a research field (one request, no items)
{ "query": "agentic AI", "fromYear": 2024, "groupBy": "authorships.institutions.country_code", "limit": 50 }
Corporate research output this quarter (competitor intel)
{ "institutionIds": ["I1291425158"], "fromDate": "2026-07-01", "sortBy": "publication_date", "includeAuthorDetails": true, "limit": 500 }
Open-access journals in a field with APC prices
{ "entity": "sources", "query": "computer vision", "customFilter": "is_in_doaj:true", "sortBy": "cited_by_count", "limit": 30 }
Output
One item per record. Works example (trimmed):
{"id": "W7211905801","openalexUrl": "https://openalex.org/W7211905801","doi": "10.54254/2755-2721/2026.ld28741","doiUrl": "https://doi.org/10.54254/2755-2721/2026.ld28741","title": "A Survey on Reinforcement Learning Optimization Methods for Multi-Agent Collaboration of Large Language Models","year": 2026,"publishedAt": "2026-09-08","type": "article","language": "en","venue": "Applied and Computational Engineering","venueId": "S4387284237","venueType": "journal","publisher": "EWA Publishing","authors": ["Qianling Zhang"],"authorsCount": 1,"institutions": ["Xiangtan University"],"countries": ["CN"],"correspondingAuthors": ["Qianling Zhang"],"citations": 0,"fwci": null,"citationPercentile": null,"isOpenAccess": true,"oaStatus": "gold","pdfUrl": "https://ace.ewapub.com/article/view/36623.pdf","url": "https://doi.org/10.54254/2755-2721/2026.ld28741","primaryTopic": "Multi-Agent Systems and Negotiation","field": "Computer Science","domain": "Physical Sciences","topics": ["Multi-Agent Systems and Negotiation", "Reinforcement Learning in Robotics"],"keywords": ["Reinforcement learning", "Multi-agent system"],"abstract": "Large language models (LLMs) …","source": "openalex","fetchedAt": "2026-09-13T08:01:05.123Z"}
| Field group | Works fields |
|---|---|
| identity | id, openalexUrl, doi, doiUrl, pmid, arxivId, title, type, typeCrossref, language, year, firstVersionYear (year of the earliest arXiv/bioRxiv version merged into the record, else year), publishedAt |
| venue | venue, venueId, venueType, issn, publisher, volume, issue, pages |
| people | authors, authorsCount, authorsTruncated, correspondingAuthors, institutions, countries, optional authorsDetailed[] |
| impact | citations, fwci, citationPercentile, isTop10Percent, isTop1Percent, referencedWorksCount, optional countsByYear[], referencedWorks[] |
| access | isOpenAccess, oaStatus, pdfUrl, url, license, version, isRetracted |
| subject | primaryTopic, primaryTopicId, subfield, field, domain, topics[], keywords[], concepts[], sdgs[], funders[] |
| text | abstract |
| provenance | source, fetchedAt |
Works also carry citationsSuspect (true / false, null = not checked) and citationsPredatingWork (citing works published 2+ years before the work's first version). Authors: id, name, orcid, worksCount, citations, hIndex, i10Index, meanCitedness2y, lastKnownInstitutions, lastKnownCountry, lastKnownCountries, country, affiliations[], topics[], matchedBy (topic / name); experts by topic add topicWorksCount (papers matching the query) and topicQuery. Sources: name, type, issnL, publisher, country, worksCount, citations, hIndex, isOpenAccess, isInDoaj, apcUsd, homepage. Institutions: name, ror, country, city, type, worksCount, citations, hIndex, homepage, parentIds. Topics: name, description, keywords, subfield, field, domain, worksCount. Group-by rows: groupBy, key, keyDisplayName, count, share.
A SUMMARY record in the key-value store holds the exact filter string, the first request URL and totalMatching.
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~openalex-works/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"query":"agentic commerce","fromYear":2024,"sortBy":"cited_by_count","limit":50}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/openalex-works').call({ entity: 'authors', query: 'perovskite solar', countryCodes: ['DE'], limit: 50 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/openalex-works").call(run_input={"cites": "W2741809807", "fromDate": "2026-09-01", "limit": 200})items = client.dataset(run["defaultDatasetId"]).list_items().items
MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/openalex-works tool with the same JSON input.
Pricing
Pay per event: $0.001 per run start + $0.001 per item (a group-by row counts as an item). Typical runs: 25-record lookup ≈ $0.026; 500-paper competitor snapshot ≈ $0.5; 50-row country breakdown ≈ $0.051.
Limits & FAQ
- Rate limits — OpenAlex meters its free API: without an API key each IP gets a small daily budget (about $0.10/day of API credit in September 2026 — a search request costs $0.001, a plain filter/lookup $0.0001), ~10 requests/s. The actor pages 200 records per request with a 250 ms pause and retries 429/5xx with backoff; when the daily budget is spent it stops with a clear error — pass your own free
apiKeyfor heavy use. - Citation counts are OpenAlex's own (
citations=cited_by_count, not remapped). OpenAlex occasionally credits another paper's citations to the wrong record — e.g. a 2023 conference paper showing 79 000 citations, 15% of them from papers written before it existed.flagCitationAnomaliescatches this pattern (citationsSuspect: true) for highly cited works, measuring from the first public version so a journal record of an older arXiv preprint is not flagged; it cannot catch records where only the title is wrong (a few arXiv records carry an unrelated title but the real paper's authors and citations) — check the DOI when a result looks odd. - Search precision — the default
titleAndAbstractavoids papers that mention the words only in their body;titleis the most precise for citation-ranked lists.default/fulltextare for recall, not for citation rankings. - Freshness — OpenAlex ingests Crossref/PubMed/arXiv within days; citation counts update roughly weekly.
- Depth — up to 10 000 records per run via cursor paging; split bigger jobs by year or source.
ids/doistake up to 100 per run (one request). - Abstracts — rebuilt from OpenAlex's inverted index; ~40% of works have none (
hasAbstract: trueto filter). - Errors — an invalid filter/sort fails fast with OpenAlex's own message (it lists the valid field names); unknown enum values are warned about before the request.
- Not included — full text, publisher paywalled PDFs;
pdfUrlpoints to the best open copy when one exists. - Roadmap — autocomplete helper for ids, N-gram endpoint, Semantic Scholar cross-links.
Made by Yadroo. Sibling actors: arxiv-papers (preprints with full category taxonomy), wikipedia-search, openlibrary-books, sec-edgar-filings, github-repo-intel.