RSS Feed Reader: RSS, Atom & JSON Feeds (with discovery) avatar

RSS Feed Reader: RSS, Atom & JSON Feeds (with discovery)

Pricing

from $0.30 / 1,000 feed item returneds

Go to Apify Store
RSS Feed Reader: RSS, Atom & JSON Feeds (with discovery)

RSS Feed Reader: RSS, Atom & JSON Feeds (with discovery)

RSS feed reader: reads the RSS, Atom, RDF and JSON feeds you name into clean rows: title, link, dates, author, text summary, categories and enclosures, optionally full content. Give a feed URL or a page that advertises one. Filter by date. Obeys robots.txt; no proxy, no login.

Pricing

from $0.30 / 1,000 feed item returneds

Rating

0.0

(0)

Developer

WrenTools

WrenTools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Features

Limited permissions

Share

RSS, Atom & JSON Feed Reader (with feed discovery)

Turn the feeds you follow into clean, uniform rows you can filter, store, or pass to the next step of an automation. Give it feed URLs, or ordinary web pages that advertise a feed, and get back one row per item: title, link, published and updated dates (UTC, ISO 8601), author, a plain-text summary, categories, enclosures (podcast audio, attached files) and, if you ask, the full content.

RSS 0.9x/1.0/2.0, RDF, Atom and JSON Feed 1.0/1.1 all come out in the same shape. Parsing uses feedparser (BSD licence), which tolerates the malformed feeds found in the wild, resolves relative links and strips scripts from HTML content. JSON Feed is read directly.

Podcasts: our Python and Node example reads a podcast's feed with this Actor, sends each episode's audio link (enclosures) to our Audio & Video Transcription Actor, and saves one timestamped transcript per episode that you can search.

Spreadsheets: our Python and Node example turns the feeds you follow into one CSV of posts, newest first, and on each later run adds only the posts that are new.

See it run: our video Parse RSS Feeds in Python (feedparser): 0 Errors, a Whole Blog Missing shows a plain feedparser script that reports no errors while a whole blog is missing, and the same feeds read by this Actor's parser; the written version walks through four feedparser traps with the code. We made the video; its narration is a synthetic voice. Our post Why feedparser's published_parsed has no time zone, and how to read it measures five ways to convert feedparser's dates; two of them were hours off.

What you get

  • One row per item, with the feed's title, link and format on every row, so rows from many feeds can be mixed.
  • Feed discovery: give a blog's home page and the Actor reads the feeds it advertises with <link rel="alternate"> (up to 5 per page).
  • A date filter (publishedAfter): a date, a date-time, or a period such as 24 hours or 7 days. Run it on a schedule with publishedAfter: "1 day" for a daily digest.
  • A plain-text summary on each item that has text (HTML removed and cut at 2,000 characters; a JSON Feed's own summary is passed on as written), and optionally the full content as sanitized HTML and as text (includeContent).
  • The author on every item the feed gives one for: an item's own author, or, when it names none, the author the feed names once for all its items (as the JSON Feed 1.1 standard says applies; Atom feeds are read the same way).
  • Duplicate URLs are read once.

Failures are reported as rows with "type": "error" and are not charged: fetch-failed, robots-disallowed, robots-disallowed-redirect (the URL redirected to one that site's robots.txt does not allow, so it was not fetched there), not-a-feed, no-feed-found, feed-too-large. A feed whose whole reply takes longer than 60 seconds is a fetch-failed row whose message starts deadline-exceeded, and the run goes on to the next feed: a server that sends a feed very slowly cannot hold the run.

Respectful by design

  • Only the URLs you list are fetched, plus the feeds a listed page advertises. Nothing is crawled. The site's robots.txt is read first and obeyed, and so is the robots.txt of the site any redirect leads to, before the request goes there; requests to one site are spaced (500 ms by default). No proxy, no browser, no login.
  • Only public internet addresses are fetched. A URL or redirect into a private, loopback or link-local network is refused.

Read only feeds you are allowed to use, and respect each publisher's terms for what you do with the content.

Input

FieldTypeDefaultNotes
feedUrlsarray-Feed URLs, or pages that advertise a feed. Required.
publishedAfterstring-2026-10-01, 2026-10-01T08:00:00Z, 24 hours, 7 days, 2 weeks. Undated items are kept.
maxItemsPerFeedinteger50Up to 1,000, in the feed's own order.
includeContentbooleanfalseAdds contentHtml and contentText.
discoverFeedsbooleantrueRead the feeds a web page advertises.
requestDelayMsinteger500Pause between requests to one site.

Output

One dataset row per item, in input order and the feed's own order:

{"type": "item", "requestedUrl": "https://blog.example/", "feedUrl": "https://blog.example/feed.xml",
"feedTitle": "Example Blog", "feedLink": "https://blog.example/", "feedFormat": "rss20",
"title": "Spring survey: turbidity fell at all six sites", "link": "https://blog.example/posts/spring-survey",
"id": "https://blog.example/?p=412", "published": "2026-10-14T09:00:00Z", "updated": null,
"author": "Field Team", "summary": "All six sampling sites showed lower turbidity than last spring.",
"categories": ["Surveys"],
"enclosures": [{"url": "https://blog.example/files/report.pdf", "type": "application/pdf", "length": 2048}]}

A failure:

{"type": "error", "requestedUrl": "https://blog.example/about", "feedUrl": "https://blog.example/about",
"error": {"code": "no-feed-found", "message": "the page is HTML and advertises no RSS, Atom or JSON feed"}}

Key-value store record SUMMARY: URLs requested, feeds read, items returned, errors, the date cut-off used, and why the run stopped early if it did.

Pricing

Pay per event, no start fee, and nothing for failures:

EventPricePer 1,000
feed-read (one feed fetched and parsed)$0.001$1.00
item-read (one item returned)$0.0003$0.30

Reading 10 feeds and getting 20 new items from each costs $0.07. Items the date filter drops are not charged. When you set a maximum charge for a run, the Actor returns the items it covers and stops.

Limits

  • It reads what a feed contains now. A feed lists only the items its publisher still keeps in it, so for history, run it on a schedule.
  • Feeds behind a login or a paywall cannot be read: there is no cookie or password field.
  • 20 MB per feed at most.