RSS and Atom Feed Reader (bulk, with feed discovery)
Pricing
from $0.22 / 1,000 item listeds
RSS and Atom Feed Reader (bulk, with feed discovery)
Read up to 200 RSS or Atom feeds per run and get their items as clean rows: title, link, publication date in UTC, summary, categories and image. Give it a plain website instead of a feed URL and it finds the feed itself. Pay only for delivered items.
Pricing
from $0.22 / 1,000 item listeds
Rating
0.0
(0)
Developer
Steadydata Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
31 minutes ago
Last modified
Categories
Share
Read up to 200 feeds per run and get their items as clean rows: title, link, publication date in UTC, summary, categories and image. RSS and Atom come out in the same shape. Give it a plain website instead of a feed URL and it finds the feed itself. You pay per delivered item and nothing else.
Why this scraper
- A website is enough.
github.blogworks exactly like a feed URL: the page is read, its<link rel="alternate">is followed, and if the site declares nothing the usual paths (/feed,/rss,/rss.xml,/feed.xml,/atom.xml,/index.xml) are tried. Measured on 14-09-2026: it resolved tohttps://github.blog/feed/on the first attempt and delivered. Nobody in your team has to go hunting for feed URLs first. - RSS and Atom in one row shape. RSS keeps items in
<item>with<pubDate>, Atom in<entry>with<published>and<link href>. A buyer with 200 sources should not have to care, so both become the same 15 columns, andfeedTypesays which it was. - Dates you can sort on. Every date is normalised to UTC in
publishedAt(2026-09-13T19:41:48Z), whatever the feed wrote. In a 290-item test across eleven publishers,publishedAtwas filled on 100% of the rows.publishedTextkeeps the original string. - One slow publisher does not spoil the run. A source that does not answer is retried from another proxy exit and, if it still refuses, comes back as one error record while the other feeds deliver normally. Measured: 290 items from eleven feeds in 81 seconds, one error record, nothing lost.
- Only delivered items are charged. An unreachable site, a site with no feed, a typo in the list: all free.
Who this is for
Newsroom and PR monitoring across a list of publishers. Competitor and category watching from company blogs. Filling a newsletter or a dashboard from dozens of sources on a schedule. Research collections that need a dated, deduplicable list of articles rather than a scrape.
Who this is not for
Read this before you buy.
- It delivers what the feed contains, not the article. The full page is never fetched.
contentcarries the full text only when the publisher puts it in the feed itself, which many do not; then you get the summary the feed offers. If you need the article body, this is the wrong tool. - A feed is a window, not an archive. Most feeds carry between 10 and 50 recent items. In the 14-09-2026 test, nine of eleven publishers returned fewer than the requested 50 because the feed simply holds fewer. There is no way to page back into history, from any tool, because the publisher does not serve it.
- No author or byline. A byline is a person, and this actor ships no person data. The field is not collected and cannot be switched on.
- A few publishers refuse datacenter traffic.
nu.nlanswers in under two seconds from an ordinary connection and times out from the platform, on every exit that was tried. Those sources come back as a freeBLOCKEDerror record and this actor cannot read them. If your list is mostly publishers like that, test before you build on it: the free error record tells you within one run which of your sources are affected. - Discovery follows robots.txt. Reading a feed is never gated, because syndication
exists to be read by machines. Inspecting a website page to find its feed is an ordinary
page fetch, so that step obeys robots.txt and a site that forbids it is skipped for free
with
ROBOTS_DISALLOWED.
Input example
{"sources": ["https://news.ycombinator.com/rss","https://www.theverge.com/rss/index.xml","github.blog","techcrunch.com"],"maxItemsPerFeed": 50,"sinceDays": 7,"includeContent": false}
maxItemsPerFeed is your cost ceiling per source: one delivered item is one charged event.
sinceDays drops everything older, and items without a date are always kept.
Output example
{"source": "https://www.theverge.com/rss/index.xml","feedUrl": "https://www.theverge.com/rss/index.xml","feedTitle": "The Verge","feedType": "atom","position": 1,"title": "Trump and Mike Johnson think the AI industry is overreacting","link": "https://www.theverge.com/ai-artificial-intelligence/994441/trump-mike-johnson-ai","publishedAt": "2026-09-13T19:41:48Z","publishedText": "2026-09-13T15:41:48-04:00","summary": "Yesterday, Anthropic CEO Dario Amodei published a lengthy open letter...","content": null,"categories": ["AI", "Anthropic", "News"],"imageUrl": "https://platform.theverge.com/wp-content/uploads/sites/2/2026/09/example.jpg","guid": "https://www.theverge.com/ai-artificial-intelligence/994441","discovered": false,"status": "ok"}
discovered is true when you passed a website and the feed was found for you.
How often the optional fields are actually filled, measured over 290 items from eleven
publishers on 14-09-2026: title, link, publishedAt, feedTitle and feedType 100%,
summary 99%, guid 89%, categories 74%. The gaps are the publishers' own: a feed that
carries no categories cannot report any.
Error codes: INVALID_URL, NO_FEED_FOUND, EMPTY_FEED, ROBOTS_DISALLOWED,
FETCH_FAILED, BLOCKED. None of them are charged. INPUT_TRUNCATED appears once when your input is longer than this actor accepts.
Related actors from steadydata
- google-news: the same story from Google News, by query or country
- technical-seo-audit: the health of the pages those items point to
Pricing
Pay per event: one item-listed event per delivered item. No start fee, no separate
platform-usage surcharge, and no charge for an input that fails.
Free Apify plan: this actor delivers up to 25 rows per run for accounts on the Apify free plan, and then stops with a message. That limit is set by us, not by Apify. It exists so the actor keeps paying for itself for the people who do pay. Any paid Apify plan runs it at full size, billed per delivered row, with failed rows never charged.
FAQ
Does it work on a site without a feed?
No, and it says so for free: NO_FEED_FOUND after the declared link and six usual paths have
been tried. Feeds are read, pages are not scraped.
How do I keep a run cheap?
maxItemsPerFeed is a hard ceiling per source, so 200 feeds at 10 items can never cost more
than 2,000 events. sinceDays cuts it further if you poll often and only want what is new.
Can I poll every hour without paying for the same items twice?
Every item carries guid and link, so deduplicating on your side is one key lookup.
sinceDays: 1 combined with a small maxItemsPerFeed keeps a frequent poll small, but
items you already have are delivered again and are charged again.
Why is content empty?
Because the publisher does not put the article text in the feed. Switch includeContent on
to receive it wherever it is present; it is off by default because it multiplies dataset size
for feeds that carry the whole article.
Is personal data collected? No. The author and creator fields that feeds often carry are deliberately not read, and nothing else in a feed item identifies a person.
What happens when a source changes? Feeds change from time to time; that is the nature of this work. The actor is run against real feeds daily and fixed fast, and while it is broken you are not charged, because only delivered results cost anything.