# RSS Feed Reader - Bulk RSS & Atom Feed Parser (`logiover/bulk-rss-feed-reader`) Actor

Read and parse RSS, Atom and RDF feeds in bulk, or auto-discover feeds from any website. Extract thousands of articles with full metadata for news monitoring, content aggregation and AI/RAG pipelines. No API key, export to CSV or JSON.

- **URL**: https://apify.com/logiover/bulk-rss-feed-reader.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## RSS Feed Reader — Bulk RSS, Atom & RDF Feed Parser to JSON/CSV (No API / No login)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Category](https://img.shields.io/badge/Category-Content%20%26%20Web%20Data-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B) ![Formats](https://img.shields.io/badge/Feeds-RSS%20%7C%20Atom%20%7C%20RDF-E8590C)

Read hundreds of **RSS, Atom and RSS 1.0 / RDF feeds** in a single run and get **one clean row per item**. Paste a list of feeds — or just a list of plain website URLs and let the reader **auto-discover their feeds** — and it normalizes every dialect, de-duplicates entries and returns full metadata for each article: **`title`, `link`, `guid`, `pubDate` (ISO 8601), `author`, `categories`, `contentSnippet`, full `content` and the `enclosureUrl`** (podcast / media audio). It's a **bulk RSS → JSON / CSV converter**, an **Atom & RDF feed parser** and a **feed aggregator** rolled into one. **Fast pure HTTP, high concurrency, no browser, no API key, no login.**

> ### 🏆 Why this RSS feed reader?
>
> **12 fields per item** · **thousands of items per run** · direct HTTP (no browser) · feed auto-discovery from plain URLs · de-dupe by GUID/link · ISO-8601 dates · export to JSON / CSV / Excel. The unofficial **RSS-to-JSON API alternative** for news monitoring, content aggregation and AI / RAG pipelines.

***

### ✨ What this Actor does / Key features

- 📡 **Reads every common feed format** — **RSS 2.0**, **RSS 1.0 / RDF** and **Atom**, all normalized into one consistent item shape so you never care which dialect a source uses.
- 🔎 **Feed auto-discovery** — paste a normal website URL and the reader finds its feed via `<link rel="alternate">` tags and common paths (`/feed`, `/rss`, `/rss.xml`, `/atom.xml`, `/index.xml`).
- 🧾 **Full item metadata** — `title`, `link`, `guid`, `pubDate`, `author`, `categories`, `contentSnippet`, full HTML `content` and `enclosureUrl` for every entry.
- 🧹 **Automatic de-duplication** — items that repeat across overlapping feeds are collapsed by **GUID / link**, so the same article never lands twice.
- 🗓️ **Normalized ISO 8601 dates** — every `pubDate` is parsed into a sortable, filterable timestamp regardless of the feed's original date format.
- 🎙️ **Podcast & media ready** — each item carries the `enclosureUrl` field, so podcast RSS feeds yield per-episode audio/media links out of the box.
- 🛡️ **Per-feed error isolation** — one broken, empty or slow feed is skipped without stopping the run; every other feed still produces rows.
- ⚡ **Bulk & high concurrency** — pure HTTP with configurable parallelism; many feeds × many items = thousands of rows per run, fast and cheap.
- 🌐 **Proxy support** — Apify Proxy integration to dodge IP-based rate limits when reading hundreds of feeds at once.
- 📤 **Structured export** — one row per item, ready for **JSON, CSV, Excel or XML** and drop-in for spreadsheets, databases and LLM pipelines.

### 🚀 Quick start (3 steps)

1. **Configure** — paste your **Feed URLs** (RSS / Atom / RDF links, one per line). Or turn on **Discover feeds from websites** and paste plain site URLs instead.
2. **Run** — click **Start**. The Actor fetches every feed in parallel, parses each dialect, de-duplicates, and streams items into your dataset.
3. **Get your data** — open the **Output** tab and export to **JSON, CSV, Excel or XML**, or pull it via the Apify API.

### 📥 Input

Give the Actor at least one value in `feedUrls`. Everything else is optional.

#### Example — bulk-read a set of news & tech feeds

