# arXiv Scraper (`anyxsolutions/arxiv-scraper`) Actor

Scrape research papers from arXiv by category, search term, author or paper link: titles, abstracts, authors with affiliations, categories, submission and update dates, DOIs, journal references and PDF links. Filter by date. Clean JSON, no login, no API key, no proxy.

- **URL**: https://apify.com/anyxsolutions/arxiv-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![banner](https://anyx.solutions/banners/arxiv-scraper.png)

## arXiv Scraper

**Research papers from arXiv — by category, search term, author or link — with abstracts, authors, DOIs and PDF links, as clean JSON.**

arXiv is where physics, mathematics, computer science, AI, quantitative biology, finance, statistics
and economics research appears first, often months before journal publication. This Actor turns
arXiv into a dataset: paste a category listing, a search, an author page or a paper link, or type
your own search terms, and get every matching paper with its title, abstract, authors and their
affiliations, primary and cross-listed categories, submission and update dates, version, DOI,
journal reference, author comments, and abstract and PDF links. Filter by submission date and sort
by relevance or date. There is no login, no API key, and no proxy to configure. Built for research
monitoring, literature reviews, AI and ML trend tracking, academic talent scouting, and feeding
papers into search, RAG and summarisation pipelines.

### ⚡ Quick start

```json
{
  "startUrls": [{ "url": "https://arxiv.org/list/cs.AI/new" }],
  "maxItems": 5
}
```

Or search by keyword within a category and date range:

```json
{
  "searchTerms": ["retrieval augmented generation"],
  "category": "cs.CL",
  "dateFrom": "2026-01-01",
  "sortBy": "submittedDate",
  "maxItems": 50
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                                                                                                           |
| -------------------- | ------- | -------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | no       | —                            | arXiv URLs: category listings (`arxiv.org/list/cs.AI/new`, `/recent`, or a month such as `/list/cs.CL/2024-02`), papers (`arxiv.org/abs/<id>` or PDF links), author pages (`arxiv.org/a/<author-id>`), or arXiv search results pages. |
| `maxItems`           | integer | no       | —                            | Maximum number of papers per start URL or search term. The input form starts at 5; leave it empty to get every match (arXiv caps one search at 30,000 papers).                                                                        |
| `searchTerms`        | array   | no       | —                            | Search terms, one search per line. Every word must match; quotes keep a phrase together. arXiv query syntax works too, e.g. `ti:transformer AND au:vaswani`.                                                                          |
| `category`           | string  | no       | —                            | Limit the search terms to an arXiv category such as `cs.CL` or `astro-ph.GA`, or a whole archive such as `math`. With no search terms, returns that category's papers.                                                                |
| `sortBy`             | string  | no       | `"relevance"`                | Sort search-term results by `relevance`, `submittedDate` or `lastUpdatedDate`.                                                                                                                                                        |
| `sortOrder`          | string  | no       | `"descending"`               | `descending` (newest or best first) or `ascending`.                                                                                                                                                                                   |
| `dateFrom`           | string  | no       | —                            | Only search-term or category results submitted on or after this date (`YYYY-MM-DD`).                                                                                                                                                  |
| `dateTo`             | string  | no       | —                            | Only search-term or category results submitted on or before this date (`YYYY-MM-DD`).                                                                                                                                                 |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. arXiv needs no proxy.                                                                                                                                                                                                 |

Add at least one start URL, one search term, or a category. Category listings return the newest
submissions first. `sortBy`, `sortOrder`, `dateFrom` and `dateTo` apply to the search terms and
category; start URLs keep their own order.

**Finding an author page.** Open any paper by the author on arXiv, click their name, and look for
a link to `arxiv.org/a/<author-id>` on their page. Only authors who have claimed their papers on
arXiv have one; for anyone else, search with `au:<surname>` instead.

### 📤 Output

Each paper is one dataset row.

#### Fields

| Field             | Type   | Description                                                                                   |
| ----------------- | ------ | --------------------------------------------------------------------------------------------- |
| `id`              | string | arXiv ID without the version, such as `2610.10726` or `hep-th/9711200`.                       |
| `version`         | number | Version number of the returned paper (`3` for v3).                                            |
| `url`             | string | The paper's abstract page, always pointing to the latest version.                             |
| `title`           | string | Paper title.                                                                                  |
| `summary`         | string | The abstract. LaTeX math is kept as the authors wrote it.                                     |
| `authors`         | array  | Authors in order, each with `name` and `affiliation` (`null` when arXiv has none).            |
| `primaryCategory` | string | Primary arXiv category, such as `cs.CL`.                                                      |
| `categories`      | array  | Every category the paper is listed in, including cross-lists.                                 |
| `publishedAt`     | string | When version 1 was submitted (ISO 8601).                                                      |
| `updatedAt`       | string | When the returned version was submitted (ISO 8601).                                           |
| `doi`             | string | DOI of the published version, when the authors added one.                                     |
| `journalRef`      | string | Journal reference, when the authors added one.                                                |
| `comment`         | string | The authors' comment: page counts, figures, conference or acceptance notes.                   |
| `absUrl`          | string | Abstract page of this exact version.                                                          |
| `pdfUrl`          | string | PDF of this exact version.                                                                    |
| `searchQuery`     | string | The arXiv query that found the paper; `null` for papers added by link or from an author page. |

<details><summary>Example output</summary>

```json
{
  "id": "2610.10726",
  "version": 1,
  "url": "https://arxiv.org/abs/2610.10726",
  "title": "First uGMRT Constraints on Rotation Measure in the Radio-Quiet Seyfert Galaxy NGC 4235",
  "summary": "We present a multi-frequency polarimetric study of the radio-quiet Seyfert galaxy NGC 4235 using the upgraded Giant Metrewave Radio Telescope (uGMRT) …",
  "authors": [
    { "name": "Salmoli Ghosh", "affiliation": "NCRA-TIFR" },
    { "name": "Preeti Kharb", "affiliation": "NCRA-TIFR" },
    {
      "name": "Janhavi Baghel",
      "affiliation": "IDIA and University of Pretoria"
    }
  ],
  "primaryCategory": "astro-ph.GA",
  "categories": ["astro-ph.GA"],
  "publishedAt": "2026-10-07T18:04:58Z",
  "updatedAt": "2026-10-07T18:04:58Z",
  "doi": null,
  "journalRef": null,
  "comment": "Accepted for publication in the Journal of Astrophysics and Astronomy",
  "absUrl": "https://arxiv.org/abs/2610.10726v1",
  "pdfUrl": "https://arxiv.org/pdf/2610.10726v1",
  "searchQuery": "cat:astro-ph.GA"
}
```

</details>

### 💡 Use cases

- **Research monitoring** — a daily feed of new papers in the categories, topics or labs you follow.
- **Literature reviews** — pull every paper matching a query and date range into a spreadsheet or reference manager.
- **AI and ML trend tracking** — count submissions by topic and category over time.
- **Talent and partner scouting** — find active authors and their institutions in a field.
- **RAG and summarisation** — feed abstracts and PDF links into search, embedding or LLM pipelines.

### ❓ FAQ

- **Do I need an API key or an arXiv account?** No. The Actor reads arXiv's public listings and paper records.
- **Do I need a proxy?** No. It runs without one by default.
- **Why is it not faster?** arXiv asks automated tools to wait three seconds between requests, and the Actor keeps to that. Each request returns up to 500 papers, so large searches still finish in minutes.
- **Does it download the PDFs?** No. Every row carries `pdfUrl`, so you can fetch the PDFs you need.
- **Why are `doi`, `journalRef` or affiliations empty?** The authors add these themselves and many do not. Fresh preprints rarely have a DOI or journal reference yet.
- **Can I search one author?** Yes. Use the search term `au:<surname>` (for example `au:hinton`), or the author's arXiv page if they have one.
- **How do I get only the papers from one day or month?** Set `dateFrom` and `dateTo`, or use a monthly listing such as `https://arxiv.org/list/cs.CL/2024-02`.
- **Why did a search return fewer papers than expected?** Every word in a search term must match. Use `OR` between alternatives, or arXiv query syntax for finer control. The log shows arXiv's message when it rejects a query.

