# Research Papers API - OpenAlex Works, Authors, Citations (`nabeelbaghoor/research-papers-authors-citations-api`) Actor

Search 300M+ research papers, authors, journals, institutions, topics, publishers and funders in the OpenAlex scholarly index. Filter by year, type, open access, citations, author, institution or country, get citing works, look up DOIs, ORCIDs and RORs. Keyless or your own key.

- **URL**: https://apify.com/nabeelbaghoor/research-papers-authors-citations-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** AI, Developer tools, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 research paper or work returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Research Papers API - OpenAlex Works, Authors, Citations

Search and export research papers, citing works, authors, journals, institutions, topics, publishers and funders from the OpenAlex scholarly index, as one clean dataset row per record.

OpenAlex is the open catalog of the global research system: more than 300 million works (journal articles, preprints, books, chapters, datasets, dissertations and conference papers) linked to their authors, institutions, journals, topics and funders, with citation counts and open access status. This actor wraps the read only entity endpoints of the OpenAlex REST API on api.openalex.org: give a keyword search, filters, a list of IDs or DOIs, and get deduplicated rows with authors, journal, open access links, citations, topic and the plain text abstract already flattened, which you can download as JSON, CSV or Excel, schedule, or feed into literature reviews, bibliometrics, research intelligence dashboards, RAG pipelines, Google Sheets and AI agents.

Runs keyless or with your own free OpenAlex API key. Live-tested on 2026-10-22 without a key: a works search with date, type, open access, citation and sort filters returned real records through this actor's client; every filter field was confirmed against the API.

### What it does

- **Works search**: research papers, preprints, books, datasets and dissertations by keyword (title, abstract and full text, title only, title and abstract, or exact words with wildcards), with AND, OR, NOT and phrase search.
- **Works filters**: publication date range, work type, open access (any, open, closed) and status (diamond, gold, green, hybrid, bronze), language, minimum citations, retracted works left out, author, institution, journal or other source, topic, funder and author country, plus any raw OpenAlex filter.
- **Citing works**: every paper that cites one or more works you name, for citation tracking and forward snowballing.
- **Author, source, institution, topic, publisher and funder search**: profiles with works count, citation count, h-index, i10-index, country, type, ORCID, ROR or ISSN, and the IDs the works filters take.
- **Lookup by ID or DOI**: single records by OpenAlex ID, DOI, PMID, ORCID, ROR or ISSN, up to 500 per run. Single records are free on OpenAlex.
- **Sorting**: relevance, most cited, newest, oldest, most works or name.
- **Abstracts**: the plain text abstract rebuilt from the OpenAlex abstract index, where one exists.
- **Deep paging**: cursor paging with a key for any number of results, basic paging up to 10,000 results per lookup without one.
- **Pay only for results**: refused and empty lookups are recorded as a free row that says why, never charged.

Nothing is written to any OpenAlex account: only GET endpoints are called.

### Do I need an API key?

No. OpenAlex answers without a key, on a small free budget ($0.10 a day) that is shared by every caller on the same IP address, at up to 10 requests a second, and only the first 10,000 results of a lookup can be paged. For regular or larger runs, add your own free key: create an account at openalex.org and copy the key from Settings, API key. It gives you your own $1 a day (about 10,000 filtered list calls or 1,000 searches), 30 requests a second and cursor paging. The key is sent only to api.openalex.org in the Authorization header and never logged.

### Input

| Field | Used by | Example |
|---|---|---|
| What to get | all | Works search |
| Search | Works and every profile search | CRISPR gene editing |
| Search in | Works search | Title and abstract |
| Sort | all list modes | Most cited first |
| Published from, Published to | Works, citing works | 2023-01-01 to 2024-12-31 |
| Work types | Works, citing works | article, review |
| Open access, Open access status | Works, citing works (open access also sources) | Open access only, gold |
| Language | Works, citing works | en |
| Minimum citations | all list modes | 50 |
| Leave out retracted works, Corpus | Works, citing works | on, Core |
| Cited work IDs | Citing works | W2741809807 |
| Author, institution, source, topic, funder IDs | Works, citing works (institutions also authors) | A5023888391, I63966007 |
| Publisher IDs | Sources | P4310319965 |
| Country codes | Works, authors, sources, institutions, publishers, funders | US, GB |
| Extra filter | all list modes | publication_year:2020-2024,has_fulltext:true |
| Identifiers, Record type | Lookup by ID or DOI | 10.7717/peerj.4375, Auto |
| Include abstract | Works | on |
| Max results | all | 100 |
| API key | all, optional | your OpenAlex key |

Example input for the most cited open access CRISPR papers since 2023:

```json
{
    "mode": "works",
    "searchQueries": ["CRISPR gene editing"],
    "fromPublicationDate": "2023-01-01",
    "workTypes": ["article", "review"],
    "openAccess": "openOnly",
    "minCitations": 50,
    "sort": "mostCited",
    "maxResults": 200
}
```

### Example output