```json
{
  "feedUrls": [
    "https://hnrss.org/frontpage",
    "http://feeds.bbci.co.uk/news/rss.xml",
    "https://www.theverge.com/rss/index.xml",
    "https://techcrunch.com/feed/"
  ],
  "discoverFromWebsites": false,
  "maxItemsPerFeed": 0,
  "maxResults": 0,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

#### Example — auto-discover feeds from plain website URLs

```json
{
  "feedUrls": [
    "https://www.theverge.com/",
    "https://techcrunch.com/",
    "https://arstechnica.com/"
  ],
  "discoverFromWebsites": true,
  "maxItemsPerFeed": 25
}
```

#### Example — latest 10 episodes from podcast feeds (audio URLs)

```json
{
  "feedUrls": [
    "https://feeds.megaphone.fm/thedailyshow",
    "https://feeds.simplecast.com/54nAGcIl"
  ],
  "discoverFromWebsites": false,
  "maxItemsPerFeed": 10,
  "maxConcurrency": 5
}
```

| Field | Type | Description |
|-------|------|-------------|
| `feedUrls` | array | List of RSS / Atom / RDF feed URLs to read — one per line. When `discoverFromWebsites` is on, you can also paste plain website URLs and the reader auto-finds their feeds. **Required.** |
| `discoverFromWebsites` | boolean | Treat non-feed URLs as websites and auto-discover their feeds via `<link>` tags and common feed paths (`/feed`, `/rss.xml`, `/atom.xml`, etc.). Default `false`. |
| `maxItemsPerFeed` | integer | Maximum items to take from each feed. `0` = all available items. Default `0`. |
| `maxResults` | integer | Hard ceiling on total item rows across all feeds (caps run size and cost). `0` = unlimited. Default `0`. |
| `maxConcurrency` | integer | How many feeds to fetch in parallel. Higher is faster but uses more proxies (1–100). Default `10`. |
| `proxyConfiguration` | object | Apify Proxy settings. Recommended to avoid IP-based rate limits on large runs. Default: Apify Proxy on. |

> **Not sure of a site's feed URL?** Just paste the homepage (e.g. `https://example.com`) and turn on **Discover feeds from websites** — the reader inspects the page's `<link rel="alternate">` hints and probes common feed paths to locate and parse the feed for you.

### 📤 Output

One row per feed item — **12 fields**, exportable to JSON, CSV, Excel or XML. Here is a trimmed sample record:

```json
{
  "feedUrl": "https://techcrunch.com/feed/",
  "feedTitle": "TechCrunch",
  "title": "A new startup wants to reinvent the RSS reader",
  "link": "https://techcrunch.com/2026/06/14/rss-reader-startup/",
  "guid": "https://techcrunch.com/?p=2847193",
  "pubDate": "2026-06-14T16:32:00.000Z",
  "author": "Jane Doe",
  "categories": ["Startups", "Apps"],
  "contentSnippet": "The team behind the project says RSS is overdue for a comeback...",
  "content": "<p>The team behind the project says RSS is overdue for a comeback, and they may be right.</p>",
  "enclosureUrl": "",
  "scrapedAt": "2026-07-06T09:00:00.000Z"
}
```

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `feedUrl` | The feed URL the item came from |
| `feedTitle` | Title of the source feed / channel |
| `title` | Item / article title |
| `link` | Canonical URL of the item |
| `guid` | Unique item identifier (used for de-duplication) |
| `pubDate` | Publish date, normalized to ISO 8601 |
| `author` | Item author / creator (when the feed provides it) |
| `categories` | Tags / categories on the item (array) |
| `contentSnippet` | Plain-text summary / description |
| `content` | Full HTML content (when the feed provides it) |
| `enclosureUrl` | Attached media URL — podcast audio, image, etc. |
| `scrapedAt` | When this item was read, ISO 8601 |

</details>

### 💡 Use cases

- **News & brand monitoring** — track topics, mentions and outlets across hundreds of news feeds in near real time.
- **Content aggregation** — power a reader, dashboard or homepage from dozens of sources with a single de-duplicated stream.
- **AI / RAG / LLM data pipelines** — turn fresh feed content (title, link, date, author, full `content`) into structured rows for retrieval, summarization or fine-tuning.
- **Competitive intelligence** — watch competitor blogs, changelogs and press feeds and catch every new post.
- **Newsletter & podcast tracking** — follow Substack/blog feeds and podcast RSS, capturing the `enclosureUrl` audio link per episode.
- **Research & archiving** — snapshot what a set of sources published, with ISO timestamps, for analysis or compliance.

### 👥 Who uses it

