# arXiv Paper Search (`plainpipe/arxiv-paper-search`) Actor

Search arXiv by keyword, author, category and date (official API): title, authors, abstract, categories, DOI, PDF link. Use when you need paper metadata.

- **URL**: https://apify.com/plainpipe/arxiv-paper-search.md
- **Developed by:** [Plain Pipe](https://apify.com/plainpipe) (community)
- **Categories:** Developer tools, Integrations
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 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?

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

## arXiv Paper Search

Search arXiv by keyword, author, category and date via the official API. One row per paper: title, authors, abstract, categories, DOI and PDF link.

### What it does

This Actor sends your search to the official [arXiv API](https://info.arxiv.org/help/api/user-manual.html) (export.arxiv.org) and returns the metadata of each matching paper as one dataset row. You get clean JSON, CSV or Excel without writing an Atom feed parser, handling paging, or pacing requests yourself.

It only reads metadata that arXiv publishes through its API. It does not fetch PDFs or source files; each row gives the PDF link so you can open the paper yourself. Data source: arXiv, used under the [arXiv API Terms of Use](https://info.arxiv.org/help/api/tou.html).

### Use cases

- Build a reading list for a literature review: every 2024 paper on "graph neural networks" in cs.LG, with abstracts.
- Track new submissions in a field each morning (sort by submitted date, schedule the Actor daily).
- List everything an author has posted to arXiv, with DOIs and journal references where given.
- Load titles and abstracts into a vector database or retrieval pipeline for semantic search.
- Count papers per category or per month for a research-trend chart.

### How to use it

1. Enter **Search terms** (for example `large language models`), or an **Author**, or a **Category**. At least one is needed.
2. Optionally narrow by submission date (**Submitted from** / **Submitted until**) and pick a **Sort by** order.
3. Set **Max results** (start with 10 to try it).
4. Click **Start**. Results land in the dataset; export them as JSON, CSV or Excel, or read them through the Apify API.

### Input

| Field | What it is | Default | Example |
|---|---|---|---|
| `searchQuery` | Words to match in any field. Every word must match; quote a phrase. arXiv field syntax (`ti:`, `au:`, `abs:`, `cat:`, `AND`/`OR`/`ANDNOT`) is passed through unchanged. | empty | `large language models`, `ti:transformer AND abs:vision` |
| `category` | arXiv category code. | empty (all) | `cs.AI`, `cs.CL`, `math.CO`, `astro-ph` |
| `author` | Author name; a full name is matched as a phrase. | empty | `Hinton`, `Yann LeCun` |
| `sortBy` | `relevance`, `lastUpdatedDate` or `submittedDate` (date sorts are newest first). | `relevance` | `submittedDate` |
| `dateFrom` | First-submission date, inclusive, `YYYY-MM-DD`. | empty | `2024-01-01` |
| `dateTo` | First-submission date, inclusive, `YYYY-MM-DD`. | empty | `2024-06-30` |
| `maxItems` | Stop after this many papers (at most 30,000). | `100` | `500` |

Example input:

```json
{ "searchQuery": "graph neural networks", "category": "cs.LG", "sortBy": "submittedDate", "dateFrom": "2024-01-01", "dateTo": "2024-06-30", "maxItems": 50 }
```

Invalid dates, a reversed date range, or a malformed category code fail the run before any request is made, so nothing is charged. The error message says which field to fix.

### Output

One row per paper. Example from a real run:

```json
{
  "arxivId": "2501.05032",
  "version": 2,
  "title": "Enhancing Human-Like Responses in Large Language Models",
  "authors": ["Ethem Yağız Çalık", "Talha Rüzgar Akkuş"],
  "abstract": "This paper explores the advancements in making large language models (LLMs) more human-like. ...",
  "primaryCategory": "cs.CL",
  "categories": ["cs.CL", "cs.AI"],
  "published": "2025-01-09T07:44:06Z",
  "updated": "2026-02-01T13:32:03Z",
  "pdfUrl": "https://arxiv.org/pdf/2501.05032v2",
  "absUrl": "https://arxiv.org/abs/2501.05032v2",
  "doi": null,
  "journalRef": "Presented at the AAAI-26 Workshop on Personalization in the Era of Large Foundation Models (PerFM), 2026",
  "comment": "Presented at the AAAI-26 Workshop on Personalization in the Era of Large Foundation Models (PerFM), Singapore, January 2026"
}
```

| Field | Meaning |
|---|---|
| `arxivId` | arXiv identifier without version, e.g. `2501.05032` |
| `version` | Latest version number |
| `title`, `abstract` | Paper title and abstract, whitespace normalised |
| `authors` | Author names in byline order |
| `primaryCategory`, `categories` | Primary category and all cross-listed categories |
| `published` / `updated` | First-version submission time / latest-version time (UTC) |
| `absUrl`, `pdfUrl` | Abstract page and PDF links on arxiv.org |
| `doi`, `journalRef`, `comment` | As given by the submitters; `null` when absent |

### Pricing

Pay per result: **$1.00 per 1,000 results** ($0.001 per result). You only pay for results the Actor returns. Set a maximum total charge on the run to cap your spend.

### Limits

- Follows the arXiv API terms of use: at most one request every 3 seconds and at most 100 papers per request. Large runs are slow by design: about 2,000 papers per minute at best.
- arXiv serves at most 30,000 results for one search; narrow the query, category or date range for more.
- Relevance ranking and word matching are done by arXiv, not by this Actor. Very broad terms match many loosely related papers.
- The date filter uses the first-submission date. Filtering on the last-updated date is not offered.
- Author matching is done by arXiv on the name as submitted; spellings with or without accents may give different results.
- If the arXiv API is down or keeps returning errors after retries, the run fails and you are not charged for rows that were never produced.

### FAQ

**How much does a run cost?** $0.001 per paper returned, plus nothing for failed or empty runs. 1,000 papers cost $1.00. Use **Max results** to cap it.

**Why did my run fail with "No arXiv papers match this search"?** arXiv found nothing for that combination. Use fewer or broader words, check the author spelling, or remove the category or date filter. A failed run pushes no rows and costs nothing per result.

**Can I get the full PDF text?** No. The Actor returns metadata and the `pdfUrl` link only, as the arXiv API offers it.

**Which formats can I export?** JSON, CSV, Excel, XML and HTML table from the dataset tab, or any of them through the Apify API.

**Can I run it on a schedule or from my own code?** Yes. Create a schedule in Apify Console (for example daily with `sortBy: submittedDate`), or start runs and read results through the Apify API, webhooks or the Apify client libraries.

### Legal and data

This Actor processes only what you give it or public, non-personal technical data. It does not log in anywhere, does not collect personal data, and does not bypass paywalls, CAPTCHAs or access controls. You are responsible for having the right to process the inputs you provide.

It uses the official arXiv API under its terms of use (https://info.arxiv.org/help/api/tou.html) and returns only metadata. Thank you to arXiv for use of its open access interoperability. Author names are the bylines arXiv publishes with each paper. This Actor is not affiliated with or endorsed by arXiv.

### Support

Open an issue on the Issues tab. Issues are answered within 14 days.

**Use this when:** you need arXiv paper metadata (titles, authors, abstracts, categories, DOI) for a topic, author or category, for a literature review or a new-paper watch.

### Why this one

- $1.00 per 1,000 results: one result per paper; runs that fail on bad input cost nothing.
- Each row includes the arXiv ID without version plus the latest version number, primary and cross-listed categories, first-submission and last-update times, DOI, journal reference and the submitters' comment.
- Reads only the official arXiv API with arXiv field syntax (`ti:`, `au:`, `abs:`, `cat:`) passed through: no browser and no proxy needed; the 10-paper prefill run finishes in a few seconds.
- The prefilled input is test-run daily.

Built and maintained by Plain Pipe.

# Actor input Schema

## `searchQuery` (type: `string`):

Words to look for in any field (title, abstract, authors, comments). Every word must match; put a phrase in double quotes. Example: large language models, or "diffusion model". arXiv field syntax is passed through, for example ti:transformer AND abs:vision. Optional if you set an author or category.

## `category` (type: `string`):

Optional arXiv category code. Examples: cs.AI, cs.CL, math.CO, astro-ph. Leave empty for all categories.

## `author` (type: `string`):

Optional author name as printed on the paper. Examples: Hinton, or Yann LeCun (a full name is matched as a phrase).

## `sortBy` (type: `string`):

Order of results. Default: Relevance. Use Submitted (newest first) to track new papers in a field.

## `dateFrom` (type: `string`):

Optional. Only papers first submitted on or after this date, format YYYY-MM-DD. Example: 2024-01-01.

## `dateTo` (type: `string`):

Optional. Only papers first submitted on or before this date, format YYYY-MM-DD. Example: 2024-06-30.

## `maxItems` (type: `integer`):

Stop after this many papers. Default 100, maximum 30,000 (the arXiv API limit per search). Example: 500. You are charged per result.

## Actor input object example

```json
{
  "searchQuery": "large language models",
  "sortBy": "relevance",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "large language models",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainpipe/arxiv-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 = {
    "searchQuery": "large language models",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("plainpipe/arxiv-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 '{
  "searchQuery": "large language models",
  "maxItems": 10
}' |
apify call plainpipe/arxiv-paper-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainpipe/arxiv-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/nHmwbRICfpVMcPba0/builds/Y1fbbd2Nt4YZQtxho/openapi.json
