RSS Feed Reader: RSS, Atom & JSON Feeds (with discovery)
Pricing
from $0.30 / 1,000 feed item returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Features
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 as24 hoursor7 days. Run it on a schedule withpublishedAfter: "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
summaryis 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
| Field | Type | Default | Notes |
|---|---|---|---|
feedUrls | array | - | Feed URLs, or pages that advertise a feed. Required. |
publishedAfter | string | - | 2026-10-01, 2026-10-01T08:00:00Z, 24 hours, 7 days, 2 weeks. Undated items are kept. |
maxItemsPerFeed | integer | 50 | Up to 1,000, in the feed's own order. |
includeContent | boolean | false | Adds contentHtml and contentText. |
discoverFeeds | boolean | true | Read the feeds a web page advertises. |
requestDelayMs | integer | 500 | Pause 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:
| Event | Price | Per 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.