# RSS Feed Scraper (`ef12/rss-scraper`) Actor

Fetch and parse any RSS or Atom feed into structured JSON. Get titles, links, descriptions, authors, dates, and categories.

- **URL**: https://apify.com/ef12/rss-scraper.md
- **Developed by:** [Daniel Wilson](https://apify.com/ef12) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 per results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper

**RSS Feed Scraper** fetches and parses any **RSS 2.0** or **Atom** feed into clean, structured JSON. Get **titles, links, descriptions, authors, publication dates, GUIDs, and categories** from news sites, blogs, podcasts — any feed on the web.

Built on the [Apify platform](https://apify.com), it gives you API access, scheduling, dataset export, webhooks, and integrations with Zapier, Make, Google Sheets, and more.

---

### What does RSS Feed Scraper do?

This Actor takes any RSS or Atom feed URL, fetches the raw XML, parses it with `feedparser`, and outputs clean structured JSON. Each item includes title, link, HTML-stripped description, author, publication date (normalized to ISO 8601), GUID, and categories. It handles both RSS 2.0 and Atom formats automatically.

### Why use RSS Feed Scraper?

- **Works with any feed** — RSS 2.0, Atom, JSON Feed. Just pass a URL.
- **Structured output** — No raw XML to parse. Get clean JSON fields out of the box.
- **Cost-effective** — First 10 results free per run. After that, $0.01 per additional result.
- **Apify-powered** — Schedule recurring runs, export to CSV/JSON/Excel, pipe data into your workflows via API or webhooks.

### Use Cases

#### How to fetch and parse any RSS feed into JSON

Enter any RSS or Atom feed URL and get clean structured JSON with titles, links, descriptions, authors, publication dates, and categories. HTML is stripped from descriptions for clean text output.

#### How to monitor multiple news sources

Schedule daily runs of multiple RSS feeds (BBC News, TechCrunch, Hacker News RSS). Aggregate results into a single dataset for a personalized news dashboard.

#### How to build a content aggregation pipeline

Use the RSS scraper as the first step in a content pipeline. Feed the JSON output into your LLM for summarization, sentiment analysis, or keyword extraction.

#### How to track podcast episodes via RSS

Most podcasts publish an RSS feed with episode titles, descriptions, and publication dates. Use the scraper to get the latest episodes from any podcast feed.

### How to use RSS Feed Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up)
2. Go to the [RSS Feed Scraper](https://console.apify.com) Actor page
3. Click **Try** or go to **Input** tab
4. Paste your feed URL (e.g. `https://feeds.bbci.co.uk/news/rss.xml`)
5. Set your desired **Max Results**
6. Click **Run** — results appear in the **Dataset** tab in seconds

### Input

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `feed_url` | string | ✅ yes | — | URL of the RSS or Atom feed |
| `max_results` | integer | no | `25` | Max items to return (max 200) |

Example JSON input:

```json
{
    "feed_url": "https://feeds.bbci.co.uk/news/rss.xml",
    "max_results": 25
}
````

### Output

Each item in the dataset has these fields:

```json
{
    "title": "UK inflation rate rises above 3% for first time in 2025",
    "link": "https://www.bbc.com/news/articles/c5y6v7w8x9y0",
    "description": "The UK inflation rate has risen above 3% for the first time this year...",
    "author": "BBC News",
    "pub_date": "2025-06-15T08:30:00+00:00",
    "guid": "https://www.bbc.com/news/articles/c5y6v7w8x9y0",
    "categories": ["Business", "Economy", "UK"]
}
```

You can download the dataset in **JSON, CSV, Excel, HTML, XML, or RSS** from the Apify Console.

### Data fields

| Field | Type | Description |
| --- | --- | --- |
| `title` | string | Item title |
| `link` | string | URL to the full article/post |
| `description` | string | Summary or description (HTML stripped) |
| `author` | string or null | Author name if available |
| `pub_date` | string or null | Publication date in ISO 8601 format |
| `guid` | string or null | Unique identifier |
| `categories` | array of strings | Category tags |

### Pricing / Cost estimation

How much does it cost to scrape an RSS feed?

- First **10 results** per run are **free**
- Each additional result costs **$0.01** (charged via `Actor.charge()`)
- Example: scraping 50 items costs $0.40 (40 charged items)

Runs typically complete in under 10 seconds, keeping platform compute costs minimal.

### Tips & advanced options

- **Set `max_results` precisely** — The first 10 are free, so a run of 10 costs $0, while 11 costs $0.01.
- **Use the Apify API** — Trigger runs programmatically and fetch results via `https://api.apify.com/v2/actor-runs/{runId}/dataset/items`
- **Schedule recurring scrapes** — Set a daily or hourly schedule in the Apify Console to monitor feeds.
- **Combine with other Actors** — Pipe feed output into translation, AI summarization, or data storage Actors.

### FAQ

#### Does this web scrape the article content?

No. It only fetches the feed XML/JSON, which contains headlines, summaries, and metadata. It does **not** scrape the full article pages.

#### Is this legal?

Yes. RSS and Atom feeds are explicitly designed for programmatic access and syndication. You should still respect the feed publisher's terms of service and any `robots.txt` rules.

#### What feed formats are supported?

RSS 2.0, RSS 1.0, Atom, and JSON Feed.

#### How do I find a site's RSS feed?

Look for the RSS/feed icon, check the page source for `<link type="application/rss+xml">`, or try common paths like `/feed/`, `/rss/`, or `/index.xml`.

### Support

Found a bug or have a feature request? Open an issue on the [GitHub repository](https://github.com/daniel/apify-fleet/issues).

Need a custom solution? [Contact us](https://apify.com/contact) for tailored scraping or data processing Actors.

> **Disclaimer:** This Actor is provided as-is. The developer is not responsible for how you use this tool. Always respect the target website's terms of service and applicable laws.

# Actor input Schema

## `feed_url` (type: `string`):

URL of the RSS or Atom feed to scrape (e.g. https://feeds.bbci.co.uk/news/rss.xml)

## `max_results` (type: `integer`):

Maximum number of feed items to return (max 200). First 10 are free, then $0.01 per item.

## Actor input object example

```json
{
  "feed_url": "https://feeds.bbci.co.uk/news/rss.xml",
  "max_results": 25
}
```

# Actor output Schema

## `results` (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 = {
    "feed_url": "https://feeds.bbci.co.uk/news/rss.xml"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ef12/rss-scraper").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 = { "feed_url": "https://feeds.bbci.co.uk/news/rss.xml" }

# Run the Actor and wait for it to finish
run = client.actor("ef12/rss-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "feed_url": "https://feeds.bbci.co.uk/news/rss.xml"
}' |
apify call ef12/rss-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ef12/rss-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RSS Feed Scraper",
        "description": "Fetch and parse any RSS or Atom feed into structured JSON. Get titles, links, descriptions, authors, dates, and categories.",
        "version": "0.0",
        "x-build-id": "z5OR68Z3yYT2QmN3a"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ef12~rss-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ef12-rss-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ef12~rss-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ef12-rss-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ef12~rss-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ef12-rss-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "feed_url"
                ],
                "properties": {
                    "feed_url": {
                        "title": "Feed URL",
                        "type": "string",
                        "description": "URL of the RSS or Atom feed to scrape (e.g. https://feeds.bbci.co.uk/news/rss.xml)"
                    },
                    "max_results": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of feed items to return (max 200). First 10 are free, then $0.01 per item.",
                        "default": 25
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