### 🔗 More scrapers by Anyx

- [Google Search Scraper](https://apify.com/anyxsolutions/google-search-scraper)
- [Web Content Scraper](https://apify.com/anyxsolutions/web-content-scraper)
- [Substack Scraper](https://apify.com/anyxsolutions/substack-scraper)
- [Reddit Scraper](https://apify.com/anyxsolutions/reddit-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [arxiv.org](https://arxiv.org/)

# Actor input Schema

## `startUrls` (type: `array`):

arXiv URLs, for example a category listing such as https://arxiv.org/list/cs.AI/new, a paper such as https://arxiv.org/abs/1706.03762 (PDF links work too), an author page such as https://arxiv.org/a/lecun_y_1, or an arXiv search results page.

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

Maximum number of papers to return per start URL or search term. Leave empty to get every match (arXiv caps one search at 30,000 papers).

## `searchTerms` (type: `array`):

Words to search arXiv for, one search per line, for example large language models or "graph neural network". Every word must match; quotes keep a phrase together. arXiv query syntax works too, e.g. ti:transformer AND au:vaswani.

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

Limit the search terms to one arXiv category, for example cs.CL or astro-ph.GA, or a whole archive such as math. With no search terms, returns the papers in that category.

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

Order of the search-term results: best match first, or by submission or last-update date.

## `sortOrder` (type: `string`):

Newest or best first (descending), or oldest first (ascending), for the search-term results.

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

Only return search-term or category results first submitted on or after this date, for example 2026-01-01.

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

Only return search-term or category results first submitted on or before this date, for example 2026-06-30.

## `proxyConfiguration` (type: `object`):

Proxy settings. arXiv needs no proxy; the Actor keeps to arXiv's polite request rate.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://arxiv.org/list/cs.AI/new"
    }
  ],
  "maxItems": 5,
  "sortBy": "relevance",
  "sortOrder": "descending",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://arxiv.org/list/cs.AI/new"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/arxiv-scraper").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 = {
    "startUrls": [{ "url": "https://arxiv.org/list/cs.AI/new" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/arxiv-scraper").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 '{
  "startUrls": [
    {
      "url": "https://arxiv.org/list/cs.AI/new"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/arxiv-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyxsolutions/arxiv-scraper"
        }
    }
}
```

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/X2CcR38DPpfAQOVW5/builds/uPaDR4Z0Lxi6hywF2/openapi.json
