RSS Feed Monitor: Only New Items (RSS, Atom, JSON Feed)
Under maintenancePricing
from $0.30 / 1,000 feed items
RSS Feed Monitor: Only New Items (RSS, Atom, JSON Feed)
Under maintenanceGet only the new items from any RSS, Atom, RDF or JSON feed since your last run. Give a feed or a site URL; it finds the feed, remembers what it already sent, filters by keyword and age, and adds an optional feed health row. Polite: robots.txt and conditional requests.
Pricing
from $0.30 / 1,000 feed items
Rating
0.0
(0)
Developer
FtryTech
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Get only the new items from any RSS, Atom, RSS 1.0 (RDF) or JSON Feed since your last run, as clean JSON. Put it on a schedule and each run returns just what was published since the one before: no duplicates to filter out, and you pay only for new items. Give it a feed URL or just a site's address; it finds the feed for you.
By FtryTech.
What it does
- Remembers what it already sent. The Actor keeps a memory of item ids per feed in your Apify account. The first run returns the newest items; each later run returns only new ones. Several schedules can keep separate memories (
stateKey). - Reads every common format into one row shape: RSS 2.0, RSS 1.0 (RDF), Atom and JSON Feed (1.0 and 1.1), including
content:encoded, Dublin Core, Media RSS images and podcast enclosures. - Finds the feed from a site URL. Give
blog.example.comand it follows the page's<link rel="alternate">to the feed. - Filters by keywords in the title, summary or categories, by excluded words, and by age.
- Feed health row (optional): format, last update, items in the feed, new and matching items, newest item date and items per week. Use it to spot a dead or slowing feed.
- Polite and cheap. It reads robots.txt before each site and skips what the site disallows. It sends conditional requests (ETag, Last-Modified), so an unchanged feed costs almost nothing to check. No browser, no proxy, no login.
Only public feeds. Feeds exist so other software can read them. The Actor reads only feeds and pages that robots.txt allows. It does not log in or bypass any block.
Who it is for
- News, brand and competitor monitoring: watch 100 blogs, newsrooms or release-note feeds every hour and send only the new posts to Slack, email, Sheets or a webhook.
- Newsletters and content curation: collect the week's new posts from your sources with
keywordsandpublishedWithinDays. - AI agents and RAG pipelines: fresh items with plain-text summaries or full content, and an explicit row when there is nothing new.
- Podcast tools: episode enclosures (audio URL, type and size) from any podcast feed.
Input
Only feeds matters, and even that has a default. Everything else is optional.
{"feeds": ["https://blog.apify.com/rss/", "https://www.jsonfeed.org/feed.json", "github.blog"],"onlyNewItems": true,"stateKey": "my-news-schedule","keywords": ["ai", "scraping"],"excludeKeywords": ["sponsored"],"publishedWithinDays": 7,"maxItemsPerFeed": 20,"includeContent": false,"outputMode": "items"}
| Field | Default | Meaning |
|---|---|---|
feeds | one sample feed | Feed URLs or site URLs, one per line (up to 1,000). |
onlyNewItems | true | Return only items not returned before. false returns every item each run. |
stateKey | default | The name of the memory of returned items. Use one name per schedule. |
keywords | none | Keep items whose title, summary or categories contain any keyword. |
excludeKeywords | none | Drop items that contain any of these words. |
publishedWithinDays | 0 (any) | Keep items published within N days. |
maxItemsPerFeed | 20 | The most item rows per feed per run, newest first. |
includeContent | false | Add the full content as plain text. |
outputMode | items | items, feeds (one summary row per feed) or both. |
Output
Each row has a type.
item
{"type": "item","feedUrl": "https://blog.apify.com/rss/","feedTitle": "Apify Blog","itemId": "6a4d057e47faf90001f4a0d8","isNew": true,"title": "Get more people to use your Actor with task examples","link": "https://blog.apify.com/actor-task-examples/","author": "Fabian Maume","publishedAt": "2026-10-22T08:00:00.000Z","updatedAt": null,"categories": ["Developer community", "Use cases"],"summary": "Publishing task examples doubled my Actor's organic traffic and grew search impressions 10x in a month. Here's how to do the same for yours.","content": null,"imageUrl": "https://storage.ghost.io/.../task-examples.png","enclosureUrl": null,"enclosureType": null,"enclosureLength": null,"commentsUrl": null}
feed: feedUrl, requestedUrl, format (rss, rdf, atom or json), title, description, siteUrl, language, updatedAt, itemsInFeed, newItems, matchingItems, newestItemAt, oldestItemAt, itemsPerWeek and checkedAt.
no_results (free): written when a feed gives nothing. Its reason is one of:
reason | Meaning |
|---|---|
no_new_items | Nothing new since the last run (the normal answer on a quiet schedule). |
no_items_match_filters | New items exist, but none match your filters. |
no_items | The feed is readable and empty. |
feed_not_found | The address answers 404, or the page links no feed. |
not_a_feed | The address is not RSS, RDF, Atom or JSON Feed. |
blocked_by_robots | The site's robots.txt does not allow the feed (or robots.txt did not answer). |
fetch_failed | The server returned an error or did not answer. |
invalid_entry | The line is not a web address. |
message says what to change. You are never charged for these rows.
Pricing (pay per event)
| Event | Price |
|---|---|
Feed item (one item row) | $0.0003 ($0.30 per 1,000 items) |
Feed summary (one feed row) | $0.001 |
no_results rows | free |
There is no start fee of our own. Apify charges only its standard tiny run-start fee. Because a schedule returns only new items, an hourly check of a quiet feed usually costs nothing beyond that fee. The run stops cleanly at your spending limit, and items it could not write are returned on the next run.
Tips
- Alerts: schedule the Actor every 15 or 60 minutes, then connect the dataset to Slack, email, Google Sheets, Zapier, Make or a webhook. Each run sends only new posts.
- Separate schedules: give each schedule its own
stateKey, so one schedule does not mark items as seen for another. - Backfill once: run with
onlyNewItems: falseand a largemaxItemsPerFeedto get everything the feed holds now. - Find dead feeds: run with
outputMode: "feeds"and look atnewestItemAtanditemsPerWeek.
For AI agents (MCP)
- Call it with only
feeds. Every other input has a sensible default. - Read
typefirst. Ano_resultsrow explains an empty answer inreasonandmessage.no_new_itemsis a normal answer, not an error. - Set
onlyNewItems: falsewhen you need the current contents of a feed and not only what is new to you.
Limits
- A feed holds only its latest items (often 10 to 50). The Actor cannot get older posts that the feed no longer lists.
- Site discovery follows the page's feed link. It does not guess feed paths.
- The memory keeps the latest 5,000 item ids per feed.
Questions or a feed that does not parse? Open an issue on the Actor's Issues tab.