# Research Paper Search (`primeselectai/open-access-research-paper-search`) Actor

Search scholarly works for RAG, literature reviews, and research agents. Get deduplicated open-access records with DOI links, authors, institutions, citation counts, topic signals, stable IDs, and repeatable pagination.

- **URL**: https://apify.com/primeselectai/open-access-research-paper-search.md
- **Developed by:** [Simon Jessen](https://apify.com/primeselectai) (community)
- **Categories:** Automation
- **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.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Open-Access Research Paper Search API

Find trustworthy research records for your AI or analyst workflow in one API run. The Actor returns normalized JSON with stable OpenAlex IDs, DOI links, publication dates, authors, institutions, open-access locations, citation counts, and deduplication keys; configure filters and pagination afterward.

### Outcome

Find deduplicated, citation-ready open-access research records with stable IDs, author and institution context, citation signals, and reproducible pagination for evidence-grounded AI research.

### Use cases

- Use the Actor when you need find deduplicated, citation-ready open-access research records with stable IDs, author and institution context, citation signals, and reproducible pagination for evidence-grounded AI research.
- Build workflows around transforms OpenAlex scholarly metadata into normalized evidence packs with stable OpenAlex and DOI identifiers, open-access locations, author/institution normalization, citation metrics, relevance ranking, duplicate suppression, and optional date-based monitoring.
- Designed for AI product teams, research analysts, systematic-review teams, consultants, and developers building RAG or agent workflows.
- Schedule repeat runs: Teams rerun saved research questions weekly or daily to detect newly indexed papers, changed open-access locations, new citations, and updates to author or institution metadata.
- Feed normalized dataset records into APIs, spreadsheets, databases, automations, or AI/agent workflows.

### Quick start

1. Open the Actor input form.
2. Set the filters or query relevant to your workflow.
3. Start with a small `maxResults` value.
4. Run the Actor and inspect the default dataset before scheduling larger or recurring jobs.

Example input:

```json
{
  "query": "retrieval augmented generation web browsing",
  "fromYear": 2023,
  "toYear": 2026,
  "openAccessOnly": true,
  "maxResults": 10,
  "sort": "cited_by_count:desc"
}
```

### Inputs

- **query** (string, optional) — Natural-language or Boolean search terms matched against OpenAlex work records.
- **fromYear** (integer, optional) — Inclusive lower publication-year filter. This value is retained as run configuration.
- **toYear** (integer, optional) — Inclusive upper publication-year filter. This value is retained as run configuration.
- **openAccessOnly** (boolean, optional) — Request open-access works. This value is retained as run configuration.
- **workTypes** (array, optional) — Optional OpenAlex work types such as article, preprint, review, dataset, book, or dissertation.
- **institutionIds** (array, optional) — Optional OpenAlex institution identifiers used as run configuration.
- **sort** (string, optional) — Preferred product-level ordering, such as relevance, publication date, or cited-by count.
- **maxResults** (integer, optional) — Maximum records requested per API page and run limit.
- **cursor** (string, optional) — OpenAlex cursor for resuming a previous result set.

### Output example

The example below is taken from the latest validated local live-source sample when available; otherwise it is derived from the bundled dataset schema.

```json
{
  "id": "https://openalex.org/W4389984066",
  "doi": "https://doi.org/10.48550/arxiv.2312.10997",
  "title": "Retrieval-Augmented Generation for Large Language Models: A Survey",
  "publicationDate": "2023-12-18",
  "workType": "preprint",
  "authors": [
    {
      "author_position": "first",
      "author": {
        "id": "https://openalex.org/A5102001778",
        "display_name": "Yunfan Gao",
        "orcid": "https://orcid.org/0000-0002-7932-2752"
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Gao, Yunfan",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5001877137",
        "display_name": "Yun Xiong",
        "orcid": "https://orcid.org/0000-0002-8575-5415"
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Xiong, Yun",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5101581913",
        "display_name": "Xinyu Gao",
        "orcid": "https://orcid.org/0000-0001-7654-3800"
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Gao, Xinyu",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5109666673",
        "display_name": "Kangxiang Jia",
        "orcid": "https://orcid.org/0009-0001-0054-5049"
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Jia, Kangxiang",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5104217086",
        "display_name": "Jinliu Pan",
        "orcid": null
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Pan, Jinliu",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5104217087",
        "display_name": "Yuxi Bi",
        "orcid": null
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Bi, Yuxi",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5100647639",
        "display_name": "Yi Dai",
        "orcid": "https://orcid.org/0000-0003-1219-2436"
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Dai, Yi",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": "https://openalex.org/A5101598822",
        "display_name": "Jiawei Sun",
        "orcid": "https://orcid.org/0000-0003-1332-6758"
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Sun, Jiawei",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "middle",
      "author": {
        "id": null,
        "display_name": "Wang, Meng",
        "orcid": null
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
      "raw_author_name": "Wang, Meng",
      "raw_affiliation_strings": [],
      "raw_orcid": null,
      "affiliations": []
    },
    {
      "author_position": "last",
      "author": {
        "id": null,
        "display_name": "Wang, Haofen",
        "orcid": null
      },
      "institutions": [],
      "countries": [],
      "is_corresponding": false,
  "_note": "Example truncated for README"
}
```

### Pricing

Store pricing is configured in Apify. The intended primary paid unit is **normalized research record**. Start with a small result limit while validating your workflow, then scale only when the output and economics fit your use case. The README never hard-codes a price that could drift from the live Store configuration.

### Source and limitations

- Source: OpenAlex API.
- Licence/terms: CC0 1.0 / public-domain dedication for OpenAlex data.
- Reuse condition: OpenAlex states that its data is released under CC0 and may be used commercially, including redistribution and derivative products. This Actor should identify OpenAlex as the upstream source, preserve source URLs and DOI links, and avoid representing OpenAlex or any publisher as endorsing the product. Article abstracts, full text, images, publisher descriptions, logos, and other linked content may have separate copyright or license terms; the Actor returns bibliographic metadata and links by default rather than republishing protected article content.
- Automation condition: Use documented GET requests, respect OpenAlex rate limits and budgets, cap per-request results at the documented maximum, paginate with cursor-based pagination, retry only transient 429/5xx responses with backoff, and expose source errors instead of silently returning empty results. An optional developer API key can be used by the operator through the api\_key query parameter, but no customer key is required.
- OpenAlex metadata quality and coverage can vary by source; expose provenance and retrieval timestamps rather than presenting records as authoritative publisher records.
- Open-access status and license fields are signals, not a blanket license for article text, figures, images, or publisher-hosted pages.
- Anonymous usage is limited; high-volume operation may require an operator-managed OpenAlex API key or paid OpenAlex access, although buyers need no separate key.
- Citation counts and metadata change over time, so buyers should treat outputs as time-stamped snapshots.
- OpenAlex terms, pricing, rate limits, and service availability may change; review the official terms before launch and periodically thereafter.

This Actor does not bypass authentication, rate limits, robots/API policies, licensing conditions, or upstream access controls. Missing upstream values are not invented.

### FAQ

**Does this use the approved source contract?**\
Yes. Runtime requests are restricted to the source contract validated by Market Hunter before build.

**Can I schedule repeat runs?**\
Yes, when the source permits automated access. Use conservative schedules and result limits that respect upstream conditions.

**Why can some fields be empty or null?**\
The upstream source may omit fields for particular records. The Actor preserves missing values rather than fabricating data.

### Troubleshooting

- If a narrow query returns no rows, loosen filters and retry with a small result limit.
- If the upstream source returns a rate-limit or temporary server error, retry later instead of increasing request pressure.
- If authentication or source identity is required, verify the protected credential/identity configured for the Actor.
- If the upstream response schema changes, report the failed run so the deterministic mapping can be updated.

### Related Actors

- Academic Author and Institution Profile Search
- Research Paper Citation Change Monitor
- Open-Access Literature Deduplication and Export
- Scholarly Topic Trend and Venue Analysis

> Store publication remains an explicit manual action. This product is not affiliated with or endorsed by the upstream source unless the Store listing explicitly states otherwise.

# Actor input Schema

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

Natural-language or Boolean search terms matched against OpenAlex work records.

## `fromYear` (type: `integer`):

Inclusive lower publication-year filter. This value is retained as run configuration.

## `toYear` (type: `integer`):

Inclusive upper publication-year filter. This value is retained as run configuration.

## `openAccessOnly` (type: `boolean`):

Request open-access works. This value is retained as run configuration.

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

Optional OpenAlex work types such as article, preprint, review, dataset, book, or dissertation.

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

Optional OpenAlex institution identifiers used as run configuration.

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

Preferred product-level ordering, such as relevance, publication date, or cited-by count.

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

Maximum records requested per API page and run limit.

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

OpenAlex cursor for resuming a previous result set.

## Actor input object example

```json
{
  "query": "retrieval augmented generation web browsing",
  "fromYear": 2023,
  "toYear": 2026,
  "openAccessOnly": true,
  "sort": "cited_by_count:desc",
  "maxResults": 10,
  "cursor": "*"
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "query": "retrieval augmented generation web browsing",
    "fromYear": 2023,
    "toYear": 2026,
    "openAccessOnly": true,
    "sort": "cited_by_count:desc",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("primeselectai/open-access-research-paper-search").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 = {
    "query": "retrieval augmented generation web browsing",
    "fromYear": 2023,
    "toYear": 2026,
    "openAccessOnly": True,
    "sort": "cited_by_count:desc",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("primeselectai/open-access-research-paper-search").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 '{
  "query": "retrieval augmented generation web browsing",
  "fromYear": 2023,
  "toYear": 2026,
  "openAccessOnly": true,
  "sort": "cited_by_count:desc",
  "maxResults": 10
}' |
apify call primeselectai/open-access-research-paper-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,primeselectai/open-access-research-paper-search"
        }
    }
}

```

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/bGamuaab4SeWCM7BG/builds/7Vbod5fRBXweJxIfV/openapi.json
