# RSS Feed Extractor (`parsebird/rss-feed-extractor`) Actor

Parse RSS 2.0, Atom, and RSS 1.0 feeds into structured JSON: article titles, links, publish dates, authors, categories, summaries, and full content extracted from any feed URL.

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

## Pricing

from $0.50 / 1,000 feed items

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/platform/actors/running/actors-in-store#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 Extractor — Parse RSS, Atom & RSS 1.0 Feeds into JSON

**RSS Feed Extractor** fetches and parses RSS 2.0, Atom, and RSS 1.0 (RDF) feeds into clean, structured JSON — no XML parsing, feed-format quirks, or encoding headaches to deal with yourself. Export the results as JSON, CSV, or Excel.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Point it at any number of public feed URLs and get back article titles, links, publish dates, authors, categories, full content, and media — with per-feed error handling so one broken URL never stops the batch.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/rss-feed-extractor — fetches and parses RSS 2.0, Atom, and RSS 1.0 (RDF) feed URLs into structured JSON. Pay-per-event pricing, event feed-item-extracted at $0.001/item on Free ($1.00/1000), $0.0009/item on Bronze ($0.90/1000), $0.0007/item on Silver ($0.70/1000), $0.0005/item on Gold ($0.50/1000) — only fires for extracted feed items, not for feed metadata or errored feeds. Call via ApifyClient: client.actor("parsebird/rss-feed-extractor").call(run_input={"feedUrls": ["https://feeds.bbci.co.uk/news/rss.xml"], "maxItemsPerFeed": 50, "includeContent": true}). Inputs: feedUrls (array of strings, required — public RSS or Atom feed URLs), maxItemsPerFeed (integer, default 50, 1-500 — max items extracted per feed), includeContent (boolean, default true — include full article content when the feed provides it, e.g. content:encoded). Output: one feed_metadata record per feed (title, description, link, feedUrl, language, lastBuildDate, image, itemCount) plus one feed_item record per article (title, link, feedUrl, feedTitle, pubDate, author, categories, guid, summary, content, enclosure, mediaContent, thumbnail), and an error record for any feed that fails to fetch or parse. API docs: https://docs.apify.com/api/v2 Token: https://console.apify.com/settings/integrations
```

### What does RSS Feed Extractor do?

**RSS Feed Extractor** is an [Apify Actor](https://apify.com/actors) that downloads and parses RSS and Atom feeds from any number of URLs you provide, turning inconsistent feed XML into a single, predictable JSON structure.

- 📰 **Three feed formats supported** — RSS 2.0, Atom, and RSS 1.0 (RDF), including YouTube channel feeds, podcast feeds, and Reddit/subreddit `.rss` feeds
- 📝 **Full article content** — extracts `content:encoded` or the entry's full content body when the feed provides it, not just the short summary
- 🖼️ **Media extraction** — pulls enclosures (podcast audio/video files), `media:content`, and `media:thumbnail` when present
- 🛡️ **Per-feed error handling** — a broken URL, timeout, or non-feed page doesn't stop the run; every feed gets its own result, with failures pushed as an `error` record instead of crashing the batch
- ⚡ **Concurrent fetching** — multiple feed URLs are fetched in parallel for fast turnaround on large batches
- ⏱️ **Scheduling & API access** — run on autopilot with [Apify Schedules](https://docs.apify.com/platform/schedules) and pull results via the [Apify API](https://docs.apify.com/api/v2) or client libraries
- 📊 **Multiple export formats** — download results as JSON, CSV, Excel, XML, or HTML

Use it as an **RSS parser API**, an **RSS to JSON converter**, a competitor and news monitoring tool, or the ingestion step of a content aggregation or LLM pipeline.

### What data can you extract from an RSS or Atom feed?

| Field | Description |
|-------|-------------|
| `type` | Record type: `feed_metadata`, `feed_item`, or `error` |
| `title` | Feed or item title |
| `link` | Feed or item URL |
| `feedUrl` | The source feed URL you provided |
| `feedTitle` | Parent feed title, included on every item record |
| `pubDate` | Item publish date (ISO 8601) |
| `author` | Item author, when present |
| `categories` | Item categories/tags, when present |
| `guid` | Item GUID, when present |
| `summary` | Item summary or snippet |
| `content` | Full article content (when `includeContent` is enabled and the feed provides it) |
| `enclosure` | Enclosure object (e.g. podcast audio file URL, type, length) |
| `mediaContent` | `media:content` payload, when present |
| `thumbnail` | Thumbnail image URL, when present |
| `itemCount` | Number of items extracted, on `feed_metadata` records |
| `error` | Error message, on `error` records |

### How to use RSS Feed Extractor

1. Go to **RSS Feed Extractor** on [Apify Store](https://apify.com/parsebird/rss-feed-extractor) and click **Try for free**
2. Paste one or more public RSS or Atom feed URLs into the **Feed URLs** field
3. Set **Max items per feed** to control how many articles are pulled from each feed (default 50)
4. Toggle **Include full content** on or off depending on whether you need the full article body or just the summary
5. Click **Start** and wait for the run to finish
6. Export your data as JSON, CSV, or Excel, or access it via the [Apify API](https://docs.apify.com/api/v2)

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `feedUrls` | string\[] | **Yes** | — | Public RSS or Atom feed URLs to parse |
| `maxItemsPerFeed` | integer | No | `50` | Maximum items extracted from each feed (1–500) |
| `includeContent` | boolean | No | `true` | Include full article content when the feed provides it |

**Minimal input:**

```json
{
  "feedUrls": ["https://feeds.bbci.co.uk/news/rss.xml"]
}
```

**Full input example:**

```json
{
  "feedUrls": [
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID"
  ],
  "maxItemsPerFeed": 50,
  "includeContent": true
}
```

### Output example

```json
{
  "type": "feed_metadata",
  "title": "BBC News",
  "description": "BBC News - News Front Page",
  "link": "https://www.bbc.co.uk/news",
  "feedUrl": "https://feeds.bbci.co.uk/news/rss.xml",
  "language": "en-gb",
  "lastBuildDate": "2026-08-16T06:58:51Z",
  "image": "https://news.bbcimg.co.uk/nol/shared/img/bbc_news_120x60.gif",
  "itemCount": 33,
  "scrapedAt": "2026-08-16T06:58:57.815Z"
}
```

```json
{
  "type": "feed_item",
  "title": "Rescuers search for survivors of powerful earthquake",
  "link": "https://www.bbc.co.uk/news/articles/c3v00w5ylw9o",
  "feedUrl": "https://feeds.bbci.co.uk/news/rss.xml",
  "feedTitle": "BBC News",
  "pubDate": "2026-08-16T04:13:32Z",
  "author": null,
  "categories": null,
  "guid": "https://www.bbc.co.uk/news/articles/c3v00w5ylw9o#0",
  "summary": "Officials say a rapid assessment into the impact of the earthquake is under way.",
  "content": "Officials say a rapid assessment into the impact of the earthquake is under way.",
  "enclosure": null,
  "mediaContent": null,
  "thumbnail": "https://ichef.bbci.co.uk/ace/standard/240/cpsprodpb/f5f8/live/example.jpg",
  "scrapedAt": "2026-08-16T06:58:57.820Z"
}
```

Download results in JSON, CSV, Excel, XML, or HTML, or access them via the [Apify API](https://docs.apify.com/api/v2).

### Use cases

- 📡 **News and media monitoring** — track multiple news outlets or industry publications from a single input list
- ✍️ **Blog and content aggregation** — pull posts from several blogs into one feed for a newsletter, digest, or content hub
- 🏢 **Competitor tracking** — monitor competitor blog or changelog feeds (like product changelogs) for new posts
- 🎙️ **Podcast and YouTube monitoring** — extract episode/video metadata and enclosure URLs from podcast RSS or YouTube channel Atom feeds
- 🤖 **Content pipelines & LLM ingestion** — feed structured article data into a downstream summarization, classification, or RAG pipeline
- 🔌 **Automation and integration** — connect feed data to Slack, Google Sheets, Zapier, Make, or custom systems via [Apify Integrations](https://docs.apify.com/platform/integrations)

### How it works

1. The Actor fetches each URL in `feedUrls` concurrently, using browser-like request headers
2. Each response is parsed as RSS 2.0, Atom, or RSS 1.0 (RDF) — the Actor auto-detects the format
3. If a URL fails to fetch, times out, or doesn't contain a valid feed, an `error` record is pushed for that URL and the run continues with the rest
4. One `feed_metadata` record is pushed per feed, followed by up to `maxItemsPerFeed` `feed_item` records
5. When `includeContent` is enabled, the Actor extracts the full article body (`content:encoded` or equivalent) in addition to the short `summary`
6. Results are pushed to the dataset as each feed finishes, so you can start using data before the whole run completes

### How to use via API — Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/rss-feed-extractor").call(run_input={
    "feedUrls": [
        "https://feeds.bbci.co.uk/news/rss.xml",
        "https://news.ycombinator.com/rss",
    ],
    "maxItemsPerFeed": 50,
    "includeContent": True,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item["type"] == "feed_item":
        print(f"{item['feedTitle']}: {item['title']} ({item['pubDate']})")
    elif item["type"] == "error":
        print(f"Failed: {item['feedUrl']} — {item['error']}")
```

