RSS Feed Monitor - Only New Items, Atom & JSON Feed, Podcasts avatar

RSS Feed Monitor - Only New Items, Atom & JSON Feed, Podcasts

Pricing

from $0.50 / 1,000 item delivereds

Go to Apify Store
RSS Feed Monitor - Only New Items, Atom & JSON Feed, Podcasts

RSS Feed Monitor - Only New Items, Atom & JSON Feed, Podcasts

Read hundreds of RSS, Atom and JSON feeds in one run and get clean, deduplicated items. Turn on 'only new items' and schedule it: every run delivers exactly what was published since the last one. Feed autodiscovery from any site URL. Pay per feed check and per item.

Pricing

from $0.50 / 1,000 item delivereds

Rating

0.0

(0)

Developer

Luca Pietrini

Luca Pietrini

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

RSS Feed Monitor — only new items, from hundreds of feeds, in one run

Give it a list of RSS, Atom or JSON feeds — or just the websites, and the feeds are found for you — and get every item as clean, uniform JSON: title, link, date in UTC, author, plain-text summary, categories, images and podcast enclosures. Whatever dialect the publisher uses, the rows look the same.

Then turn on Only new items and schedule it. Each feed remembers what it already delivered, so every run returns exactly the items published since the previous run. No duplicates, no "did I see this already?", no database on your side.

What sets it apart from other feed readers on Apify Store:

  • Only new items, per feed, remembered for you — the monitoring case handled natively, not with a "dedupe by URL" afterthought. Seed a feed silently on the first run if you only want future items.
  • Every dialect — RSS 2.0, RSS 1.0 (RDF), Atom, JSON Feed, podcast feeds with enclosures and durations, media: images, content:encoded full text.
  • Feed autodiscovery — paste a blog URL; <link rel="alternate"> tags and common paths (/feed, /rss.xml, /atom.xml, /feed.json, Blogger, WordPress) are checked for you.
  • Hundreds of feeds per run, fetched in parallel, each one isolated: a dead feed is reported in the summary and never stops the others.

What you get

One row per item:

{
"title": "Python 3.15.0 beta 1 released",
"link": "https://blog.python.org/2026/09/python-3150b1.html",
"published": "2026-09-16T14:02:00+00:00",
"updated": null,
"author": "Python Insider",
"summary": "The first beta of Python 3.15 is out. Beta means no new features…",
"categories": ["release"],
"enclosures": [],
"image": null,
"itemId": "tag:blogger.com,1999:blog-123.post-456",
"feedUrl": "https://blog.python.org/feeds/posts/default?alt=rss",
"feedTitle": "Python Insider",
"feedType": "rss",
"siteUrl": "https://blog.python.org/",
"fetchedAt": "2026-09-18T13:05:00+00:00",
"isNew": true
}
FieldNotes
published, updatedNormalised to ISO 8601 UTC from RFC 822, ISO 8601 or date-only values. null when the feed gives none.
summaryHTML stripped, whitespace collapsed, up to 600 characters. Turn on Include full item content for contentHtml.
enclosures{url, type, length, duration} — podcast episodes, videos, files.
itemIdThe feed's own guid / id, or the link, or a stable hash. What "only new" is keyed on.
isNewOnly when Only new items is on.

A per-feed summary (items in feed, new, delivered, first run, errors) is saved as the SUMMARY record of the run's key-value store.

Input

OptionDefaultWhat it does
Feed URLsOne per line. RSS / Atom / JSON Feed / podcast feeds.
Or: websites to discover feeds fromBlog or news URLs; their feeds are discovered.
Only new items since the last runonPer-feed memory in a named key-value store.
On the first run of a feeddeliver everythingOr seed only: remember the current items and deliver nothing, so the next run is already "new only".
Only items published sinceISO date or 24h, 7d, 2w.
Only items whose title or summary matches / Skip items matchingCase-insensitive regular expressions, e.g. `python
Include full item content (HTML)offAdds contentHtml when the feed provides the body.
Deduplicate the same link across feedsonOne row when several feeds carry the same article.
Maximum items per feed0
Snapshot store namefeed-monitor-snapshotsChange it to track the same feeds independently (e.g. per project).

How "only new" stays correct

  • Memory is per feed, keyed on the feed's own item ids, with a rolling window of the last 5,000 ids — old items that drop off a feed and come back later are not reported as new.
  • If a run stops at your maximum charge, items that could not be delivered are not remembered: they come back on the next run instead of being lost.
  • Changing filters does not touch the memory: an item filtered out today is still "new" tomorrow if the filter changes.

Pricing

Pay per event, no subscription:

  • one event per feed checked (a few cents per thousand checks — it covers the cost of runs that find nothing new);
  • one event per item delivered.

A scheduled monitor over 50 feeds that finds 12 new items pays for 50 checks and 12 items. Set a maximum charge on the run to cap the cost; the Actor stops cleanly when it is reached.

Use cases

  • Newsroom / competitor watch — every morning, what the sites you follow published, deduplicated, in one dataset.
  • Content pipelines and AI agents — feed new articles into summarisation, translation or classification; an agent can call this Actor and pay per event.
  • Podcast tracking — new episodes across many shows, with audio URLs and durations.
  • Job and release feeds — python.org jobs, GitHub releases, changelogs, status pages: anything with a feed.
  • Alerts — pipe new items to Slack, email or a sheet with Apify integrations and schedules.

Run it from code

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("bruco3/feed-monitor").call(run_input={
"feeds": ["https://hnrss.org/frontpage", "https://blog.apify.com/rss/"],
"onlyNew": True,
"firstRun": "seed",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["published"], item["title"], item["link"])

FAQ

A feed returns an HTML page. You passed a web page, not a feed. Put it under websites to discover feeds from instead and the feed will be found, or open an issue if a site's feed goes undiscovered.

Dates look wrong. They are converted to UTC. 2026-09-01T10:00:00+02:00 becomes 2026-09-01T08:00:00+00:00.

Is it legal? Feeds are published by site owners specifically for automated readers. The Actor identifies itself with a clear User-Agent and fetches only feed files.

Feedback

A feed dialect this Actor gets wrong, or a field you need? Open an issue on the Issues tab. If it saved you time, a review helps others find it.

Changelog

  • 0.1 — initial release: RSS 2.0 / 1.0, Atom, JSON Feed, podcast enclosures, autodiscovery, only-new memory per feed with seed mode, filters, cross-feed dedupe, pay per check and per item.