RSS Feed Reader – Parse RSS, Atom & Podcast Feeds to JSON avatar

RSS Feed Reader – Parse RSS, Atom & Podcast Feeds to JSON

Pricing

from $0.80 / 1,000 results

Go to Apify Store
RSS Feed Reader – Parse RSS, Atom & Podcast Feeds to JSON

RSS Feed Reader – Parse RSS, Atom & Podcast Feeds to JSON

Read any RSS, Atom, RDF or podcast feed and get clean, structured items: title, link, author, date, full content, categories, media/enclosure and podcast duration. Auto-discovers the feed from a website URL. Filter by keyword or date. Export to JSON, CSV or Excel.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Security

Limited permissions

Share

RSS Feed Reader — Parse RSS, Atom, RDF & Podcast Feeds to JSON

The fastest way to turn any feed into clean, structured data. This RSS feed reader and RSS scraper reads any RSS, Atom, RSS 1.0 (RDF) or podcast feed — or even a plain website URL, from which it auto-discovers the feed — and returns every item as a tidy record: title, link, author, publish date, summary, full content, categories, media/enclosure URL and podcast duration. No login, no coding, no browser. Just paste feed URLs and run.

Export every item to JSON, CSV, Excel, or API.

Built for news-monitoring teams, content aggregators, AI/RAG engineers, podcast analysts, SEO and PR agencies, and developers who need a reliable, normalized feed-to-JSON pipeline without maintaining a parser themselves.


🔎 Why scrape RSS feeds?

RSS, Atom and podcast feeds are the open web's firehose. Nearly every news site, blog, magazine, government portal, forum, YouTube channel and podcast network publishes one — a machine-readable list of its latest articles or episodes, updated the moment new content goes live. That makes feeds the cheapest, cleanest, most up-to-date source of published content on the internet, and makes an RSS feed scraper the simplest way to turn that firehose into a dataset.

The problem is that feeds are messy and inconsistent. There are three competing standards (RSS 2.0, Atom 1.0, RSS 1.0/RDF) plus the iTunes/podcast extensions, each with its own tags, namespaces, date formats and quirks. Content is wrapped in CDATA, littered with HTML, and the field you want (author, category, episode duration, the audio enclosure) lives under a different element in every feed. Writing and maintaining a parser that handles all of this — plus redirects, CDNs, gzip and malformed markup — is a chore. This RSS feed reader does it for you and returns one flat, predictable schema no matter what the source looks like.

Common reasons people scrape RSS feeds:

  • 📰 Monitor the news — track dozens or hundreds of publishers in one combined dataset and filter by keyword.
  • 🤖 Feed AI / RAG pipelines — pull clean, plain-text article bodies straight into LLMs, embeddings and vector databases.
  • 🎧 Analyze podcasts — collect episodes with their audio URL, media type and duration for research or downloads.
  • 🧲 Aggregate content — build a unified feed for a newsletter, dashboard, Slack digest or internal tool.
  • 🕵️ Watch competitors — see exactly what rival blogs publish, and when, as soon as it goes live.
  • 📈 Track trends & topics — follow a keyword across many sources to spot what's gaining momentum.
  • 🔁 Automate workflows — trigger Make, Zapier or a webhook whenever a feed has new items.

✨ What this RSS feed scraper does

  • ✅ Reads every feed format — RSS 2.0, Atom 1.0, RSS 1.0 (RDF) and iTunes podcast feeds, including CDATA, namespaces, gzip and lightly malformed markup.
  • ✅ Auto-discovers feeds from a website URL — don't know the feed address? Paste the homepage and the Actor finds the <link rel="alternate" type="application/rss+xml"> feed for you.
  • ✅ Returns clean, structured items — item fields (title, link, author, publishedAt, publishedRaw, summary, content, categories, guid, commentsUrl), media/podcast fields (isPodcast, mediaUrl, mediaType, mediaLength, durationSeconds, image) and feed context (feedTitle, feedLink, feedDescription, feedLanguage, feedUrl).
  • ✅ Clean text or raw HTML — article bodies are stripped to readable plain text by default, with an option to keep the original HTML markup.
  • ✅ Podcast-ready — the audio/video enclosure URL, MIME type and episode duration in seconds (parsed from HH:MM:SS or raw seconds) are returned for every podcast item.
  • ✅ Built-in filters — keyword filter (title + content, case-insensitive) and a "since date" filter to pull only what's new.
  • ✅ Bulk-friendly — read one feed or thousands; load a big list from a file, URL, Google Sheet or Request Queue and get one merged dataset.
  • ✅ De-duplicated input — duplicate feed URLs are collapsed automatically so a feed is never read twice.
  • ✅ Fast, cheap & reliable — pure HTTP (no browser), reads feeds in parallel with configurable concurrency, and retries with a fresh proxy IP for feeds behind a CDN.
  • ✅ Any export — JSON, CSV, Excel, HTML or the Apify API.

