Crossref API New Works Feed: New DOIs & Journal Articles
Pricing
$1.00 / 1,000 crossref works
Crossref API New Works Feed: New DOIs & Journal Articles
New journal articles, preprints and datasets registered with Crossref, via the keyless Crossref REST API. Monitor journals (ISSN), publishers, funders or keywords on a schedule; get only new DOIs with title, journal, dates, funders, licences. No author names or abstracts. Unofficial.
Pricing
$1.00 / 1,000 crossref works
Rating
0.0
(0)
Developer
Scott Williams
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
A scheduled feed of newly registered scholarly works (journal articles, conference papers, preprints, book chapters, datasets, reports and more), taken from the keyless Crossref REST API. Crossref is a DOI registration agency for scholarly content.
Each run returns everything registered in the last N days, or between two dates, newest first. You can narrow it to particular journals (ISSN), publishers (member ID or DOI prefix), funders, work types or keywords. On a schedule, each run returns only DOIs you have not received before.
Unofficial. This Actor is not affiliated with or endorsed by Crossref. Records are copied from Crossref as publishers deposited them, and publishers can correct them later. Check
doiUrlbefore you rely on a record.
Use cases
- Journal alerts: get every new article in a list of journals by ISSN, each morning.
- Publisher monitoring: follow everything a publisher registers, by Crossref member ID or DOI prefix.
- Funder reporting: collect new works that acknowledge a funder, using its Open Funder Registry DOI.
- Literature monitoring: a daily keyword feed (for example "perovskite solar") restricted to new journal articles.
- Corrections and retractions: the
updatesTofield shows which DOI a correction or retraction notice updates. - Open-licence collections: keep only works with a Creative Commons licence.
- Data pipelines: send each run to Google Sheets, a webhook, Slack or your database with Apify integrations.
What you get
| Field | Example |
|---|---|
doi, doiUrl, crossrefApiUrl | 10.1007/s10735-026-11019-3, https://doi.org/10.1007/s10735-026-11019-3 |
type, title, subtitle, originalTitle | journal-article, "Circ_0018814 promotes the osteogenic differentiation ..." |
containerTitle, shortContainerTitle, issnPrint, issnElectronic, issns, isbns | "Journal of Molecular Histology", 1567-2379, 1567-2387 |
publisher, crossrefMemberId, doiPrefix | "Springer Science and Business Media LLC", 297, 10.1007 |
publishedDate, publishedPrint, publishedOnline | 2026-11-01. A value can be YYYY, YYYY-MM or YYYY-MM-DD. |
createdAt, depositedAt | When the DOI was first registered and when its metadata was last deposited (UTC) |
volume, issue, page, articleNumber, subjects | |
authorCount, editorCount, hasAbstract | Counts and flags only |
referencesCount, citedByCount | Crossref's reference count and cited-by count |
funders | Name, funder DOI, ROR ID and award numbers. Repeated funders are merged into one entry. |
licences, hasCreativeCommonsLicence | Licence URL, content version, start date, embargo days |
updatesTo | For a correction or retraction notice, the DOI it updates |
source, licenceNote, scrapedAt |
An example record from a run on 1 November 2026 (shortened):
{"doi": "10.1007/s10735-026-11019-3","type": "journal-article","title": "Circ_0018814 promotes the osteogenic differentiation of mesenchymal stem cells in ankylosing spondylitis by regulating the miR-944/KLF4 axis","containerTitle": "Journal of Molecular Histology","issns": ["1567-2379", "1567-2387"],"publisher": "Springer Science and Business Media LLC","crossrefMemberId": "297","publishedDate": "2026-11-01","createdAt": "2026-11-01T15:58:57Z","authorCount": 6,"referencesCount": 50,"funders": [{"name": "Preliminary Research Project of the National Natural Science Foundation of China", "funderDoi": null, "ror": "https://ror.org/01h0zpd94", "awards": ["2025GZRYSY011"]}],"hasCreativeCommonsLicence": true,"updatesTo": []}
Each run also writes a RUN_SUMMARY record to the key-value store. It shows how many works matched (stats.totalResults), how many were saved or skipped, and how many requests the run made.
Input
| Input | Default | Notes |
|---|---|---|
mode | daily_feed | daily_feed reads the last lookbackDays (default 1, meaning yesterday and today, UTC). date_range reads from startDate to endDate, up to 10 years. |
dateField | created | created is when the DOI was first registered: the best choice for "new works". The other options are published, indexed (any change) and deposited. Results are sorted newest first by this field. |
types | ["journal-article"] | Any Crossref work type. Use [] for all types. |
query | none | Bibliographic keywords. The date range and newest-first order still apply: results are sorted by date, not by relevance. Crossref's keyword matching is loose, so not every result contains every word (in one test only 28 of 246 perovskite solar matches had both words in the title). For precision, use the ISSN, DOI prefix, member, funder or type filters, or a narrower phrase. |
issns, doiPrefixes, memberIds, funderDois | none | Up to 50 values each. Values in one list are combined with OR; different lists are combined with AND. |
hasAbstract, hasFunder, creativeCommonsOnly | off | Works removed by the Creative Commons filter are not charged. |
maxItems | 9 | The cap is 9 works (about $0.009) by default, including empty input {} from the API, CLI or a schedule. Raise it up to 100,000. The minimum is 1; there is no unlimited setting. |
onlyNewSinceLastRun, stateKey | auto, default | With auto, results are deduplicated in daily feed mode. Use a separate key for each schedule. Each key remembers at most 200,000 DOIs; beyond that the earliest-saved DOIs are dropped, so they can be returned (and charged) again if a later run's date range still covers them. |
Example: new NSF-funded work in two journals, checked every day:
{"lookbackDays": 2, "issns": ["0028-0836", "0036-8075"], "funderDois": ["10.13039/100000001"], "maxItems": 500}
Finding the IDs
- Journal ISSN: on the journal's website, or search
https://api.crossref.org/journals?query=<journal name>. - Publisher member ID: search
https://api.crossref.org/members?query=<publisher name>and use theid. - Funder DOI: search
https://api.crossref.org/funders?query=<funder name>. The DOI is10.13039/followed by theid.
Getting a complete daily feed
Results come newest first, and a run stops at maxItems. If more works match than maxItems allows, the run saves only the newest ones. Older works in the window can then age out of the look-back without ever being returned.
For a complete feed:
- Filter narrowly (journals, publisher, funder or keywords).
- Run once and read
stats.totalResultsinRUN_SUMMARY. - Set
maxItemscomfortably above that number.
stoppedByMaxItems: true in RUN_SUMMARY means the run hit the cap.
How to schedule it
- Save your input as a task.
- Add a daily schedule in Apify Console (Schedules, then Create new).
- Keep
modeasdaily_feedand give each scheduled task its ownstateKey. - Optionally add an integration (Google Sheets, Slack, webhook) to send each run's new works on.
Pricing
Pay per event: $0.001 per work saved. There is no start fee and there are no other events. Works skipped by deduplication or by the Creative Commons filter are free.
- By default a run returns at most 9 works, which costs at most $0.009.
- 1,000 works cost $1.00. Setting a maximum cost per run stops the run early.
How many works is a day? On a weekday Crossref registers roughly 27,000 to 35,000 new journal articles, and roughly 42,000 to 87,000 works of all types (Crossref counts by created date for Monday 26 to Friday 30 October 2026). Weekends are lower. Covering everything would cost tens of dollars a day, so use filters.
Licence and privacy
- Crossref states: "almost none of the metadata is subject to copyright, and you may use it for any purpose. Some abstracts contained in the metadata may be subject to copyright by publishers or authors."
- The Actor therefore never outputs abstracts.
hasAbstractonly tells you whether one is on file. - Author, editor and other contributor names, ORCID iDs and affiliations are never output. The Actor returns only the counts (
authorCount,editorCount). To see who wrote a work, open its DOI. - No account, API key or email address is needed.
How it works
- robots.txt: the Actor checks
https://api.crossref.org/robots.txtfirst. It currently returns 404, which means there are no rules. If the file ever disallows/works, the Actor stops. - Request rate: it sends at most 1 request per second, one at a time. That matches the public pool's
x-rate-limit-limit: 1,x-rate-limit-interval: 1sandx-concurrency-limit: 1headers. Crossref currently allows filtered list requests at 1 per second in the public pool and 3 per second in its polite pool. The Actor uses 1 per second in both. - Errors and blocks: it respects
Retry-Afterand backs off on 429 and 5xx responses. If the API answers 403 or returns something that is not JSON, the Actor stops cleanly; it never tries to get past a block. - Paging: results are paged with Crossref cursors, at most 1,000 rows per page. Each page asks only for the rows the run still needs, so a default run of 9 works makes one data request.
- Run time: a small run (
maxItems9 or less) ends well inside a minute. Every run stops starting requests 20 seconds before its timeout, so it ends SUCCEEDED with what it has. - When nothing could be saved: if the API is down or nothing matched, the dataset gets one free record
{"type": "status", "status": "warning", ...}with the reason. Filter ontypeif you only want works. - Invalid input: if the input cannot be used (for example an unknown
typesvalue, a bad date or a field of the wrong type), nothing is fetched and the run still ends SUCCEEDED with one free record{"recordType": "status", "type": "status", "status": "error", "statusRow": true, "charged": false, "message": "Invalid input, nothing was fetched or charged: <reason>", ...}. No works are charged. - Fields requested:
select=asks only for the fields needed for the output above. Contributor lists and abstracts are requested only to computeauthorCount,editorCountandhasAbstract; they are dropped in memory and never stored.
Limits
- A new record can take minutes to a few hours to show up in the Crossref API after its DOI is registered. The default look-back of yesterday plus today catches late arrivals.
- The dedupe memory holds at most 200,000 DOIs per state key. When it is full, the earliest-saved DOIs are dropped first. A broad feed with a long look-back can reach this, and dropped DOIs can then be returned again.
- A run that stops at
maxItemssaves the newest matches only; see "Getting a complete daily feed". - Crossref metadata is only as complete as each publisher's deposit. Fields such as funders, licences, abstracts and subjects are often missing.
- The Actor reads only Crossref metadata. It does not include full text, PDFs or citation lists.
FAQ
Why are there no author names? Privacy. The Actor outputs counts only. The DOI link shows the full record.
How fast do new works appear?
createdAt is when the DOI was first registered. A record can take minutes to a few hours to appear in the Crossref API. The default look-back (yesterday plus today) catches late arrivals, and deduplication stops repeats.
How long does deduplication remember? The last 200,000 DOIs per state key.
Is this complete?
It returns what Crossref has, up to your maxItems; see "Getting a complete daily feed". Crossref metadata is only as complete as each publisher's deposit. Funders, licences, abstracts and subjects are often missing.
Does it include full text or PDFs? No. It reads only Crossref metadata.