```json
{
    "mode": "works",
    "recordType": "work",
    "query": "search \"CRISPR gene editing\"",
    "id": "W4313531093",
    "openalexUrl": "https://openalex.org/W4313531093",
    "name": "Hallmarks of aging: An expanding universe",
    "doi": "10.1016/j.cell.2022.11.001",
    "publicationYear": 2023,
    "publicationDate": "2023-01-01",
    "type": "article",
    "authors": "Carlos Lopez-Otin; Maria A. Blasco; Linda Partridge; Manuel Serrano; Guido Kroemer",
    "authorCount": 5,
    "countries": "ES, DE, GB, FR",
    "sourceName": "Cell",
    "issnL": "0092-8674",
    "publisher": "Cell Press",
    "volume": "186",
    "issue": "2",
    "isOa": true,
    "oaStatus": "bronze",
    "oaUrl": "https://doi.org/10.1016/j.cell.2022.11.001",
    "citedByCount": 6462,
    "fwci": 270.7765,
    "referencedWorksCount": 298,
    "primaryTopic": "Genetics, Aging, and Longevity in Model Organisms",
    "field": "Biochemistry, Genetics and Molecular Biology",
    "found": true,
    "note": null,
    "record": { "id": "https://openalex.org/W4313531093", "...": "the full OpenAlex work" }
}
```

Profiles carry `worksCount`, `citedByCount`, `hIndex`, `i10Index`, `twoYearMeanCitedness`, `countryCode`, `type` and their identifiers (`orcid`, `ror`, `issnL`), with the full record under `record`.

### FAQ

#### What is OpenAlex?

OpenAlex is a free and open index of scholarly works, authors, sources, institutions, topics, publishers and funders, run by the nonprofit OurResearch (the team behind Unpaywall) and named after the ancient Library of Alexandria. It replaced Microsoft Academic Graph in 2022 and is used as an open alternative to Scopus, Web of Science and Dimensions. Its data is released under CC0.

#### How do I search research papers by keyword?

Choose Works search, type a search such as "large language models" AND evaluation, and pick where to search: title, abstract and full text, title only, or title and abstract. Add filters such as a date range, work type, open access or a minimum citation count, and sort by relevance, citations or date.

#### How do I find all papers that cite a paper?

Find the paper's OpenAlex work ID (search for it, or look its DOI up with Lookup by ID or DOI), then choose Citing works and put the ID in Cited work IDs. Add date, type or open access filters and sort newest first to follow a citation trail.

#### Can I get all papers by an author or an institution?

Yes. Run Authors search with a name, or Institutions search with a university, to get the OpenAlex ID, then run Works search with no search text and that ID in Author IDs or Institution IDs. Add a date range for an annual publication report.

#### Can I look up papers by DOI?