In a recent verification run across 20 mixed feeds, the Actor returned 1,699 de-duplicated items in ~97 seconds on datacenter proxies — including one podcast feed that alone contributed 1,106 episodes, each with a parsed durationSeconds, audio mediaUrl and mediaType.


🎯 Use cases

  • 📰 Newsrooms & media monitoring — aggregate wire services, newspapers and blogs into a single keyword-filterable stream.
  • 🤖 AI / LLM engineers — harvest clean article text as a training, fine-tuning or retrieval-augmented-generation corpus.
  • 🎧 Podcast platforms & researchers — build an episode catalog with audio links and durations across many shows.
  • 📣 PR & brand teams — watch for mentions of a brand, product or executive across hundreds of publications.
  • 📊 Market & competitive intelligence — follow competitor blogs and industry news for product launches and announcements.
  • 🧑‍💻 Developers & no-code builders — replace a brittle in-house feed parser with one normalized API endpoint.
  • 📬 Newsletter & digest creators — pull the latest items from your favorite sources into one curated issue.
  • 🔍 SEO & content strategists — track topics and publishing cadence across a niche to inform your own calendar.

📥 Input

Provide one or more feed URLs (or website URLs for auto-discovery). Leave everything blank to read a built-in sample. All inputs are optional.

FieldTypeDescription
feedUrlsarray (string list)One RSS / Atom / RDF / podcast feed URL per line. You can also paste a plain website URL — the feed is auto-discovered.
startUrlsarray (request list)Advanced. Load many feed URLs in bulk from a file, URL, Google Sheet or Request Queue.
maxItemsPerFeedintegerMaximum items to keep per feed. 0 = all available items. Default 0.
keywordstringOnly return items whose title or content contains this text (case-insensitive).
sinceDatestringOnly return items published on or after this date, e.g. 2026-07-01.
includeFullContentbooleanInclude the full article/episode body as plain text (when richer than the summary). Default true.
includeHtmlbooleanAlso include the original HTML of the content. Default false.
proxyConfigurationobjectProxy settings. Datacenter proxies (the default) are more than enough for reading feeds.
maxConcurrencyintegerHow many feeds to read in parallel. Recommended 5–15. Default 8.

Example input

{
"feedUrls": [
"https://feeds.bbci.co.uk/news/rss.xml",
"https://www.theverge.com",
"https://feeds.megaphone.fm/vergecast"
],
"maxItemsPerFeed": 50,
"keyword": "AI",
"sinceDate": "2026-07-01",
"includeFullContent": true,
"includeHtml": false,
"proxyConfiguration": { "useApifyProxy": true },
"maxConcurrency": 8
}

📤 Output

Each dataset row is one feed item (article or episode) with its source feed attached. Here is a real podcast item from the verification run (The Vergecast), showing the fully-parsed media and duration fields:

{
"feedUrl": "https://feeds.megaphone.fm/vergecast",
"feedTitle": "The Vergecast",
"feedLink": "https://www.theverge.com/the-vergecast",
"feedDescription": "The Vergecast is the flagship podcast from The Verge about tech and the future…",
"feedLanguage": "en",
"title": "AI is dividing the math world in two",
"link": null,
"guid": "b1f2c3d4-e5f6-11f0-8340-2f04715f6533",
"author": "The Verge",
"publishedAt": "2026-10-23T15:55:00.000Z",
"publishedRaw": "Fri, 23 Oct 2026 15:55:00 -0000",
"summary": "We dig into why a new wave of AI provers is splitting mathematicians…",
"content": "We dig into why a new wave of AI provers is splitting mathematicians… (full episode notes)",
"categories": ["Technology", "Podcasts"],
"isPodcast": true,
"mediaUrl": "https://www.podtrac.com/pts/redirect.mp3/traffic.megaphone.fm/VMP4271734823.mp3",
"mediaType": "audio/mpeg",
"mediaLength": "0",
"durationSeconds": 2612,
"image": "https://megaphone.imgix.net/podcasts/.../image.jpg",
"commentsUrl": null
}

