RSS Feed Reader & Scraper — Bulk RSS, Atom & Podcast to JSON avatar

RSS Feed Reader & Scraper — Bulk RSS, Atom & Podcast to JSON

Pricing

Pay per event

Go to Apify Store
RSS Feed Reader & Scraper — Bulk RSS, Atom & Podcast to JSON

RSS Feed Reader & Scraper — Bulk RSS, Atom & Podcast to JSON

Bulk RSS feed reader and scraper. Paste up to 100 RSS, Atom, JSON Feed or podcast URLs (or site URLs — feeds are auto-discovered) and get one clean JSON row per item: title, link, ISO date, author, text summary, HTML content, tags, audio enclosure, GUID, plus a per-feed summary with a verdict.

Pricing

Pay per event

Rating

0.0

(0)

Developer

daehwan kim

daehwan kim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Categories

Share

Paste a list of feeds, get every item back as clean JSON. This RSS feed reader and RSS scraper reads up to 100 RSS, Atom, JSON Feed and podcast feeds in one run and returns one flat row per item — title, link, ISO-8601 date, author, HTML-stripped summary, full HTML content, tags, audio enclosure and GUID — plus a per-feed summary with a one-line verdict such as TechCrunch — 12 new item(s) since 2026-08-30, latest 2026-09-02.

Hand it a plain website URL and it finds the feed for you. Schedule it, pipe it into a webhook, Google Sheets, Zapier or Make, or pull the dataset through the Apify API — everything you need to turn a pile of feeds into a monitoring, newsletter or research pipeline.

Powered by feedparser, the Python feed parser that has handled every feed dialect — and every broken feed — for twenty years.

Unofficial. This Actor wraps the open-source feedparser library (BSD-2-Clause) and is not affiliated with, endorsed by, or sponsored by any publisher, podcast network or feed provider. See LICENSE-NOTICE.md.

Why use RSS Feed Reader & Scraper?

  • Bulk, not one feed at a time — up to 100 feed URLs per run, fetched in parallel. A run over 20 news feeds finishes in seconds.
  • Every dialect — RSS 0.9x / 1.0 / 2.0, Atom 0.3 / 1.0, JSON Feed, CDF, iTunes and Media RSS namespaces. Malformed XML is repaired where possible and reported in parserWarning, not dropped.
  • Feed discovery — give it https://www.bbc.co.uk/news and it reads the feed the page advertises (<link rel="alternate">), falling back to well-known paths such as /feed and /rss.xml.
  • Normalised rows — the same fields for every item, regardless of the source format: published is always ISO-8601 UTC, summary is always plain text, contentHtml keeps the original markup.
  • Podcast-awareenclosureUrl, enclosureType, enclosureLength and hasAudio on every episode; isPodcast on the feed summary.
  • A verdict, not just rows — each feed gets a feed-summary row with itemCount, lastPublished, isPodcast and a one-line headline, and the run gets one summary row on top. Point a Slack or email integration at those rows and you have a feed monitor.
  • Incremental — set since to an ISO date and only newer items come back. Combine with a schedule to poll feeds hourly and pay only for what is new.
  • Honest and light — one request per feed, an honest bot User-Agent, no browser, no login, no bypassing of bot protection. A publisher that blocks the request is reported in a notice row with the HTTP status.

How to use RSS Feed Reader & Scraper

  1. Paste your feed or site URLs into Feed or site URLs.
  2. Optionally set Max items per feed (default 50) and Only items published since (e.g. 2026-08-30).
  3. Click Start and read the results in the Output tab, or pull them through the Apify API. Filter on rowType == "item" for the articles.

Input

FieldTypeDescription
feedUrlsarrayUp to 100 feed or site URLs. Required.
maxItemsPerFeedintegerNewest items kept per feed, 1–500. Default 50.
discoverFeedsbooleanFind the feed behind a website URL. Default true.
sincestringISO-8601 date or datetime; older items are skipped, undated items are kept.
{
"feedUrls": [
"https://feeds.bbci.co.uk/news/rss.xml",
"https://techcrunch.com/feed/",
"https://hnrss.org/frontpage",
"https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml",
"https://www.theguardian.com/world/rss",
"https://stratechery.com/feed/"
],
"maxItemsPerFeed": 50,
"discoverFeeds": true,
"since": "2026-08-30"
}

Output

Every dataset row carries a rowType:

rowTypeWhat it isCharged
itemOne feed item (article, post, episode)yes
feed-summaryOne per readable feed — counts, lastPublished, isPodcast, headlineno
noticeStatus rows: summary (whole run), feed-failed, feed-empty, no-items-since, no-input, targets-truncated, free-plan-cap, charge-limit-reached, billing-unavailable, invalid-inputno

Bad input or an unreadable feed ends the run as SUCCEEDED with a notice row, so scheduled runs keep going.

{
"rowType": "item",
"feedTitle": "BBC News",
"feedUrl": "https://feeds.bbci.co.uk/news/rss.xml",
"sourceUrl": "https://www.bbc.co.uk/news",
"title": "Iran attacks US bases in Middle East after reports US strike killed five at wedding party",
"link": "https://www.bbc.co.uk/news/articles/cj06q4ynpmjo",
"published": "2026-09-02T05:12:07+00:00",
"publishedRaw": "Wed, 02 Sep 2026 05:12:07 GMT",
"author": null,
"summary": "The Iranian Red Crescent says a child was among those killed when shrapnel from a US strike hit a wedding.",
"contentHtml": "<p>The Iranian Red Crescent says a child was among those killed …</p>",
"tags": ["World"],
"enclosureUrl": null,
"enclosureType": null,
"enclosureLength": null,
"hasAudio": false,
"guid": "https://www.bbc.co.uk/news/articles/cj06q4ynpmjo#0",
"language": null,
"commentsUrl": null,
"imageUrl": "https://ichef.bbci.co.uk/ace/standard/240/cpsprodpb/38d2/live/03a25690.jpg",
"fetchedAt": "2026-09-02T06:04:03.160062+00:00"
}

