RSS Feed Reader & RSS to JSON Converter - Bulk Atom Parser
Pricing
from $0.21 / 1,000 feed item returneds
RSS Feed Reader & RSS to JSON Converter - Bulk Atom Parser
RSS feed reader and RSS to JSON converter: read many RSS and Atom feeds in one run. Paste feed or website URLs (feeds are autodiscovered), get title, link, date, author, summary, categories, image as clean JSON. $0.30 per 1,000 items.
Pricing
from $0.21 / 1,000 feed item returneds
Rating
0.0
(0)
Developer
Penny Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Features
Share
RSS Feed Reader: Bulk RSS & Atom, JSON Feed, Autodiscover
Real output (local run 2026-10-25, first 5 of 6 rows, 3 feeds, maxItemsPerFeed 2):
| feedTitle | title | published | author | status |
|---|---|---|---|---|
| The GitHub Blog | How bug bounty sharpens one researcher’s security skills | 2026-10-22T17:21:30.000Z | Shilpa Kumari | ok |
| The GitHub Blog | The bridge to agent-scale Git infrastructure | 2026-10-21T16:00:00.000Z | Eleanor White | ok |
| Hacker News: Front Page | Google has officially turned these Nest thermostats back into dumb thermostats | 2026-10-24T23:14:30.000Z | gnabgib | ok |
| Hacker News: Front Page | America Has Lost 200k of Jobs in Media, Film and the Arts. How Much Is AI? | 2026-10-24T23:11:54.000Z | gnabgib | ok |
| BBC News | Palestinian families displaced as Israeli forces demolish Hebron homes | 2026-10-24T23:02:06.000Z | null | ok |
Copy-paste input for this run:
{"urls":["https://github.blog/feed/","https://hnrss.org/frontpage","https://feeds.bbci.co.uk/news/world/rss.xml"],"maxItemsPerFeed":2}
RSS feed reader API for many feeds at once. Paste RSS 2.0, Atom or JSON Feed URLs, or just a website URL and the feed is autodiscovered, then get one normalized item per post: title, link, ISO date, author, summary, categories, image and enclosure. No login, no browser, no proxies. Pay $0.0003 per item ($0.30 per 1,000); failed or empty feeds cost nothing.
Use it for news monitoring, blog and podcast aggregation, content curation, competitor tracking, newsletter research and feeding feeds into Zapier, Make, n8n or your own pipeline via the Apify API.
Why this feed reader
- Bulk: hundreds of feeds in one run, one shared output schema for RSS, Atom and JSON Feed.
- Autodiscovery: give
https://example.comand it reads<link rel="alternate">feed links, then tries common paths (/feed,/rss.xml,/atom.xml,/feed.json). - Resilient: a dead, blocked or non-feed URL is logged, skipped, listed in the
FAILED_FEEDSkey-value record and not charged. The run still succeeds with the feeds that worked. - Per-row status + SUMMARY: every dataset row has
status(okfeed item,errorfeed unreadable withreason,skippedfeed read but no items matched). Onlyokrows are charged. ASUMMARYrecord in the key-value store holds the counts per status anddatasetRows. - Since-date filter: only items published on or after a date.
- Normalized dates: always ISO 8601 (or
null), whatever the feed uses (RFC 822,dc:date, Atomupdated).
Input
- urls: feed URLs or website URLs (aliases
feedUrls,feeds,urlalso work). - sinceDate: optional ISO date or date-time; older items are skipped and not charged. Items with no date are kept.
- publishedAfter, filterByDate: aliases of
sinceDate. - onlyNew: monitoring mode. Returns only entries not seen in an earlier run (seen guid/link per feed URL is kept in a named key-value store). Only new entries are charged. The first run sets the baseline.
- stateStoreName: name of that store (default
rss-seen-state); use one name per monitor. - webhookUrl: optional. POSTs the items returned by the run to this URL: Slack and Discord incoming-webhook URLs get a readable message, any other URL gets JSON
{count, items}. Off by default. A failed POST is logged and never fails the run. - since: alias of
sinceDate. - fetchTimeoutSeconds: HTTP timeout per feed request (5 to 120, default 25).
- keywords: optional list; keep only items whose title or summary contains any keyword (case-insensitive). Others are not charged.
- includeContent: add a
contentfield with the full item body when the feed has one. - dedupe: skip items whose guid/link already appeared in an earlier feed of the same run.
- maxItemsPerFeed: newest items per feed (default 20, max 1000). Also caps your cost per feed.
Switching from another RSS actor
Paste your saved input as it is and change only the actor ID. These input names work unchanged:
| Rival actor | Their input | Here |
|---|---|---|
| automation-lab/rss-feed-reader | feeds, maxItemsPerFeed, publishedAfter | same names accepted |
| santamaria-automations/rss-feed-reader | feedUrls, maxItemsPerFeed, includeContent, filterByDate, fetchTimeoutSeconds | same names accepted |
Options this actor does not know are ignored with a warning in the log; the run does not fail. Output field names differ from other actors (see Output above), so check downstream mappings once. Names are from the rivals' public input schemas on 2026-10-22; this is not affiliated with them.
Output (one item per post)
feedUrl, sourceUrl, feedTitle, feedFormat (rss / atom / jsonfeed), guid, title, link, published, updated, author, summary (HTML stripped, max 2,000 chars), contentHtml (as given in the feed), categories, imageUrl, authors (all authors), enclosureUrl, enclosureType, enclosures (every enclosure or JSON Feed 1.1 attachment: url, type, length, durationSeconds), durationSeconds (podcast episodes), content (only with includeContent), status.
Example input
{"urls": ["https://hnrss.org/frontpage", "https://github.blog"],"sinceDate": "2026-10-01","maxItemsPerFeed": 20}
The default input runs as-is, so you can click Start without editing anything.
Example output
Values are illustrative of the shape, not a real post.
{"feedUrl": "https://example.com/feed.xml","sourceUrl": "https://example.com","feedTitle": "Example Blog","feedFormat": "rss","guid": "https://example.com/post-1","title": "Post title","link": "https://example.com/post-1","published": "2026-10-05T10:00:00.000Z","updated": null,"author": "Jane Doe","summary": "Plain-text summary of the post.","categories": ["news"],"imageUrl": null,"enclosureUrl": null}
Feed finder mode (discover every RSS feed on a website)
Set "mode": "discover" and paste website URLs. For each site the actor returns every RSS, Atom or JSON feed it advertises (HTML <link rel="alternate"> tags, then common paths like /feed and /rss.xml), each one validated by parsing it. One row per feed: feedUrl, feedTitle, feedFormat, itemCount, latestItemDate, sampleTitles. Sites with no feed give an unbilled skipped row. Billed with the same per-result event as feed items ($0.30 per 1,000 rows).
{ "mode": "discover", "urls": ["https://github.blog", "https://www.bbc.com/news"] }
Monitor feeds: only new items, charged only for new items
Set "onlyNew": true and put the task on a schedule. Each run returns just the entries that were not in any earlier run, so you pay only for new posts and never see the same one twice. Combine with keywords to alert on a topic and since to ignore old posts on the first run.
Recipe (daily):
- Open the actor, paste the input below (or your own feeds), click Save as a new task.
- Schedules, then Create new schedule, cron
0 7 * * *, add the task. - On the task add a Slack, email or webhook integration with trigger Run succeeded and Include dataset items. Days with no new posts return an empty dataset and cost nothing.
Copy-paste example: 34 government and agency press-release feeds (SEC, FDA, EU Commission, and more; each answered HTTP 200 with items when checked on 2026-10-25):
{"urls": ["https://www.sec.gov/news/pressreleases.rss","https://www.fda.gov/about-fda/contact-fda/stay-informed/rss-feeds/press-releases/rss.xml","https://www.fda.gov/about-fda/contact-fda/stay-informed/rss-feeds/recalls/rss.xml","https://ec.europa.eu/commission/presscorner/api/rss?language=en","https://www.gov.uk/search/news-and-communications.atom","https://www.gov.uk/government/organisations/hm-treasury.atom","https://www.gov.uk/government/organisations/home-office.atom","https://www.gov.uk/government/organisations/financial-conduct-authority.atom","https://www.gov.uk/government/organisations/department-of-health-and-social-care.atom","https://www.gov.uk/government/organisations/competition-and-markets-authority.atom","https://www.gov.uk/government/organisations/foreign-commonwealth-development-office.atom","https://www.gov.uk/government/organisations/ministry-of-defence.atom","https://www.gov.uk/government/organisations/department-for-education.atom","https://www.gov.uk/government/organisations/department-for-energy-security-and-net-zero.atom","https://www.gov.uk/government/organisations/department-for-science-innovation-and-technology.atom","https://www.gov.uk/government/organisations/cabinet-office.atom","https://www.justice.gov/news/rss?m=1","https://www.federalreserve.gov/feeds/press_all.xml","https://www.federalreserve.gov/feeds/press_monetary.xml","https://www.federalreserve.gov/feeds/press_enforcement.xml","https://www.consumerfinance.gov/about-us/newsroom/feed/","https://tools.cdc.gov/api/v2/resources/media/132608.rss","https://www.nasa.gov/news-release/feed/","https://www.energy.gov/rss/articles.xml","https://www.ecb.europa.eu/rss/press.html","https://www.bankofengland.co.uk/rss/news","https://www.who.int/rss-feeds/news-english.xml","https://api.io.canada.ca/io-server/gc/news/en/v2?sort=publishedDate&orderBy=desc&pick=50&format=atom","https://www.pm.gov.au/rss.xml","https://www.cpsc.gov/Newsroom/CPSC-RSS-Feed/Recalls-RSS","https://www.cftc.gov/RSS/RSSGP/rssgp.xml","https://www.gov.uk/government/organisations/department-for-transport.atom","https://www.gov.uk/government/organisations/department-for-business-and-trade.atom","https://www.gov.uk/government/organisations/ofcom.atom"],"onlyNew": true,"stateStoreName": "gov-press-monitor","maxItemsPerFeed": 50}
Notes: the first run returns up to maxItemsPerFeed current items and marks everything currently in the feed as seen (the baseline); the store keeps the last 5,000 IDs per feed. Use a different stateStoreName for each monitor. Feeds that fail or have nothing new add an unbilled row.
Get new RSS items in Slack every hour
- Create an incoming webhook in Slack (Apps, Incoming Webhooks) or Discord (channel settings, Integrations, Webhooks) and copy its URL.
- Click Save as a new task with the input below. Run it once: the first run sets the baseline.
- Under Schedules, create a schedule with cron
0 * * * *and add the task. Each run posts only the new items to your channel; runs with nothing new post nothing and are not charged.
{"urls": ["https://hnrss.org/frontpage", "https://github.blog/feed/"],"keywords": ["apify", "scraping"],"onlyNew": true,"stateStoreName": "my-slack-alerts","webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX","webhookFormat": "auto"}
webhookFormat is auto (Slack and Discord detected by URL), slack, discord or generic (JSON {count, items}, for Zapier, Make, n8n or your own endpoint). Items are sent in messages of at most 10. A 429 or 5xx reply is retried once; a webhook error never fails the run (the result is in the SUMMARY record under webhook, and items stay in the dataset). The URL is stored as a secret input and never logged.
Daily alerts (run it on a schedule)
Get new posts from your feeds in Slack or email every morning, with no code:
- Open the actor and set your input (see the JSON below). Click Save as a new task and name it, for example
daily-feeds. - Go to Schedules in the Apify Console, then Create new schedule. Set the cron to
0 7 * * *(every day at 07:00; pick your time zone). Under Actors/Tasks, add thedaily-feedstask and save. - Open the task, then Integrations, then Add integration. Choose Slack (or Email) with trigger Run succeeded, and select the channel or address. Enable Include dataset items if you want the posts in the message. (Integrations are in the Apify Console; availability can depend on your plan.)
Input for a daily digest (small maxItemsPerFeed keeps each run cheap):
{"urls": ["https://hnrss.org/frontpage", "https://github.blog", "https://www.theverge.com/rss/index.xml"],"keywords": ["apify", "scraping"],"maxItemsPerFeed": 10}
Cost per run is at most feeds × maxItemsPerFeed × $0.0003; with the input above that is under $0.01. Note: each run re-reads the latest items, so a post still in the feed can appear again the next day. Set sinceDate to yesterday's date in the task to only get recent posts, and update it when you like. Failed feeds are not billed.
FAQ
Does it support OPML? Not yet; paste the feed URLs.
Does it fetch full articles? No. It reads only the feed document itself (plus the page at the URL you give, for autodiscovery). contentHtml is whatever the feed publisher includes.
Which feed versions? RSS 0.9x/1.0 (RDF)/2.0, Atom 1.0, JSON Feed 1.x.
Am I charged for feeds that fail? No, only items added to the dataset are billed.
Is this affiliated with any publisher? No. Feeds are published by sites for syndication; their own terms apply to how you reuse the content.
Pricing (pay per event)
Event feed-item: one item pushed to the dataset, $0.0003 ($0.30 per 1,000). No start fee.
Honest limits
- Feeds usually expose only the latest 10 to 100 items; this actor cannot return older posts.
- Autodiscovery needs the site to publish a feed link or use a common feed path; sites that block automated requests are skipped.
- Summaries are plain text; formatting is in
contentHtmlwhen the feed provides it. - Item text and author names are public data supplied by the publisher; handle them according to the privacy law that applies to you.
Feedback
If this Actor worked for you or didn't, please leave an honest rating on its Store page or open an issue from the Issues tab. We read both and fix reported problems.
More from PennyData
- Sitemap Extractor Plus: robots.txt and nested sitemap URL harvester.
- Website Screenshot & URL to PDF: full-page screenshots and URL/HTML to PDF.
- Website Tech Stack Detector: CMS, analytics, CDN and frameworks per URL.
- Website Contact Extractor: emails, phones and socials from sites.
- Bulk Domain WHOIS & DNS Lookup: registrar, expiry, nameservers via RDAP.
AI disclosure
This actor was written with the assistance of an AI model (Claude, by Anthropic) and tested locally on live feeds.
Other languages
Español: Lector de feeds RSS y Atom a JSON
Lee muchos feeds RSS o Atom a la vez y los convierte a JSON: título, enlace, fecha, autor y contenido de cada entrada. Admite filtros por fecha y palabras clave; sin clave de API. Precio: 0,0003 USD por entrada devuelta (0,30 USD por 1.000); los feeds vacíos o con error no se cobran.
Ejemplo de entrada:
{"urls":["https://hnrss.org/frontpage","https://github.blog/feed/"],"maxItemsPerFeed":20}
Português: Leitor de feeds RSS e Atom para JSON
Leia vários feeds RSS ou Atom de uma vez e converta para JSON: título, link, data, autor e conteúdo de cada item. Aceita filtros por data e palavras-chave; sem chave de API. Preço: US$ 0,0003 por item retornado (US$ 0,30 por 1.000); feeds vazios ou com erro não são cobrados.
Exemplo de entrada:
{"urls":["https://hnrss.org/frontpage","https://github.blog/feed/"],"maxItemsPerFeed":20}
Deutsch: RSS- und Atom-Feeds in JSON umwandeln
Liest viele RSS- oder Atom-Feeds auf einmal und wandelt sie in JSON um: Titel, Link, Datum, Autor und Inhalt jedes Eintrags. Mit Filtern für Datum und Stichwörter; kein API-Schlüssel nötig. Preis: 0,0003 USD pro zurückgegebenem Eintrag (0,30 USD pro 1.000); leere oder fehlerhafte Feeds kosten nichts.
Beispieleingabe:
{"urls":["https://hnrss.org/frontpage","https://github.blog/feed/"],"maxItemsPerFeed":20}
I built this and earn from its runs. Written with AI assistance (Claude).