RSS and Atom Feed Reader: New Items as JSON, Monitor Mode
Pricing
from $0.56 / 1,000 item returneds
RSS and Atom Feed Reader: New Items as JSON, Monitor Mode
Read RSS, Atom and JSON Feed URLs into clean JSON. Feed auto-discovery from any website, new-items-only monitoring, full content, enclosures and images. No login.
Pricing
from $0.56 / 1,000 item returneds
Rating
0.0
(0)
Developer
Detroit Web Agent - Open Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
Use this to turn RSS, Atom, RSS 1.0 (RDF) and JSON Feed addresses into one clean JSON row per article, find the feed behind any website address, and run it on a schedule so each run returns only the items you have not seen before. It is plain HTTP only: no login, no proxy and no browser.
Give it feed URLs, website addresses, or both. For a website address the Actor reads the page's <link rel="alternate"> feed links first and then tries a few common feed paths (for example /feed and /atom.xml), checking each site's robots.txt before it looks.
Run in 30 seconds
- Open the Input tab. The prefilled list (four public feeds, 10 items each) is a ready-to-run test.
- Click Start. The test run reads the four feeds and finishes in about 10 seconds.
- Open the Feed items table in the Output tab, or download the dataset as JSON, CSV, Excel or HTML.
- Replace the list with your own feeds. Turn on Only new items and schedule the Actor to build a change feed.
What does this Actor do?
For every feed it is given, the Actor downloads the feed (capped at a size you set), parses it and delivers a flat row per item, newest first:
| Group | Fields |
|---|---|
| Feed | feedTitle, feedUrl, feedLink, feedType (rss, atom, rss1 or jsonfeed) |
| Item | itemTitle, link, guid, publishedAt, updatedAt, author, categories |
| Text | summary, contentText (plain text of the article body when the feed carries it), contentHtml (original HTML, off by default) |
| Media | enclosureUrl, enclosureType, enclosureLength (podcast audio, attachments), mediaUrl, imageUrl |
| Source | discoveredFrom (the website address a feed was found from), scrapedAt |
What the input switches do:
- Feed discovery. Put a normal web page in Feed URLs or Website URLs and the Actor finds its feed. Up to 5 feed links are taken from a page.
- Only new items. The Actor remembers what it delivered (and each feed's ETag and Last-Modified values) in a named key-value store between runs, so a feed that has not changed is answered with a cheap "not modified" and costs nothing. Use Monitor name to keep separate memory for separate schedules.
- Filters. Keep only items newer than a date or a phrase like
3 days, or only items whose title, summary, body or categories contain one of your keywords. Items that appear in two feeds are returned once.
Use cases
- Competitor and brand news feed: watch the blogs and newsroom feeds of companies you track and push only new posts to Slack or a sheet.
- Podcast and media monitoring: collect new episodes with their audio
enclosureUrland publication date. - Content aggregation: merge many blogs into one dataset, deduplicated by link, for a newsletter or a search index.
- Change alerts for public bodies: follow regulator, status-page and release-notes feeds and trigger a workflow on each new item.
- Feed inventory: give a list of websites, get back the feed address of every site that publishes one.
Input
| Field | What it does |
|---|---|
Feed URLs (feedUrls) | RSS, Atom or JSON Feed addresses. A normal web page address also works; its feed is found automatically. |
Website URLs (siteUrls) | Sites to look up feeds for. |
Max items per feed (maxItemsPerFeed) | Newest items first. Default 50, prefill 10. |
Max items (maxItems) | Hard stop across all feeds. Default 500, prefill 50. |
Only new items (onlyNewItems) | Return only items not delivered by an earlier run with the same monitor name. |
Monitor name (monitorName) | Separate memory per name. |
Only items since (sinceDate) | A date such as 2026-10-01, or a phrase such as 3 days, 12 hours, 2 weeks. |
Keywords (keywords) | Keep items containing at least one keyword (case-insensitive). |
| Include content / Include HTML | Add the plain-text body, and optionally the original HTML. |
Max feed size (MB) (maxFeedMegabytes) | Download cap per feed. A larger feed is cut at the last complete item and a warning is logged. |
Example input
{"feedUrls": ["https://feeds.bbci.co.uk/news/rss.xml", "https://hnrss.org/frontpage"],"maxItemsPerFeed": 10,"onlyNewItems": true,"monitorName": "morning-news"}
Output
One row per feed item in the default dataset. The Feed items view shows published time, feed, title, author, link, summary, categories, image and enclosure. Fields that a feed does not provide are null, never missing. A run summary (feeds read, items per feed, warnings) is saved in the key-value store under OUTPUT.
Sample output
A real row from a run of the prefilled input (the summary text is shortened here, everything else is as returned; empty media fields trimmed):
{"feedTitle": "Hacker News: Front Page","feedUrl": "https://hnrss.org/frontpage","feedLink": "https://news.ycombinator.com/","feedType": "rss","itemTitle": "Show HN: Flide: Make Jev-like decision models up to 9.5x faster","link": "https://github.com/OmniJev/Flide","guid": "https://news.ycombinator.com/item?id=50421155","publishedAt": "2026-11-09T04:43:12.000Z","updatedAt": null,"author": "unikcc","categories": [],"summary": "Decision models need their own inference engine. So we developed Flide ... Comments URL: https://news.ycombinator.com/item?id=50421155 Points: 9 # Comments: 1","contentText": null,"enclosureUrl": null,"imageUrl": null,"discoveredFrom": null,"scrapedAt": "2026-11-09T07:47:02.134Z"}
The prefilled run returned 40 items from four feeds (BBC News, NASA, Hacker News front page, GitHub Blog) in 8 seconds of run time.
Pricing
Pay per item returned: $0.00093 per item on the free plan (Bronze $0.00086, Silver $0.00073, Gold $0.00056), plus a $0.00005 start fee per run. A 1,000-item run costs about $0.93 on the free plan. Items skipped by your filters, items already delivered in monitor mode and duplicates across feeds are never charged, and a feed answered with "not modified" returns nothing and costs nothing. The prefilled test run was charged for 40 items. Set the run-level Maximum cost per run to cap spend; the Actor stops cleanly when the cap is reached and keeps what it delivered.
Use with the API, n8n, Make, Zapier or AI agents
API (one call, returns the rows as JSON):
curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~rss-atom-feed-reader-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"feedUrls":["https://feeds.bbci.co.uk/news/rss.xml","https://hnrss.org/frontpage"],"maxItemsPerFeed":10,"maxItems":50}'
The call waits up to 5 minutes. For bigger inputs, start the run with /runs instead and read the dataset when it finishes.
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("transparent_meteorite/rss-atom-feed-reader-monitor").call(run_input={"feedUrls": ["https://feeds.bbci.co.uk/news/rss.xml", "https://hnrss.org/frontpage"], "maxItemsPerFeed": 10, "maxItems": 50})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
- n8n, Make, Zapier: use the Apify app's "Run Actor" step with actor
transparent_meteorite/rss-atom-feed-reader-monitor, paste the input JSON, then map the dataset items to your sheet or CRM. - Clay: add an HTTP API column that calls the run-sync endpoint above.
- Schedules: in Apify Console, Schedules, run it daily or weekly with the same input for a steady feed.
- AI agents (MCP): connect the Apify MCP server at
https://mcp.apify.com?tools=transparent_meteorite/rss-atom-feed-reader-monitorto Claude, Cursor or any MCP client, and your agent can run RSS Autodiscovery Monitor on request.
FAQ
Which feed formats does it read? RSS 2.0, RSS 1.0 (RDF), Atom and JSON Feed.
Can I give it a normal website address? Yes. It reads the page's feed links, and if there are none it tries a few common paths such as /feed, /rss.xml, /atom.xml and /feed.xml.
How does monitor mode avoid repeats? It stores a hash of each delivered item (by link, or guid, or title plus date) and each feed's ETag and Last-Modified in a named key-value store, and sends conditional requests next time. The store keeps the most recent 50,000 item hashes.
Do I need a login or API key? No.
Why did a feed return no items? The feed may have no items matching your keywords or date, it may have nothing new, or it may have failed; the run status message and the OUTPUT record list each feed's error.
Does it respect robots.txt? Feed discovery checks robots.txt before fetching a page. Feeds you list directly are fetched as the publisher intends them to be: feeds are published for machines to read.
Can it read feeds behind a paywall or login? No.
Limits
- Public
httpandhttpsfeeds only. Addresses on localhost or private networks are refused. - Up to 1,000,000 items per run in total and 100,000 per feed; the Actor reads four feeds at a time and spaces requests to the same host.
- Feed size is capped per feed (default 5 MB, maximum 50 MB); a larger feed is read up to the last complete item.
- A run stops reading new feeds after about 4.5 minutes and keeps what it has, so very long feed lists should be split across runs.
- It returns what the feed contains. Many feeds carry only a summary; the Actor does not open the article page to fetch the full text.
- Feed discovery takes at most 5 feed links from a page.
Related actors
- Company News Monitor for brand and keyword news across publisher feeds.
- Wayback Page Change Tracker for pages that have no feed.
- Sitemap Link Inventory to list every URL a site publishes.
Support
Found a bug or need a field? Open an issue on the Issues tab with the run URL and you will get a reply there.
Changelog
- 0.1: First build: RSS, Atom, RSS 1.0 and JSON Feed reading, feed auto-discovery, new-items-only monitor mode, keyword and date filters.