A podcast episode looks the same, with enclosureUrl pointing at the audio file, enclosureType such as audio/mpeg and hasAudio: true.

The feed-summary row for that feed:

{
"rowType": "feed-summary",
"feedTitle": "BBC News",
"feedUrl": "https://feeds.bbci.co.uk/news/rss.xml",
"sourceUrl": "https://www.bbc.co.uk/news",
"headline": "BBC News — 12 new item(s) since 2026-08-30, latest 2026-09-02",
"fetchStatus": "ok",
"itemCount": 12,
"itemsInFeed": 35,
"itemsFilteredBySince": 23,
"audioItemCount": 0,
"lastPublished": "2026-09-02T05:12:07+00:00",
"isPodcast": false,
"feedLink": "https://www.bbc.co.uk/news",
"feedDescription": "BBC News - News Front Page",
"feedLanguage": "en-gb",
"feedVersion": "rss20",
"feedImageUrl": "https://news.bbcimg.co.uk/nol/shared/img/bbc_news_120x60.gif",
"discoveredVia": "link-alternate",
"parserWarning": null
}

The run summary row (noticeCode: "summary") carries feedsOk, feedsEmpty, feedsFailed, itemsDelivered, audioItemCount, podcastFeeds and a fetchStatusDistribution such as {"ok": 5, "http-403": 1}.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Data table

FieldDescription
rowTypeitem, feed-summary or notice
feedTitle / feedUrl / sourceUrlThe feed's title, the URL actually read, and the URL you supplied
title / link / guidItem title (entities decoded, tags stripped), permalink and unique id
published / publishedRawISO-8601 UTC timestamp (published, else updated) and the raw string from the feed
authorAuthor name or email as given by the feed
summaryPlain-text summary with HTML removed
contentHtmlFull item content as HTML, when the feed carries it
tagsCategory / tag terms
enclosureUrl / enclosureType / enclosureLength / hasAudioAttached media — audio for podcasts, video or files for other feeds
imageUrlThumbnail or media image, when present
language / commentsUrlItem language and comments link, when present
fetchedAtUTC timestamp of the read
headlineOne-line verdict on the feed-summary row
fetchStatusok, http-403, http-404, timeout, not-a-feed, no-feed-found, …
itemCount / itemsInFeed / itemsFilteredBySinceItems delivered, items present, items skipped by since
lastPublished / isPodcast / feedVersion / discoveredVia / parserWarningFeed-level facts

Pricing

Pay-per-event: $0.005 per run plus $0.002 per feed item. Twenty feeds returning 500 items cost $1.01 for that run. Every item row written to the dataset is charged; feed-summary and notice rows are not. Apify platform compute is billed separately per your plan.

Free-plan runs return up to 25 items, shared evenly across the feeds you supplied; upgrade your Apify plan to receive the full result set in one run.

Tips

  • Schedule the Actor and set since to the time of the previous run to build an incremental feed monitor that only returns — and only charges for — new items.
  • Feed discovery tries the page's own <link rel="alternate"> first, then /feed, /rss, /rss.xml, /atom.xml, /feed.xml, /index.xml. For sites that hide their feed elsewhere, paste the feed URL directly.
  • maxItemsPerFeed counts the newest items; podcast archives with hundreds of episodes can be pulled in full by raising it to 500.
  • Filter on hasAudio == true to keep only podcast episodes across a mixed list of feeds.
  • If a publisher answers http-403 or http-429, that is the publisher's bot policy; the Actor reports it and moves on rather than trying to get around it.

FAQ, disclaimers, and support

Does it fetch the full article? No. It returns what the feed publishes — for many feeds that is the full contentHtml, for others a summary and a link. Pair it with a content-extraction Actor for the article body.

Does it work with JSON Feed and podcasts? Yes. JSON Feed is parsed like any other format; podcast episodes carry their audio enclosure and the feed summary flags isPodcast.

Why did a feed come back as feed-failed? The fetchStatus says why: http-403 means the publisher blocks automated readers, timeout means no answer within 15 seconds, not-a-feed means the URL served something other than a feed and discovery was off or found nothing.

Privacy & data responsibility. The Actor reads only publicly syndicated content. You are the data controller for the feed list you submit and for any personal data the feeds contain (author names, for instance); ntriqpro is a data processor acting solely on your instructions. Results are written only to your own run's dataset and we do not store them. You are responsible for the terms of service and copyright of every site you read, and for GDPR, CCPA and other applicable laws in how you reuse the content.

Open-source licence. Built on feedparser (BSD-2-Clause) by Kurt McKee and Mark Pilgrim, with requests (Apache-2.0). It is an independent integration, not an official distribution. See LICENSE-NOTICE.md.

Found a bug or want a feature? Use the Issues tab. Custom solutions available.

Used this Actor? A sentence in the Reviews tab about what you used it for helps the next person decide.

Works well with

  • lighthouse-website-audit — Score the sites behind the feeds you just read for performance, SEO and accessibility in one batch.
  • whois-domain-lookup — Check who registers each publisher domain, how old it is and when it expires before you cite or syndicate it.

Every run of this Actor also returns these suggestions in the nextSteps field of its summary row.