News & media teams · content aggregators and reader apps · AI / RAG engineers building knowledge bases · competitive-intelligence analysts · podcast platforms & newsletter operators · researchers, journalists and data teams.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — you pay for the feed items you extract, with no separate Apify platform fees to calculate. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is there a public RSS API, and is this an RSS-to-JSON API alternative?**
There's no single official "RSS API" — RSS, Atom and RDF are open feed formats served as XML by each site. This Actor works as an unofficial **RSS-to-JSON API alternative**: give it feed (or website) URLs and it returns clean, structured JSON rows with no API key.

**Can I read RSS feeds without an API or login?**
Yes. There's **no API key and no login** — you just provide feed URLs (or plain websites with discovery on). The reader pulls each publicly available feed over direct HTTP and returns one row per item.

**How do I export RSS data to CSV or JSON?**
Run the Actor, then export the resulting dataset as **CSV, JSON, Excel or XML** from the Apify console or via the Apify API. Every feed item is one row, so it drops straight into a spreadsheet or data pipeline — an instant **RSS to JSON** and **RSS to CSV** converter.

**Is it legal to read / scrape RSS feeds?**
RSS and Atom feeds are published by sites specifically to be read by feed readers, and this Actor only fetches publicly available feed data. You are responsible for using the content in compliance with each source's terms and applicable laws such as GDPR.

**How much data can I get?**
You can read hundreds of feeds and thousands of items per run. Use `maxItemsPerFeed` to keep only the latest posts per source and `maxResults` to put a hard ceiling on a run's size and cost; leave both at `0` to backfill everything the feeds expose.

#### Can I read many RSS feeds at once?

Yes — this is a **bulk RSS reader**. Paste hundreds of feed URLs and the Actor fetches them in parallel (configurable `maxConcurrency`) and merges every item into a single dataset, with de-duplication across feeds.

#### Does it support Atom and RSS 1.0 / RDF feeds, not just RSS 2.0?

Yes. It parses **RSS 2.0**, **RSS 1.0 / RDF** and **Atom** and normalizes them all into the same item shape, so you don't have to care which dialect a source uses.

#### Can it find the RSS feed of a website automatically?

Yes — turn on **Discover feeds from websites** and paste plain site URLs. The reader reads the page's `<link rel="alternate">` tags and probes common feed paths (`/feed`, `/rss.xml`, `/atom.xml`, `/index.xml`, etc.) to locate the feed, then parses it. It works as a built-in **RSS feed discovery** tool.

#### How do I scrape podcast RSS feeds for episode audio URLs?

Paste your podcast feed URLs and each episode row includes the `enclosureUrl` field with the audio/media link, plus `title`, `pubDate` and `contentSnippet`. Set `maxItemsPerFeed` to grab only the latest N episodes.

#### How does de-duplication work?

Items that appear in more than one feed are collapsed by their **GUID / link**, so the same article won't show up twice even when you aggregate overlapping sources.

#### Can I use this for an AI / RAG / LLM news pipeline?

Absolutely. It outputs clean, structured rows (title, link, date, author, full `content`) that feed directly into **RAG / LLM** ingestion, summarization or classification. Schedule it and its GUID de-dupe means each run surfaces only the newly published items to keep your knowledge base fresh.

### 🔗 More content & website-data scrapers by logiover

Pair the RSS reader with the rest of the logiover content, monitoring and website-data suite:

