Next free-source hunt
We check for new free data every weekday.
Datasets / Research & Grey Literature
info.arxiv.org/

arXiv API

FreeTerms restrict useauth: noneCC0-1.0#research-grey-literature#papers#preprints#historical-data✓ verified Nov 3, 2026

⚠️ E-prints need the copyright holder's permission to redistribute

arXiv's Terms of Use for arXiv APIs make the descriptive metadata CC0, but say this about the e-prints themselves (the second line is from their list of things you must not do):

“The redistribution of e-prints requires permission from the copyright holder, which may be the author(s) or publisher.”
“Store and serve arXiv e-prints (PDFs, source files, or other content) from your servers, unless you have the permission of the copyright holder or are permitted to do so by the license with which the e-print was submitted.”

Source: Terms of Use for arXiv APIs (checked Nov 3, 2026). This isn't legal advice.

Catalog entries with openly reusable metadata about papers, including preprints, include:

Each source has its own terms; read its licence note before you use it.

arXiv API

arXiv's public API returns search results and metadata for arXiv e-prints as an Atom XML feed: titles, abstracts, authors, categories, identifiers, dates and links to each abstract page and PDF. Queries can target fields with prefixes such as ti (title), au (author), abs (abstract) and cat (category), be sorted by date and paged; no key is needed. arXiv also offers OAI-PMH, RSS feeds and bulk data downloads under the same API terms.

Required Attribution:

arXiv asks API users to show: "Thank you to arXiv for use of its open access interoperability."

Coverage

E-prints posted to arXiv across its subject categories, for example q-fin (quantitative finance) and econ (economics). A query returns at most 2,000 results per call and 30,000 in total. Publication delay: Not stated.

Verdict

Use it to follow new preprints in a field, for example quantitative finance or economics, and to build discovery tools that link back to arXiv. The descriptive metadata is CC0, but the e-prints stay under their authors' or publishers' copyright: arXiv's API terms say not to store and serve e-prints from your own servers unless the copyright holder or the e-print's licence permits it, and to direct users to arXiv.org for the content. Keep to one request every three seconds on a single connection, and do not brand a project with arXiv's names in a way that implies its endorsement.

Get the free weekly email

Free weekly email of newly verified free data. Unsubscribe by emailing us.

Use in your agent

Load recent arXiv preprints in a category into pandas and Parquet. Checked against the provider's documentation on Nov 3, 2026.

Raw skill file (/skills/arxiv-api.md)Also in our MCP server: call get_ingestion_skill with {"slug": "arxiv-api"}.

Access

  • No key or account.
  • Endpoint https://export.arxiv.org/api/query with search_query, start, max_results, sortBy and sortOrder.

Request

bash
curl 'https://export.arxiv.org/api/query?search_query=cat:q-fin.TR&start=0&max_results=100&sortBy=submittedDate&sortOrder=descending'

Format

Atom 1.0 XML feed: opensearch totalResults, startIndex and itemsPerPage, then one entry per e-print with id (abstract URL), title, summary, published, updated, author names, arxiv:primary_category, category terms and links (abstract page and PDF).

Load into pandas and Parquet

Needs Python 3 with requests, pandas and pyarrow.

python
"""arXiv API (Atom feed) -> pandas -> Parquet. No key; at most one request every three seconds."""
import xml.etree.ElementTree as ET
import requests
import pandas as pd

NS = {"a": "http://www.w3.org/2005/Atom", "arxiv": "http://arxiv.org/schemas/atom"}
params = {"search_query": "cat:q-fin.TR", "start": 0, "max_results": 100,
          "sortBy": "submittedDate", "sortOrder": "descending"}
r = requests.get("https://export.arxiv.org/api/query", params=params, timeout=60)
r.raise_for_status()
root = ET.fromstring(r.content)
rows = []
for e in root.findall("a:entry", NS):
    rows.append({
        "arxiv_id": e.findtext("a:id", namespaces=NS).rsplit("/abs/", 1)[-1],
        "title": " ".join(e.findtext("a:title", namespaces=NS).split()),
        "published": e.findtext("a:published", namespaces=NS),
        "primary_category": e.find("arxiv:primary_category", NS).get("term"),
        "authors": "; ".join(a.findtext("a:name", namespaces=NS) for a in e.findall("a:author", NS)),
        "abs_url": e.findtext("a:id", namespaces=NS),
    })
df = pd.DataFrame(rows)
df.to_parquet("arxiv_qfin_tr.parquet", index=False)
total = root.findtext("{http://a9.com/-/spec/opensearch/1.1/}totalResults")
print(len(df), "q-fin.TR entries of", total, "; newest:", df["published"].max())

Run by us on 2026-11-03 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 100 q-fin.TR entries of 2453 ; newest: 2026-11-01T11:08:08Z

Limits

  • No more than one request every three seconds, one connection at a time, across all your machines.
  • At most 2,000 results per call and 30,000 per query; larger requests return HTTP 400.

Quirks

  • Titles and abstracts contain line breaks and repeated spaces; normalise whitespace.
  • The entry id is the abstract URL; the arXiv identifier is the part after /abs/ and includes the version (for example v1).

Terms and attribution

  • Descriptive metadata is CC0; e-prints keep their authors' or publishers' copyright and should not be stored and served from your servers without permission or a permitting licence.
  • Direct users to arXiv.org for e-print content, and do not imply arXiv's endorsement.

Sources

Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer