Zenodo Scraper — Research Datasets, Papers & Software
Pricing
from $1.50 / 1,000 results
Zenodo Scraper — Research Datasets, Papers & Software
Scrape Zenodo by keyword, record ID, or community. Extract title, DOI, authors, description, type, license, downloads, views & files. No API key, no login. Ideal for researchers, data scientists, and academic analysts.
Zenodo Scraper — Research Datasets, Papers, Software & More
Scrape Zenodo's open research repository by keyword, record ID, or community — no API key, no login. Extract full metadata, citations, download stats, and file links for any record type.
What does Zenodo Scraper do?
Zenodo Scraper connects directly to Zenodo's public REST API (https://zenodo.org/api/records) to collect structured data about research outputs — datasets, publications, software packages, images, videos, and more. It supports three modes of operation: keyword search across the full Zenodo index (210,000+ records for popular topics), bulk record fetching by ID, and community-scoped searches. The actor paginates automatically through results using Zenodo's cursor-based links.next mechanism, delivering up to 10,000 records per run without any authentication. Each record returns 16 fields including DOI, authors, stripped-HTML description, resource type, license identifier, access rights, download/view statistics, and direct file download URLs. Resource type filtering (dataset, publication, software, etc.) is available as an input parameter.
Who is it for?
- Academic researchers building literature reviews or meta-analyses across disciplines
- Data scientists sourcing open datasets for machine learning and training pipelines
- Research librarians cataloguing open-access outputs and tracking citation impact
- Science journalists monitoring newly published findings on a topic
- Open-data engineers building pipelines that ingest peer-reviewed datasets automatically
Use cases
- Download all open datasets tagged "climate change" with their file URLs and citation metadata
- Monitor weekly uploads in a Zenodo community (e.g., biodiversity, neuroscience) for new content
- Build a curated database of open-source research software with license and download statistics
- Cross-reference DOIs from a reading list with Zenodo metadata (views, downloads, version history)
- Export author lists from a keyword search to identify top contributors in a research niche
Why use Zenodo Scraper?
- Keyless and loginless — Zenodo's public REST API requires zero credentials; runs out of the box
- 16 output fields — id, DOI, title, creators, description, publication date, resource type, keywords, license, access right, download URL, views, downloads, communities, record URL, version
- Bulk pagination — chains Zenodo's
links.nextcursor to retrieve hundreds or thousands of records per run - Type filtering — narrow results to datasets, publications, software, images, videos, lessons, or other types
- Clean output — HTML stripped from descriptions, authors joined as semicolon-delimited strings, JSON-ready arrays
- Export ready — one-click CSV / JSON / Excel / JSONL via Apify dataset export; pay-per-result pricing
What data can you extract?
Every record returns the following fields:
| Field | Type | Description |
|---|---|---|
id | string | Zenodo internal record ID |
doi | string | Digital Object Identifier (e.g. 10.5281/zenodo.1234567) |
title | string | Title of the record |
creators | string | Semicolon-delimited list of author/creator names |
description | string | Plain-text description (HTML stripped) |
publicationDate | string | Publication date (ISO 8601, e.g. 2024-03-15) |
resourceType | string | Type: dataset, publication, software, image, video, lesson, other |
keywords | string | Comma-delimited keyword list |
license | string | License identifier (e.g. cc-by-4.0, mit) |
accessRight | string | open, embargoed, restricted, or closed |
downloadUrl | string | Direct URL to primary file or archive download |
views | number | Total view count |
downloads | number | Total download count |
communities | string | Comma-delimited Zenodo community slugs |
recordUrl | string | Canonical HTML URL to the record page |
version | string | Version string if specified by uploader |
Example output record:
{"id": "3715409","doi": "10.5281/zenodo.3715409","title": "Global Surface Temperature Dataset 1880–2023","creators": "Hansen, James; Ruedy, Reto; Sato, Makiko","description": "Monthly global surface temperature anomalies relative to 1951-1980 baseline. Covers land and ocean combined. Updated annually from NASA GISS records.","publicationDate": "2024-01-12","resourceType": "dataset","keywords": "climate, temperature, global warming, surface temperature","license": "cc-by-4.0","accessRight": "open","downloadUrl": "https://zenodo.org/api/records/3715409/files-archive","views": 12430,"downloads": 8712,"communities": "copernicus-climate","recordUrl": "https://zenodo.org/records/3715409","version": "v2.1"}
How to use
Option A — Keyword search (records mode)
Search across all Zenodo records by keyword or Zenodo query syntax.
- Open the actor and set Mode to
Records (Keyword Search) - Enter your Search Query (e.g.
"machine learning" dataset) - Optionally set Resource Type Filter (e.g.
dataset) - Set Max Results (e.g.
500) - Click Run
Input JSON:
{"mode": "records","query": "machine learning dataset","resourceType": "dataset","maxResults": 500}
Option B — Fetch by record IDs (recordDetail mode)
Fetch specific records when you already know the Zenodo record IDs.
- Set Mode to
Record Detail (by ID) - Add one or more Record IDs (e.g.
3715409,10580891) - Click Run
Input JSON:
{"mode": "recordDetail","ids": ["3715409", "10580891", "7025386"]}
Option C — Community records (communityRecords mode)
Scrape all records from a specific Zenodo community.
- Set Mode to
Community Records - Enter the Community Slug (e.g.
biodiversity,zenodo) - Set a Search Query to further filter within the community (optional)
- Click Run
Input JSON:
{"mode": "communityRecords","community": "biodiversity","query": "species occurrence","maxResults": 300}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | records | records, recordDetail, or communityRecords |
query | string | — | Keyword search query (supports Zenodo query syntax) |
resourceType | string | — | Filter: dataset, publication, software, image, video, lesson, other |
ids | array | — | Record IDs to fetch (for recordDetail mode) |
community | string | — | Community slug (for communityRecords mode) |
maxResults | integer | 200 | Maximum records to return (1–10000) |
proxy | object | auto | Apify proxy configuration |
Full input example:
{"mode": "records","query": "climate change","resourceType": "dataset","maxResults": 1000,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["DATACENTER"]}}
Output example
{"id": "10580891","doi": "10.5281/zenodo.10580891","title": "Microbiome Diversity Dataset — Amazon Rainforest Soil Samples 2022","creators": "Silva, Maria; Dos Santos, Pedro; Oliveira, Carla","description": "16S rRNA amplicon sequencing data from 847 soil samples collected across 12 Amazon biomes. Includes OTU tables, taxonomy assignments, and environmental metadata. Sequenced on Illumina MiSeq 2x250bp.","publicationDate": "2024-02-01","resourceType": "dataset","keywords": "microbiome, amazon, soil, 16S rRNA, biodiversity","license": "cc-by-4.0","accessRight": "open","downloadUrl": "https://zenodo.org/api/records/10580891/files/sequences.tar.gz/content","views": 3241,"downloads": 1892,"communities": "biodiversity, open-science","recordUrl": "https://zenodo.org/records/10580891","version": "1.0"}
Tips for best results
- Use Zenodo query syntax — combine terms with
AND,OR,NOT; quote phrases; filter bycreators.name:Hansen - Combine query + resourceType —
query: "neural network" + resourceType: softwarereturns very targeted results - Set realistic maxResults — 200–500 is enough for most research workflows; 10,000 is the ceiling
- Use communityRecords for niche domains — communities like
biodiversity,astronomy,linguisticsare curated and high-quality - Check accessRight — filter downstream for
openrecords if you need direct file downloads - Download URLs — the
downloadUrlfield points to the primary file; some records have multiple files, use Zenodo's files API for the full list - Sorted by bestmatch — results are ranked by relevance; for chronological order, use Zenodo's
sort=mostrecentquery param via the API directly - Rate limits — Zenodo applies soft rate limits; the actor includes automatic back-off for 429 responses
- Empty results — if a community search returns zero results, the community slug may not accept the
communitiesfilter; fall back torecordsmode with a topic query
Integrations
Connect your Zenodo data to 1,500+ tools via Apify integrations:
- Google Sheets — auto-sync scraped records to a spreadsheet for collaborative annotation
- Slack — get notified when new records matching your query are published
- Zapier / Make — route records to Airtable, Notion, HubSpot, or any SaaS tool
- Webhooks — POST results to your own API endpoint in real time
- Schedule — run weekly to monitor a community or keyword for new publications
- Apify API — call programmatically from Python, Node.js, or any language
API usage
cURL:
curl -X POST "https://api.apify.com/v2/acts/logiover~zenodo-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"records","query":"climate change","resourceType":"dataset","maxResults":200}'
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('logiover/zenodo-scraper').call({mode: 'records',query: 'climate change',resourceType: 'dataset',maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("logiover/zenodo-scraper").call(run_input={"mode": "records","query": "climate change","resourceType": "dataset","maxResults": 200,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Use with AI agents (MCP)
Zenodo Scraper is available as an MCP (Model Context Protocol) tool, so you can drive it directly from AI agents like Claude or GPT. Example prompt: "Use Zenodo Scraper to find the top 100 open-access machine learning datasets published in 2023, and return their titles, DOIs, and download counts." The actor returns structured JSON that AI agents can parse, filter, and summarize without writing any scraping code.
FAQ
Does this require an API key or account?
No. Zenodo's search and record API is fully public. The actor works without any credentials.
What types of records does it cover?
All Zenodo record types: datasets, publications (articles, preprints, reports, theses), software, images, videos, lessons, and "other" types.
How many records can I get per run?
Up to 10,000 per run. For broader coverage, run multiple queries with different keywords or date ranges.
Why are some results returning zero records?
Zero results usually mean your query has no matches, or the community slug is incorrect. Try simplifying the query or removing the resourceType filter. Check the community slug at zenodo.org/communities/<slug>.
Some fields are empty or null — is that normal?
Yes. Not all records provide all metadata. Keywords, version, communities, and license are optional fields that some uploaders omit.
Can I export to CSV or Excel?
Yes. After the run, click Export in the dataset view and choose CSV, Excel, JSONL, or XML.
How fast does it run?
Typically 200 records in 30–60 seconds, 1,000 records in 3–5 minutes. Speed depends on Zenodo API response times and proxy latency.
Is there a rate limit on the Zenodo API?
Zenodo applies soft rate limits (HTTP 429). The actor handles these automatically with exponential back-off.
How often is Zenodo updated?
Zenodo ingests new records continuously. Hundreds of new records are published daily. The sort=bestmatch default returns the most relevant results; use sort=mostrecent for the latest uploads.
What is the pagination limit?
Zenodo's API paginates 25 records per page with no hard cap on page count (up to Zenodo's index depth). The actor chains pages automatically via links.next.
Can I filter by date range?
Yes, via Zenodo's query syntax: publication_date:[2023-01-01 TO 2024-01-01] in the query field.
What communities are available?
Search communities at zenodo.org/communities. Popular ones include zenodo, biodiversity, openaireplus, astronomy, nlp, covid-19.
Is it legal?
Zenodo is an open-access research repository operated by CERN and funded by the European Commission. All metadata is publicly available under open licenses, and the Zenodo API is provided for programmatic access. This actor only accesses data that Zenodo makes publicly available without authentication. Usage should comply with Zenodo's Terms of Use (zenodo.org/terms). Respect rate limits, do not use the data for spam, and attribute records correctly using their DOI when citing in publications.
Related scrapers
- arXiv Scraper — Extract preprints and papers from arXiv by category or keyword
- OpenAlex Scraper — Scrape the OpenAlex academic graph (200M+ works, authors, institutions)
- GitHub Activity Scraper — Track open-source research software by stars, commits, and contributors
- CVE Advisory Scraper — Export CVE vulnerability data for research and security analysis