RSS Feed Monitor: Only New Items (RSS, Atom, JSON Feed) avatar

RSS Feed Monitor: Only New Items (RSS, Atom, JSON Feed)

Under maintenance

Pricing

from $0.30 / 1,000 feed items

Go to Apify Store
RSS Feed Monitor: Only New Items (RSS, Atom, JSON Feed)

RSS Feed Monitor: Only New Items (RSS, Atom, JSON Feed)

Under maintenance

Get 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

FtryTech

Maintained by Community

Actor 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.com and 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 keywords and publishedWithinDays.
  • 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"
}
FieldDefaultMeaning
feedsone sample feedFeed URLs or site URLs, one per line (up to 1,000).
onlyNewItemstrueReturn only items not returned before. false returns every item each run.
stateKeydefaultThe name of the memory of returned items. Use one name per schedule.
keywordsnoneKeep items whose title, summary or categories contain any keyword.
excludeKeywordsnoneDrop items that contain any of these words.
publishedWithinDays0 (any)Keep items published within N days.
maxItemsPerFeed20The most item rows per feed per run, newest first.
includeContentfalseAdd the full content as plain text.
outputModeitemsitems, 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:

reasonMeaning
no_new_itemsNothing new since the last run (the normal answer on a quiet schedule).
no_items_match_filtersNew items exist, but none match your filters.
no_itemsThe feed is readable and empty.
feed_not_foundThe address answers 404, or the page links no feed.
not_a_feedThe address is not RSS, RDF, Atom or JSON Feed.
blocked_by_robotsThe site's robots.txt does not allow the feed (or robots.txt did not answer).
fetch_failedThe server returned an error or did not answer.
invalid_entryThe line is not a web address.

message says what to change. You are never charged for these rows.

Pricing (pay per event)

EventPrice
Feed item (one item row)$0.0003 ($0.30 per 1,000 items)
Feed summary (one feed row)$0.001
no_results rowsfree

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: false and a large maxItemsPerFeed to get everything the feed holds now.
  • Find dead feeds: run with outputMode: "feeds" and look at newestItemAt and itemsPerWeek.

For AI agents (MCP)

  • Call it with only feeds. Every other input has a sensible default.
  • Read type first. A no_results row explains an empty answer in reason and message. no_new_items is a normal answer, not an error.
  • Set onlyNewItems: false when 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.