How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
climate temperaturein Search query. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Search DataCite for research datasets by topic, publisher, funder, publication year and license. The Actor returns one row per DOI with title, creators, rights, related identifiers and DataCite citation counts.
Good for
- Find datasets on a topic from 2020 to 2025 and export DOIs and titles.
- Find datasets from one repository (for example Zenodo or Dryad) or one funder.
- Check which datasets have an open license, such as
cc-by-4.0.
Not a good fit
- It does not download dataset files. It returns metadata and links.
- It returns at most 500 records per run, not the whole DataCite catalog.
- DataCite only. Crossref DOIs (most journal articles) are not included.
Who uses it
Researchers
Find datasets on a topic for a study.
Research data managers
List datasets from one repository or funder.
Open science teams
Check which datasets have an open license.
Price
Prices will be shown after release.
Questions
Does it download the data files?
No. It returns metadata and links only.
Why do I see the same title twice?
Each version can have its own DOI. Each DOI is a row.
Does it include journal articles?
No. Most journal articles use Crossref, not DataCite.
Do I need a DataCite key?
No. It uses the public DataCite REST API.
Does license show every license?
No. license is the first entry in rights. A record can have more, and the license filter can match a later one. Check rights for the full list. An empty rights list means the reuse terms are unknown, not that reuse is allowed.
Is citationCount complete?
No. It is the number DataCite reports from its own links. Other citation indexes can show more.
How fresh is the data?
Each run reads DataCite live. sourceUpdatedAt shows when DataCite last changed the record.
Details
Step by step on Apify
- Open the Input tab.
- Keep the example in Search query:
climate temperature. - Keep Resource type =
Dataset, years 2020–2025 and Maximum results = 25. - Click Start.
- Open the Research datasets view in the Output tab and check the first DOI and title.
Tips for better results
- Filter by publisher, like Zenodo or Dryad, to see one repository.
- Check the rights list, not only the first license.
- One run gives up to 500 records. Split big topics by year.
Limits and good to know
- 1–500 rows per run, 50 rows per source page, at most 12 pages
- Each request has 15 seconds. Temporary 429 and 5xx errors get up to three attempts. All source work stops after 150 seconds
- Runs use 256 MB and a 300-second timeout. A larger timeout does not add more source work
- Rows are saved one source page at a time. If the run restarts (for example after Apify moves it to another server, or after a resurrect), it first reads the DOIs already in its Dataset and skips them, so a row is not saved twice and is not charged again. Tested on Apify with a run restarted through the API in the middle of a page and with a resurrected finished run; the platform's own move to another server is covered by automated tests only
- The source limits count across all processes of a run: 150 seconds of source time, 18 requests and 6 MiB of responses in total. A restarted or manually resurrected run continues with the requests and time it has already used, so it can end
partialwithSOURCE_BUDGET_EXHAUSTEDorPAGINATION_BUDGETsooner than a new run would - While a move to another server is in progress, the summary shows
MIGRATING. The run waits at most 90 seconds in total (shared by all its processes) to be restarted; if it is not, it ends as Failed withMIGRATION_FAILEDand keeps the saved rows - A run uses at most 3 processes (the first start plus two restarts). A 4th start stops at once with
RESTART_LIMIT, without requests, new rows or row charges; the saved rows are kept - A resurrected finished run repeats its last summary and saves and charges no new rows; Apify still charges the start fee for the new start. This includes a run stopped by your spending limit (
partialCHARGE_LIMIT): a resurrect does not continue it, even with a higher limit. To get more records, start a new run with a higher limit. A run stopped before it finished (aborted, or ended withMIGRATION_FAILED) continues where it stopped when resurrected, within the shared limits above
Recent updates
Version 0.1 · 13 October 2026
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. Some values are changed for privacy. In Excel or CSV each field is a column.
{
"doi": "10.5281/zenodo.4006472",
"title": "FYRE Climate: Temperature",
"creators": [{ "name": "Author, Example", "nameType": null }],
"publisher": "Zenodo",
"year": 2020,
"resourceType": "Dataset",
"resourceTypeDetail": null,
"subjects": [{ "subject": "climate" }],
"license": "cc-by-sa-4.0",
"rights": [{ "rightsIdentifier": "cc-by-sa-4.0", "rights": "Creative Commons Attribution Share Alike 4.0 International", "rightsUri": "https://creativecommons.org/licenses/by-sa/4.0/legalcode" }],
"url": "https://zenodo.org/record/4006472",
"doiUrl": "https://doi.org/10.5281/zenodo.4006472",
"citationCount": 3,
"provider": "DataCite",
"sourceUrl": "https://api.datacite.org/dois/10.5281%2Fzenodo.4006472",
"fetchedAt": "2026-10-13T04:16:15.078Z",
"sourceUpdatedAt": "2024-10-06T08:55:31Z",
"metadataLicense": "CC0-1.0"
}Data fields (23)
| Field | Type | Meaning |
|---|---|---|
doi | string | DataCite DOI, for example 10.5281/zenodo.4006472. Unique within one run. |
doiUrl | string | DOI resolver link: https://doi.org/ plus the DOI. |
provider | string | Always DataCite. |
sourceUrl | string | DataCite REST API record for this DOI. |
fetchedAt | string | ISO 8601 UTC time when this Actor read the record. |
metadataLicense | string | License of the metadata, always CC0-1.0. It is not the dataset license. |
title | string | First title as plain text: HTML tags removed (also entity-encoded tags), entities such as & decoded, control characters dropped. Null if blank. Raw titles are in titles. |
publisher | string | Publisher or repository name, for example Zenodo. Null if missing. |
resourceType | string | General resource type, for example Dataset or Software. |
resourceTypeDetail | string | Free-text resource type from the publisher. Null if missing or blank. |
url | string | Landing page of the record at the publisher. Null if missing. |
license | string | First rights identifier, URI or name from rights. Null if no rights. Other licenses can be in rights. |
sourceUpdatedAt | string | ISO 8601 time when DataCite last updated the record. Null if missing. |
year | number | Publication year as an integer. Null if missing. |
citationCount | number | Citation count reported by DataCite. 0 is a real value; null if unknown. Not a full citation census. |
titles | array | All title objects as DataCite returns them; may contain HTML and language tags. |
creators | array | Creator objects with names, name type, identifiers such as ORCID and affiliations. Empty list if missing. |
subjects | array | Subject objects (keywords and classification codes). Empty list if missing. |
rights | array | All rights objects for the dataset: SPDX ID, URI and name. Empty list means unknown reuse rights. |
sizes | array | Size strings as supplied, for example 2 files or 15 MB. Empty list if missing. |
formats | array | Format strings as supplied, for example text/csv. Empty list if missing. |
relatedIdentifiers | array | Links to related works: identifier, type and relation, for example IsCitedBy or IsVersionOf. Empty list if missing. |
fundingReferences | array | Funding objects: funder name, funder ID and award. Empty list if missing. |
Input settings (9)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Search query | query | string | "climate temperature" |
| Resource type | resourceTypeGeneral | string | "Dataset" |
| Sort order | sortBy | string | "relevance" |
| Publisher | publisher | string | |
| Funder | funder | string | |
| Publication year from | yearFrom | integer | 2020 |
| Publication year to | yearTo | integer | 2025 |
| Dataset license | license | string | |
| Maximum results | maxResults | integer | 25 |