### How to use via API — JavaScript

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('parsebird/rss-feed-extractor').call({
    feedUrls: [
        'https://feeds.bbci.co.uk/news/rss.xml',
        'https://news.ycombinator.com/rss',
    ],
    maxItemsPerFeed: 50,
    includeContent: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    if (item.type === 'feed_item') {
        console.log(`${item.feedTitle}: ${item.title} (${item.pubDate})`);
    } else if (item.type === 'error') {
        console.log(`Failed: ${item.feedUrl} — ${item.error}`);
    }
});
```

### How much does it cost to extract RSS feed data?

RSS Feed Extractor uses [pay-per-event pricing](https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event) — you're charged only for `feed_item` records actually extracted. Feed metadata records and errored feeds are never charged. Platform usage (compute, bandwidth) is not billed separately.

**How much does it cost to extract 1,000 feed items?**

$1.00 on the Free plan, $0.90 on Bronze, $0.70 on Silver, or $0.50 on Gold. New users get a free trial with platform credit to try the Actor before committing to a paid plan.

**How much does it cost to extract 100 items from 5 feeds?**

Around $0.10 on the Free plan (100 items × $0.001/item) — a full run against the default input (one feed, up to 50 items) costs a few cents.

### Pricing

| Event | Price per event | Price per 1,000 |
|-------|------------------|------------------|
| `feed-item-extracted` | $0.001 (Free) / $0.0009 (Bronze) / $0.0007 (Silver) / $0.0005 (Gold) | **$1.00 / $0.90 / $0.70 / $0.50** |

`feed-item-extracted` fires once per article/item successfully extracted from a feed. Feed metadata records and errored feeds are not charged.

### Is it legal to use RSS Feed Extractor?

This Actor only fetches feed URLs you explicitly provide — it does not crawl or discover feeds on its own. RSS and Atom feeds are published by site owners specifically for syndication, so parsing a public feed is generally not a legal grey area the way scraping a private page can be. You're still responsible for complying with each feed's terms of use and any applicable copyright or data protection laws for how you use the extracted content. Read more in Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Related Actors

Looking for more content extraction and monitoring tools? Check out these ParseBird Actors:

- [PDF Text Extractor](https://apify.com/parsebird/pdf-text-extractor) — Extract text and metadata from PDF files by URL
- [X/Twitter Article Markdown API](https://apify.com/parsebird/x-twitter-article-markdown) — Convert X/Twitter articles and tweets to Markdown by tweet ID
- [HTTP Request](https://apify.com/parsebird/http-request-actor) — Send API calls and forward responses to webhooks from the cloud
- [Data Cleaner](https://apify.com/parsebird/data-cleaner) — Clean, normalize, and format scraped or extracted data
- [Data Deduplicator](https://apify.com/parsebird/dataset-deduplicator) — Merge and deduplicate Apify datasets by any field combination

Browse all [ParseBird Actors on Apify Store](https://apify.com/parsebird).

### FAQ

**What feed formats are supported?**
RSS 2.0, Atom (including YouTube channel feeds), and RSS 1.0 (RDF). The format is auto-detected per URL — you don't need to specify it.

**What happens if a feed URL is broken, times out, or isn't a valid feed?**
That URL gets a single `error` record with a descriptive `error` message, and the run continues with the remaining URLs. One bad feed never stops the batch, and errored feeds are not charged.

**Does `includeContent: false` remove the `summary` field too?**
No. `summary` (the short description/snippet) is always included when the feed provides it. `includeContent` only controls whether the longer `content` field (e.g. `content:encoded`) is also extracted.

**Can I parse podcast RSS feeds?**
Yes. Podcast episode enclosures (the audio file URL, type, and size) are extracted into the `enclosure` field on each item.

**Can I parse a YouTube channel's video feed?**
Yes — YouTube publishes a public Atom feed per channel at `https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID`. Video thumbnails and media metadata are extracted into `thumbnail` and `mediaContent`.

**What does `maxItemsPerFeed` control?**
The maximum number of items extracted per feed, from 1 to 500. Most feeds only publish their most recent 20–50 items regardless of this setting — it's a cap, not a guarantee of that many items.

**Can I schedule recurring runs?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to re-check the same feed URLs on a recurring basis — daily, hourly, or at any interval — to catch new items as they're published.

**Can I access the data via API?**
Yes. Use the [Apify API](https://docs.apify.com/api/v2) or the official [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js) client libraries to run the Actor and retrieve results programmatically.

**What export formats are supported?**
JSON, CSV, Excel (XLSX), XML, and HTML. Download directly from the Apify Console or via the API.

**Is there a free trial?**
Yes. New Apify users get free platform credit to try RSS Feed Extractor before committing to a paid plan.

**I found an issue or have a feature request.**
Open an issue on the [Issues tab](https://apify.com/parsebird/rss-feed-extractor/issues) or contact ParseBird via the Apify Console.

# Actor input Schema

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

Add the public RSS or Atom feed URLs you want to parse.

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

Maximum number of items to extract from each feed.

## `includeContent` (type: `boolean`):

Include full article content when the feed provides it (e.g. content:encoded).

## Actor input object example

```json
{
  "feedUrls": [
    "https://feeds.bbci.co.uk/news/rss.xml"
  ],
  "maxItemsPerFeed": 50,
  "includeContent": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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://feeds.bbci.co.uk/news/rss.xml"
    ],
    "maxItemsPerFeed": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/rss-feed-extractor").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://feeds.bbci.co.uk/news/rss.xml"],
    "maxItemsPerFeed": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/rss-feed-extractor").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://feeds.bbci.co.uk/news/rss.xml"
  ],
  "maxItemsPerFeed": 50
}' |
apify call parsebird/rss-feed-extractor --silent --output-dataset

```

## MCP server setup

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

```

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/P7cDuqa0O8HKmx7C1/builds/qpsrFjU1Acp6e6ddX/openapi.json
