RSS & News Feed Monitor
Under maintenancePricing
$2.00 / 1,000 item delivereds
RSS & News Feed Monitor
Under maintenanceMonitor RSS, Atom and JSON feeds — or any site that has one — and get back only the items published since your last run. Optional full article text, keyword and date filters. You pay per delivered item: nothing new means nothing charged.
Pricing
$2.00 / 1,000 item delivereds
Rating
0.0
(0)
Developer
munin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Watch any list of RSS, Atom or JSON feeds — or plain site URLs — and get back only the items published since your last run. Optionally with the full article text, not just the 150-character summary the feed carries.
Built for scheduled runs: point it at 50 blogs, run it every hour, and each run delivers the handful of posts that are actually new. You are charged per delivered item, so an hour with nothing new costs you nothing.
What it does
- Reads every common feed format — RSS 2.0, RSS 1.0 (RDF), Atom and JSON Feed. Measured on 53 live sources: 51 worked (96%).
- Finds the feed for you. Give it
https://blog.cloudflare.comorhttps://stripe.com/blogand it looks for the feed the page declares, then for the usual paths (/feed,/rss.xml,/atom.xml,/index.xml,/feed.json, …). - Remembers what it already sent. Item IDs are kept in a named key-value store, so a scheduled run returns new items only — no duplicates, no double charges. A run with nothing new delivers 0 items and costs 0.
- A per-feed limit throttles, it does not discard. Items over
maxItemsPerFeedare delivered by the following run instead of being dropped. - Skips unchanged feeds for free. It sends
If-None-Match/If-Modified-Since; a304 Not Modifiedcosts you nothing at all. About 60% of publishers support this (32 of 51 feeds in our measurement). - Fetches the real article when you ask for it. Feeds usually carry 100–200 characters; the extracted body is around 10× longer (median 686 → 6,700 characters in our measurement).
- Filters before charging. Keyword, exclude-keyword, author and date filters are applied first. Items you filter out are not billed.
Input
| Field | Type | What it does |
|---|---|---|
sources | array | Feed URLs or site URLs. Required. |
keywords | array | Keep items matching any keyword (case-insensitive). |
excludeKeywords | array | Drop items matching any of these. |
matchIn | array | Fields the keyword filters look at. Default: title + summary. |
authors | array | Keep only these authors. |
publishedWithinHours | integer | Drop items older than this. 0 = no limit. |
onlyNewItems | boolean | Default on. Deliver only what appeared since the last run. |
stateStoreName | string | Named store for the memory, so separate watch lists don't mix. |
includeFullText | boolean | Open each article and extract the body. Default off. |
fullTextMinChars | integer | Shorter text counts as "not found". Default 500. |
includeContentHtml | boolean | Also return HTML, not only plain text. |
maxItemsPerFeed, maxItems | integer | Limits. Counted on delivered items. |
maxFeedsPerSite | integer | Take more than one feed when a site declares several. |
maxConcurrency | integer | Feeds read in parallel. Default 5. |
useApifyProxy | boolean | For the few publishers that block datacenter traffic. |
Example input
{"sources": ["https://techcrunch.com/feed/", "https://blog.cloudflare.com", "https://www.theverge.com/rss/index.xml"],"keywords": ["ai", "acquisition"],"publishedWithinHours": 24,"onlyNewItems": true,"includeFullText": true}
Output
One dataset item per feed entry:
{"title": "Cloudflare acquires Human Native","url": "https://blog.cloudflare.com/cloudflare-acquires-human-native/","id": "https://blog.cloudflare.com/cloudflare-acquires-human-native/","author": "Matthew Prince","publishedAt": "2026-09-17T13:00:00.000Z","updatedAt": null,"summary": "The web has always run on a bargain…","contentText": "The web has always run on a bargain between…","categories": ["AI", "Acquisitions"],"imageUrl": "https://cf-assets.www.cloudflare.com/…/image.png","enclosures": [],"commentsUrl": null,"feedTitle": "The Cloudflare Blog","feedUrl": "https://blog.cloudflare.com/rss/","feedType": "rss","fullText": "The web has always run on a bargain… (6,700 characters)","wordCount": 1104,"success": true,"scrapedAt": "2026-09-19T04:12:07.881Z"}
A source whose feed could not be found or read produces one row instead of failing the run, and that row is not charged:
{"input": "https://www.anthropic.com/news","success": false,"itemsDelivered": 0,"error": "No RSS, Atom or JSON feed found for this URL. If the site has one, pass its feed URL directly."}
What it cannot do
- It cannot invent a feed that doesn't exist. Sites that publish no RSS/Atom/JSON feed (for example
anthropic.com/news) return a failure row. It does not scrape article lists out of HTML. - Full article text is not guaranteed. Measured at 84–88% of articles. It fails on pages rendered entirely by JavaScript, on paywalled articles (NYTimes, The Economist), and on pages that aren't articles at all (a landing page, a forum post). Those rows carry
fullText: nulland a reason; the item is still delivered and charged, because the feed entry itself is the product. - Short posts fall below the length floor. Link-blog entries of 200–400 characters are treated as "no body" at the default
fullTextMinChars: 500. Lower it if you watch link blogs. - Some publishers block datacenter IPs outright. AP News returns 403 to any datacenter request. Turn on Apify Proxy for those.
- No login, no anti-bot bypass. Feeds behind a subscriber login are out of scope.
- Feeds only carry what the publisher puts in them. Missing authors, missing dates and truncated summaries are the publisher's choice, not a bug here. Dates are normalised to ISO 8601 when present.
- It is not a full-site archive. A feed typically holds the latest 10–50 items; the actor cannot reach back further than the feed goes.
Pricing
Pay per event: $2.00 per 1,000 delivered items. Platform usage (compute, proxy, storage) is included — you pay for delivered items and nothing else.
Not charged: filtered-out items, items already delivered in an earlier run, unchanged feeds (304), and sources that failed.
Tips
- Schedule it hourly with
onlyNewItems: trueandpublishedWithinHours: 48. The date filter guards against a feed that republishes old items with new IDs. - Use
stateStoreNameto separate watch lists —"competitors"and"industry-news"won't hide each other's items. - Leave
includeFullTextoff for alerting and turn it on for summarising. Off, a 50-feed run finishes in a few seconds. - Chain it into an LLM step with the
textoutput link: it returns title, URL, date and body only.