| Actor | What it does |
|---|---|
| [Website Text & Markdown Crawler](https://apify.com/logiover/website-text-markdown-crawler) | Crawl a site and get clean Markdown for LLMs and RAG |
| [URL to Markdown](https://apify.com/logiover/url-to-markdown) | Convert any web page into clean Markdown |
| [Sitemap to URL Crawler](https://apify.com/logiover/sitemap-to-url-crawler) | Expand sitemaps into a full, crawlable URL list |
| [Website Change Monitor](https://apify.com/logiover/website-change-monitor) | Watch pages and get notified when content changes |
| [Wayback Machine URL Extractor](https://apify.com/logiover/wayback-machine-url-extractor) | Pull historical URLs for a domain from the Wayback Machine |
| [Website Contact Scraper](https://apify.com/logiover/website-contact-scraper) | Extract emails, phones and socials from any site |
| [JSON-LD Schema & Meta Tag Extractor](https://apify.com/logiover/json-ld-schema-meta-tag-extractor) | Grab structured data, OpenGraph and meta tags |
| [Social Card Preview API](https://apify.com/logiover/social-card-preview-api) | Render OpenGraph / Twitter card previews for links |
| [Website SEO Audit Crawler](https://apify.com/logiover/website-seo-audit-crawler) | Crawl a site and audit on-page SEO at scale |
| [Website Link Graph Crawler](https://apify.com/logiover/website-link-graph-crawler) | Map internal/external links across a whole site |
| [Broken Link Checker](https://apify.com/logiover/broken-link-checker) | Find dead links across pages and feeds |
| [Bulk URL Status Checker](https://apify.com/logiover/bulk-url-status-checker) | Check HTTP status for thousands of URLs at once |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify to poll your feeds hourly, daily or weekly — combined with GUID de-duplication it becomes a steady stream of only the *new* items across every source. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to **Make, n8n or Zapier** to build automated news, content and RAG pipelines.

### ⭐ Support & feedback

Found a bug or need an extra field? Open an issue on the **Issues** tab — response is usually fast. If this Actor saves you time, a **★★★★★ review** on the Store page genuinely helps and is hugely appreciated. 🙏

### ⚖️ Legal

This Actor reads only publicly available feed data and is intended for legitimate research, monitoring and content-aggregation use. You are responsible for complying with each source's terms of service, GDPR and any applicable local laws.

***

### 📝 Changelog

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
- Fixed the run Output link from `{{links.apiDefaultDatasetUrl}}` to `{{links.apiDefaultDatasetUrl}}/items` so the results table opens the dataset items endpoint.

#### 2026-08-01 — Health-check remediation

- August 2026 monthly health-check remediation is in progress; this build contains fixes verified from empty/default, Console-default, targeted live probes, or field-level semantic review.
- Fixed the run Output link from `{{links.apiDefaultDatasetUrl}}` to `{{links.apiDefaultDatasetUrl}}/items` so the results table opens the dataset items endpoint.
- The final four-input matrix verdict will be appended after post-build cloud revalidation.

#### 2026-07-06

- ✨ README overhaul: richer output sample, ready-to-run example scenarios, cross-suite links, and clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Initial release — bulk RSS/Atom/RDF feed reader with feed auto-discovery and full item metadata, CSV/JSON export, no API key.

***

\*Maintained: last verified 2026-09-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Actor input Schema

## `feedUrls` (type: `array`):

List of RSS / Atom / RDF feed URLs to read. If 'Discover feeds from websites' is on, you can also paste plain website URLs and the actor will auto-find their feeds. Optional — leave empty to read a small default set of popular news/tech feeds.

## `discoverFromWebsites` (type: `boolean`):

If an input URL is a normal website (not a feed), fetch its HTML and auto-discover RSS/Atom feeds via <link> tags and common feed paths (/feed, /rss.xml, /atom.xml, etc.).

## `maxItemsPerFeed` (type: `integer`):

Maximum number of items to extract from each feed. Set to 0 for all available items.

## `maxResults` (type: `integer`):

Maximum total number of item rows to output across all feeds. Keeps runs fast and cheap; raise it to pull everything (0 = unlimited).

## `maxConcurrency` (type: `integer`):

How many feeds to fetch in parallel. Higher is faster but uses more proxies.

## `proxyConfiguration` (type: `object`):

Recommended to avoid rate limiting and IP blocks. Uses Apify Proxy (automatic) by default.

## Actor input object example

```json
{
  "feedUrls": [
    "https://hnrss.org/frontpage",
    "http://feeds.bbci.co.uk/news/rss.xml",
    "https://www.theverge.com/rss/index.xml",
    "https://techcrunch.com/feed/"
  ],
  "discoverFromWebsites": false,
  "maxItemsPerFeed": 0,
  "maxResults": 1000,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The dataset containing all parsed feed items with title, link, publish date, author, categories and content.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "feedUrls": [
        "https://hnrss.org/frontpage",
        "http://feeds.bbci.co.uk/news/rss.xml",
        "https://www.theverge.com/rss/index.xml",
        "https://techcrunch.com/feed/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/bulk-rss-feed-reader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "feedUrls": [
        "https://hnrss.org/frontpage",
        "http://feeds.bbci.co.uk/news/rss.xml",
        "https://www.theverge.com/rss/index.xml",
        "https://techcrunch.com/feed/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("logiover/bulk-rss-feed-reader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "feedUrls": [
    "https://hnrss.org/frontpage",
    "http://feeds.bbci.co.uk/news/rss.xml",
    "https://www.theverge.com/rss/index.xml",
    "https://techcrunch.com/feed/"
  ]
}' |
apify call logiover/bulk-rss-feed-reader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/bulk-rss-feed-reader"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vzgjoS0J0hKUGguaF/builds/FoPr2vQpSXyczFsHg/openapi.json
