RSS and Atom Feed Reader (bulk, with feed discovery) avatar

RSS and Atom Feed Reader (bulk, with feed discovery)

Pricing

from $0.22 / 1,000 item listeds

Go to Apify Store
RSS and Atom Feed Reader (bulk, with feed discovery)

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

Steadydata Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

31 minutes ago

Last modified

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.blog works 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 to https://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, and feedType says 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, publishedAt was filled on 100% of the rows. publishedText keeps 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. content carries 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.nl answers 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 free BLOCKED error 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.

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.