And a typical news article item (BBC News), where link, author and categories are populated instead of the podcast media fields:

{
"feedUrl": "https://feeds.bbci.co.uk/news/rss.xml",
"feedTitle": "BBC News",
"feedLink": "https://www.bbc.co.uk/news",
"feedLanguage": "en-gb",
"title": "Ukraine air raid app apparently hacked as users receive false radiation threat",
"link": "https://www.bbc.co.uk/news/articles/c51kdy1ew7zvo?at_medium=RSS&at_campaign=rss",
"guid": "https://www.bbc.co.uk/news/articles/c51kdy1ew7zvo#1",
"author": null,
"publishedAt": "2026-11-01T22:38:24.000Z",
"publishedRaw": "Sat, 01 Nov 2026 22:38:24 GMT",
"summary": "Authorities say there is no threat and have advised the public to stay calm…",
"categories": null,
"isPodcast": false,
"mediaUrl": "https://ichef.bbci.co.uk/news/1024/branded_news/....jpg",
"mediaType": null,
"durationSeconds": null,
"image": "https://ichef.bbci.co.uk/news/1024/....jpg",
"commentsUrl": null
}

Field reference

FieldDescription
feedUrlSource feed URL (after auto-discovery, if any). Always present.
feedTitleSource feed title. Always present.
feedLinkFeed's website link.
feedDescriptionFeed description (present when declared).
feedLanguageFeed language (present when the feed declares one).
titleItem / episode title. Always present.
linkItem URL. Present on news/blog items; many podcast feeds omit a per-item link and identify episodes by guid instead.
guidUnique item identifier (present on virtually every item).
authorAuthor / creator (present when the feed includes it).
publishedAtPublish date, normalized to ISO 8601. Always present when the feed dates the item.
publishedRawOriginal publish-date string exactly as in the feed.
summaryShort summary, cleaned to plain text. Effectively always present.
contentFull article/episode body as plain text (present when the feed ships a body richer than the summary and includeFullContent is on).
contentHtmlOriginal HTML of the content (only when includeHtml is on).
categoriesCategories / tags (present when the feed includes them).
isPodcasttrue when the item has an audio/video enclosure. Always present (true/false).
mediaUrlEnclosure / media URL — audio for podcasts, lead image for many news feeds.
mediaTypeMedia MIME type, e.g. audio/mpeg (present when the enclosure declares one).
mediaLengthMedia size in bytes exactly as declared by the feed (some feeds declare 0).
durationSecondsPodcast episode duration in seconds, parsed from HH:MM:SS or raw seconds.
imageItem image URL (item, iTunes or feed image).
commentsUrlComments page URL (common on blogs and Hacker News).

Honest note on coverage. Feeds are inconsistent, so coverage is data-dependent and segment-dependent — and that is a feature, not a bug. In the verification run, core fields were effectively 100%: title, publishedAt, publishedRaw, isPodcast, feedTitle, feedUrl, feedLink all 100%, summary 99.9%, guid 98.2%, image 97.6%. For podcast items, durationSeconds, mediaUrl, mediaType and mediaLength were 100%. For news items, link was 100% while audio-only fields are naturally empty, and author/categories sat around 65% (e.g. the BBC omits author; the NYT and Guardian include it). Fields like link, author, categories, content, commentsUrl and the media*/durationSeconds set are present whenever the source feed provides them for that kind of item.


🔁 Pagination & scale

An RSS, Atom or podcast feed is a complete document: a single HTTP request returns all of the feed's current items (anywhere from the latest 10 to 1,000+, depending on the publisher — The Vergecast returned 1,106 in one call in testing), so there is no per-feed cursor or "next page" to crawl. This RSS feed reader fetches each feed in one request, parses every item it contains, and respects maxItemsPerFeed to cap how many it keeps.

