RSS Feed Reader: Only New Items, Atom & JSON Feed
Pricing
from $1.00 / 1,000 feed items
RSS Feed Reader: Only New Items, Atom & JSON Feed
Read RSS, Atom and JSON Feed URLs into clean JSON. Schedule it with onlyNew and get just the items you have not seen yet, across runs, with keyword filters. Pay per item, so a quiet feed costs nothing. Finds the feed from a website URL.
Pricing
from $1.00 / 1,000 feed items
Rating
0.0
(0)
Developer
JP Data Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
Turn any RSS, Atom, RDF or JSON Feed into clean JSON. Run it once, or schedule it and get only the items you have not seen yet. No API key, no browser and no proxy.
Most feed readers on the Store either return every item on every run or leave it to you to remove duplicates. Here onlyNew keeps the record for you, across runs, in your own account. You pay per item delivered, so a feed with nothing new costs nothing beyond the small run start.
Use it to feed news into a Slack channel or a spreadsheet, watch competitors' blogs and regulators' press releases, collect podcast episodes, or give an AI agent fresh articles to summarize.
Quick start
Read a few feeds:
{ "feedUrls": ["https://www.federalreserve.gov/feeds/press_all.xml", "https://www.nasa.gov/feed/"] }
Daily alerts on a topic: schedule this and connect the run to Slack, email or a webhook.
{"feedUrls": ["https://www.who.int/rss-feeds/news-english.xml"],"onlyNew": true,"keywords": ["vaccine", "vaccines"],"excludeKeywords": ["webinar"]}
You can paste a website address instead of a feed. If the page links to a feed with <link rel="alternate">, that feed is read, and the result is listed under feedsDiscovered in RUN_SUMMARY.
How onlyNew works
- First run: outputs the latest items, up to
maxItemsPerFeed, and marks the rest of the feed as read. You are not charged for old items. - Later runs: outputs only items not seen before. If a feed has more new items than
maxItemsPerFeed, the rest wait for the next run, so a burst of posts is not lost. - Nothing new: the reader asks the server whether the feed changed (
ETag,If-Modified-Since). If not, the feed is not downloaded again. - Changing
keywordsorexcludeKeywordsstarts a fresh record for that feed. Items are matched byguid, then by link, then by title, date and text. - An item whose text changes keeps its
guid, so it does not count as new.
The record is saved in a key-value store named rss-feed-reader-seen in your Apify account. Delete it to start again.
Output
One item per article or episode:
{"id": "rss:4f1c2a9d0b7e6c3a81d5e2f0","feedUrl": "https://www.who.int/rss-feeds/news-english.xml","feedTitle": "News (English) - World Health Organization","feedType": "rss","feedLanguage": "en","title": "New technical package on air quality","link": "https://www.who.int/news/item/01-11-2026-example","guid": "https://www.who.int/news/item/01-11-2026-example","publishedAt": "2026-11-01T12:00:00Z","updatedAt": null,"summary": "First 2,000 characters of the text.","content": "Full text as plain text, up to 50,000 characters.","contentHtml": "<p>The same text as HTML, up to 100,000 characters.</p>","categories": ["Air pollution"],"imageUrl": "https://example.org/photo.jpg","enclosures": [{ "url": "https://example.org/episode.mp3", "type": "audio/mpeg", "length": 12345678 }],"discoveredFrom": null,"fetchedAt": "2026-11-02T00:00:00Z"}
Dates are UTC. feedType is rss, atom, rdf or json. Fields the feed does not provide are null.
Author names are not included. Bylines are personal data and most uses do not need them. Text in the title and body is passed on as the feed publishes it.
Input
| Field | Default | Meaning |
|---|---|---|
feedUrls | 3 public feeds | Feed or website URLs, up to 2,000 |
onlyNew | false | Output only items not seen in earlier runs |
keywords | none | Keep items containing any of these words |
excludeKeywords | none | Leave out items containing any of these words |
publishedWithinDays | 0 | Only items from the last N days. Items with no date are kept |
publishedAfter | none | Only items after this date or time. Overrides the days |
includeContent | true | Add content and contentHtml |
maxItemsPerFeed | 20 | Newest items first |
maxItems | 1000 | Total for the run |
Keywords ignore case and accents and look in the title, text and categories. English words match whole words, so ai does not match said, and bank does not match banks: add both forms. Japanese and other text without spaces matches anywhere.
When a feed fails
One bad feed does not stop the run, and it costs nothing. RUN_SUMMARY lists each one under feedsFailed with the reason. The run fails only if no feed could be read.
{"feedsRequested": 3,"feedsRead": 2,"feedsUnchanged": 0,"feedsFailed": [{ "url": "https://example.org/old.xml", "reason": "HTTP 404" }],"feedsNotReached": 0,"firstReadFeeds": 2,"itemsRead": 40,"pushed": 20,"seenBefore": 0,"filteredOut": 12,"overLimit": 8}
feedsNotReached counts feeds left unread because the run hit maxItems or your spending limit. overLimit counts matching items left out by the limits.
What it respects
- robots.txt. A feed the site disallows is skipped and reported as
disallowed by robots.txt. This includes feeds on sites that forbid robots altogether, such as Reddit. There is no switch to override it. - Server load. At least one second between requests to the same site, longer if the site's
Crawl-delayasks for it, up to 5 seconds. Failed requests are retried twice at most. - Honest identification. Requests carry a descriptive User-Agent with a link to this page. There is no proxy and no browser disguise, so a feed that blocks cloud servers will fail with
HTTP 403and be reported.
Limits
- A feed holds only what the publisher puts in it, usually the latest 10 to 100 items. This Actor cannot reach older history. Run it on a schedule to build your own archive.
- Feeds behind a login are not supported.
- Feeds over 20 MB are skipped.
- Only public addresses can be read, not internal ones.
The content belongs to its publishers. You are responsible for how you use it.
Pricing
Pay per item delivered, plus a small charge per run. Failed feeds, items already seen and unchanged feeds are free. Set maxItems or a spending limit in the run options to control the cost.