Yes. Choose Lookup by ID or DOI and paste DOIs, one per line, in any form (10.7717/peerj.4375, doi:10.7717/peerj.4375 or https://doi.org/10.7717/peerj.4375). PMIDs, ORCIDs, ROR URLs, ISSNs and OpenAlex IDs work the same way. Single record lookups are free on OpenAlex.

#### Does it return abstracts and open access PDF links?

Yes, where OpenAlex has them. The abstract is rebuilt as plain text from the OpenAlex abstract index, and each work carries its open access status, best open access URL, PDF link where known, landing page and licence.

#### How many results can one run return?

Up to 100,000 rows. With your own key the actor follows the OpenAlex cursor and can page through any result set; without a key each lookup stops at the first 10,000 results, which is the OpenAlex basic paging limit.

#### How much of my OpenAlex budget does a run use?

One call per page of up to 100 rows. OpenAlex prices a filtered list call at $0.0001, a search at $0.001 and a single record lookup at nothing, so a free key's $1 a day covers about 100,000 search results or 1,000,000 filtered results. When the budget is used up the run ends cleanly and says when it resets (midnight UTC).

#### What do I pay?

Pay per result: you pay this actor only for rows that carry OpenAlex records. Empty searches and refused lookups are free rows. OpenAlex itself is free up to its daily budget.

### Pricing

| Event | Price |
|---|---|
| Research paper or other work returned | 0.005 USD |
| Author, source, institution, topic, publisher or funder returned | 0.006 USD |

Platform usage is included. Any OpenAlex prepaid usage or plan you buy is billed separately by OpenAlex.

### Keyword map

Research papers API, academic papers API, scholarly API, OpenAlex API, OpenAlex scraper, scientific literature search, citation data API, citing papers, bibliometrics, h-index, author publications, institution research output, journal data, ISSN lookup, DOI lookup, ORCID lookup, ROR lookup, open access papers, literature review automation, systematic review search, Google Scholar alternative, Scopus alternative, Web of Science alternative, Microsoft Academic Graph replacement.

### Terms and data use

OpenAlex releases its data under the CC0 public domain dedication, with no personal use only carve out: you may store, combine, publish and resell the rows this actor returns. OpenAlex asks that you cite it when you use the data in research. Paid OpenAlex plans pay for API usage and services, not for the data. This actor is not affiliated with or endorsed by OpenAlex or OurResearch.

# Actor input Schema

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

Works search returns research papers, preprints, books, datasets and dissertations by keyword and filters. Citing works returns the papers that cite the work IDs you give. Authors, sources (journals, repositories, conferences), institutions, topics, publishers and funders search those OpenAlex profiles, which also give the IDs the works filters take. Lookup by ID or DOI fetches single records by OpenAlex ID, DOI, PMID, ORCID, ROR or ISSN, which are free on OpenAlex.

## `searchQueries` (type: `array`):

Works, authors, sources, institutions, topics, publishers and funders search. One search per line; each is its own lookup. Supports AND, OR, NOT and "quoted phrases", such as climate change AND kelp, Jennifer Doudna, Nature or MIT.

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

Works search only. Which part of each work the search reads.

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

Order of the results. Newest and oldest apply to works; most works and name apply to profiles.

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

Works and citing works. Earliest publication date, YYYY-MM-DD.

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

Works and citing works. Latest publication date, YYYY-MM-DD.

## `workTypes` (type: `array`):

Works and citing works. Keep only these types, such as article, review, preprint or dataset.

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

Works, citing works and sources.

## `oaStatuses` (type: `array`):

Works and citing works. Keep only these OpenAlex open access statuses.

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

Works and citing works. Two letter ISO 639-1 code, such as en, de or es.

## `minCitations` (type: `integer`):

Works, citing works and every profile search. Keep only records cited at least this many times.

## `excludeRetracted` (type: `boolean`):

Works and citing works.

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

Works and citing works. OpenAlex keeps a curated core and a larger expansion corpus.

## `citedWorkIds` (type: `array`):

Citing works only. OpenAlex work IDs (from a works search or lookup); the run returns the works that cite any of them. Up to 100.

## `authorIds` (type: `array`):

Works and citing works: keep works by these authors. OpenAlex author IDs from the Authors search, up to 100.

## `institutionIds` (type: `array`):

Works and citing works: works with an author at these institutions. Authors: authors last known at them. OpenAlex institution IDs from the Institutions search, such as I63966007 for MIT.

## `sourceIds` (type: `array`):

Works and citing works: works published in these journals or repositories. OpenAlex source IDs, such as S137773608 for Nature.

## `topicIds` (type: `array`):

Works and citing works: works on these topics. OpenAlex topic IDs from the Topics search.

## `funderIds` (type: `array`):

Works and citing works: works funded by these funders, such as F4320332161 for the NIH.

## `publisherIds` (type: `array`):

Sources only: journals and other sources hosted by these publishers, such as P4310319965 for Springer Nature.

## `countryCodes` (type: `array`):

Works (author institutions), authors (last known institution), sources, institutions, publishers and funders. Two letter ISO 3166 codes such as US, GB or DE.

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

Any list mode. Raw OpenAlex filter added to the ones above, such as publication_year:2020-2024,has_fulltext:true or summary_stats.h_index:>40. Use | for OR, ! for NOT, > and < on numbers.

## `identifiers` (type: `array`):

Lookup by ID only. One per line: OpenAlex IDs (W, A, S, I, T, P, F), DOIs, PMIDs as pmid:29456894, ORCIDs, ROR URLs or ISSNs. Up to 500 per run.

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

Lookup by ID only. Auto reads the type from the identifier; set Funders to look a ROR up as a funder rather than an institution.

## `includeAbstract` (type: `boolean`):

Works: rebuild the plain text abstract from the OpenAlex abstract index, where the publisher made one available.

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

Stops after this many rows. Each page of up to 100 rows is one OpenAlex API call. Without a key a lookup reads at most 10,000 results.

## `requestsPerMinute` (type: `integer`):

Pacing ceiling. OpenAlex allows 10 requests a second without a key and 30 with a free key.

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

Optional. Your own free OpenAlex API key, from openalex.org, Settings, API key. Without one the run uses the small keyless budget ($0.10 a day shared per IP address) and basic paging up to 10,000 results; with one you get your own $1 a day and cursor paging. Sent only to api.openalex.org in the Authorization header and never logged.

## Actor input object example

```json
{
  "mode": "works",
  "searchQueries": [
    "CRISPR gene editing"
  ],
  "searchScope": "all",
  "sort": "default",
  "openAccess": "any",
  "excludeRetracted": false,
  "corpus": "core",
  "entityType": "auto",
  "includeAbstract": true,
  "maxResults": 100,
  "requestsPerMinute": 300
}
```

# Actor output Schema

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

One row per record returned for the chosen mode.

# 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 = {
    "searchQueries": [
        "CRISPR gene editing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/research-papers-authors-citations-api").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 = { "searchQueries": ["CRISPR gene editing"] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/research-papers-authors-citations-api").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 '{
  "searchQueries": [
    "CRISPR gene editing"
  ]
}' |
apify call nabeelbaghoor/research-papers-authors-citations-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/research-papers-authors-citations-api"
        }
    }
}
```

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/F8PxffH8tUxHcX167/builds/lcJrDSRibyaI5ELUt/openapi.json