Scale comes from reading many feeds in parallel. Paste a long list in feedUrls, or bulk-load thousands of feeds through startUrls (file, URL, Google Sheet or Request Queue); the Actor de-duplicates them and processes them concurrently (maxConcurrency, default 8). Every item from every feed lands in one merged dataset, so a run over dozens or hundreds of feeds yields thousands of de-duplicated records in a single output — the verification run produced 1,699 items across 20 feeds with a 0.8% duplicate rate. Feeds behind a CDN are retried with a fresh proxy IP, and unreachable, timed-out or non-feed URLs are skipped gracefully without failing the run.


⚙️ How to use

  1. Open the Actor on the Apify Console and click Try for free / Start.
  2. Add your Feed URLs — one per line. These can be feed URLs or website URLs:
    https://feeds.bbci.co.uk/news/rss.xml
    https://www.theverge.com
    https://feeds.megaphone.fm/vergecast
  3. (Optional) Set Max items per feed, a Keyword filter, or a Since date.
  4. Click Save & Start, then export from the Dataset tab as JSON, CSV, Excel or HTML.
  5. Automate it: run the Actor via the Apify API, put it on a schedule for a rolling dataset, or connect it to Make, Zapier, Google Sheets or a webhook to react to new items automatically.

💡 Tips

  • 🔎 Paste websites, not just feeds — if you don't have the exact feed URL, the homepage usually works thanks to auto-discovery via the page's <link rel="alternate"> tag.
  • 🔍 Use the keyword filter to monitor one topic across dozens of publishers in a single run.
  • 📆 Use sinceDate for incremental runs — combined with a schedule, you only ever pull what's new.
  • 🧹 Keep includeHtml off for clean text (the default); turn it on only when you need the original markup for rendering.
  • 🎧 For podcast analysis, filter on isPodcast and read mediaUrl + durationSeconds straight from the dataset — both are 100% populated on real podcast feeds.
  • 📚 Bulk-load via startUrls for large monitoring lists, and raise maxConcurrency (up to ~15) to finish faster.

❓ FAQ

Which feed formats are supported? RSS 2.0, Atom 1.0, RSS 1.0 (RDF) and podcast (iTunes) feeds — including CDATA sections, XML namespaces, gzip and lightly malformed markup.

Is scraping RSS feeds legal? Feeds are published specifically to be read by software, and this RSS scraper reads publicly available feeds. Respect each publisher's terms of service and copyright — feed content remains the property of its publisher — and use the collected data lawfully. You are responsible for how you use it.

I only have the website, not the feed URL — will it still work? Yes. Paste the website URL and the Actor auto-discovers the feed from the page's <link rel="alternate"> tag.

How many results do I get, and how fast? As many as the feeds contain. Feeds are read in parallel (default 8 at a time), so dozens of feeds finish in a minute or two — the verification run pulled 1,699 items from 20 feeds in ~97 seconds. A single feed with 10 items returns in seconds.

Do I need proxies or a login? No login ever. Datacenter proxies (the default) are more than enough for reading feeds; the Actor also retries with a fresh IP for feeds behind a CDN. There is no need to pay for residential proxies.

In what format is the data, and is there an API? Structured JSON by default, exportable to CSV, Excel or HTML, and fully available through the Apify API for automation and the RSS feed API use case.

How fresh is the data? As fresh as the feed. Feeds update the moment a publisher posts; schedule the Actor and use sinceDate to capture new items continuously.

Can I filter by keyword or date? Yes — keyword filters on title and content (case-insensitive) and sinceDate keeps only items published on or after a given date.

Can I get podcast audio URLs and episode durations? Yes — mediaUrl, mediaType, mediaLength and durationSeconds are returned for podcast items, and isPodcast flags them. In testing, all four were 100% populated across 1,106 real podcast episodes.

Why is content sometimes empty while summary is filled? Many feeds ship only a <description>. To avoid duplicating the same text, content is only added when the feed provides a genuinely richer full body than the summary.

Why is link null on some podcast episodes but guid is set? Because many podcast feeds don't include a per-item <link> — they identify each episode by its guid and point you to the audio via mediaUrl. News and blog feeds supply link reliably (100% in testing). Every item always has at least one identifier (guid or link).

Why are author or categories null for some items? Because that feed didn't include them (the BBC, for example, omits author). These fields are populated whenever the source feed provides them.



Ready to turn feeds into data? Paste your feed URLs, click Start, and export clean RSS, Atom and podcast items as JSON, CSV or Excel in seconds. 📰