# RSS & Atom Feed Reader - Monitor Any Feed at Scale (`santamaria-automations/rss-feed-reader`) Actor

Extract articles from RSS, Atom, and JSON feeds including title, author, content, images, categories, enclosures, and publication dates. Export data, run via API, schedule and monitor runs, or integrate with other tools.

- **URL**: https://apify.com/santamaria-automations/rss-feed-reader.md
- **Developed by:** [Alessandro Santamaria](https://apify.com/santamaria-automations) (community)
- **Categories:** News, AI, Automation
- **Stats:** 5 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 feed parseds

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 & Atom Feed Reader - Monitor Any Feed at Scale

Monitor any RSS, Atom, or JSON feed at scale — podcasts, news sites, blogs, release feeds.

Point it at a list of feed URLs and get back clean structured records with titles, authors, full content, featured images, categories, podcast enclosures and publication dates. Format is auto-detected — mix RSS 2.0, Atom 1.0 and JSON Feed sources in the same run.

### What you get

- **Auto-detects feed format** — RSS 2.0, Atom 1.0, JSON Feed 1.0/1.1 in the same run
- **Full content extraction** — titles, HTML body, short description, author name + email
- **Featured images** — pulled from `media:thumbnail`, `media:content`, enclosures or inline `<img>` tags
- **Podcast enclosures** — episode MP3/M4A URLs, file size and MIME type preserved
- **Categories & tags** — every tag the publisher ships
- **Date filtering** — only return items newer than a given ISO date
- **Per-feed summary** — extra record per feed with item count and latest/oldest dates
- **Batch processing** — hundreds of feeds per run, one bad feed never breaks the batch

### Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

**Apify MCP server URL:**

````

https://mcp.apify.com?tools=santamaria-automations/rss-feed-reader

````

**Example prompt once connected:**

> "Use `rss-feed-reader` to process data with rss feed reader. Return results as a table."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via `add-actor`.

### Example output

**News article (RSS 2.0)**
```json
{
  "type": "feed_item",
  "feed_url": "https://feeds.bbci.co.uk/news/rss.xml",
  "feed_title": "BBC News",
  "feed_type": "rss",
  "feed_language": "en-gb",
  "item_title": "Global markets rally on rate cut hopes",
  "item_link": "https://www.bbc.com/news/business-12345678",
  "item_guid": "https://www.bbc.com/news/business-12345678",
  "item_published": "2026-04-07T08:14:00Z",
  "item_description": "Stocks in Europe and Asia jumped after...",
  "item_content": "<p>Stocks in Europe and Asia jumped...</p>",
  "item_image": "https://ichef.bbci.co.uk/news/1024/branded_news/abc.jpg",
  "item_categories": ["Business", "Markets"],
  "scraped_at": "2026-04-07T09:00:00Z"
}
````

**Podcast episode (with enclosure)**

```json
{
  "type": "feed_item",
  "feed_title": "The Changelog",
  "item_title": "Episode 512: Building resilient systems",
  "item_link": "https://changelog.com/podcast/512",
  "item_author": "Adam Stacoviak <adam@changelog.com>",
  "item_published": "2026-04-05T14:00:00Z",
  "item_enclosures": [
    {
      "url": "https://cdn.changelog.com/uploads/podcast/512/episode.mp3",
      "length": "48291840",
      "type": "audio/mpeg"
    }
  ],
  "scraped_at": "2026-04-07T09:00:00Z"
}
```

**Feed summary (one per feed)**

```json
{
  "type": "feed_summary",
  "feed_url": "https://hnrss.org/frontpage",
  "feed_title": "Hacker News: Front Page",
  "feed_type": "rss",
  "items_count": 30,
  "latest_item_date": "2026-04-07T08:55:00Z",
  "oldest_item_date": "2026-04-07T01:10:00Z",
  "scraped_at": "2026-04-07T09:00:00Z"
}
```

### How to use

Paste feed URLs into the `feedUrls` input (one per line), set `maxItemsPerFeed` if you only need the latest, and run. Schedule the actor to run every hour for continuous monitoring, or trigger it via API from your own pipelines.

#### Input

| Parameter | Description | Default |
|-----------|-------------|---------|
| `feedUrls` | RSS, Atom or JSON feed URLs | *(required)* |
| `maxItemsPerFeed` | Cap items per feed | `100` |
| `includeContent` | Include full HTML content body | `true` |
| `filterByDate` | ISO date — only items newer than this | — |
| `fetchTimeoutSeconds` | HTTP timeout per feed | `30` |
| `proxyConfiguration` | Optional proxy config | disabled |

### Use cases

- **Content marketing** — monitor competitor blogs and spot new posts within minutes
- **News aggregation** — build custom news pipelines from hundreds of sources
- **Podcast tracking** — monitor new episodes across shows with enclosure URLs ready for download
- **Release monitoring** — watch GitHub release feeds, product changelogs and CVE feeds
- **Academic research** — track new papers from journal and preprint RSS feeds
- **SEO competitive intel** — measure publishing frequency and topic coverage of any site
- **Newsletter curation** — pull content from dozens of feeds into a single weekly digest
- **Alerting** — trigger Slack or email alerts when specific keywords appear in watched feeds

### Pricing

| Event | Price |
|-------|-------|
| Actor start | $0.001 |
| Per feed parsed | $0.002 |

**Example**: Monitor 1,000 feeds = **~$2.00** (1,000 × $0.002 + $0.001 start)

| Feeds | Cost |
|-------|------|
| 100 | $0.20 |
| 1,000 | $2.00 |
| 10,000 | $20.00 |

No per-item charges. No proxy markups. No external API fees.

### Related Actors

- [Website Content Crawler](https://apify.com/santamaria-automations/website-contact-extractor) — full site scraping when a feed isn't enough
- [Sitemap URL Discovery](https://apify.com/santamaria-automations/sitemap-url-discovery) — discover all URLs on a site via sitemap.xml
- [HTML to Markdown](https://apify.com/santamaria-automations/html-to-markdown) — convert feed HTML content into clean Markdown
- [Website Tech Stack Detector](https://apify.com/santamaria-automations/website-tech-detector) — identify the CMS behind any feed

### Issues & Feedback

Found a bug or have a feature request? Open an issue on the Issues tab — we respond within 24 hours.

# Actor input Schema

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

List of RSS, Atom or JSON Feed URLs to parse. Format is auto-detected. Supports RSS 2.0, Atom 1.0 and JSON Feed 1.0/1.1.

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

Maximum number of items to return per feed. Use this to cap output for very long feeds.

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

Include the full HTML content body of each item. Disable to reduce output size when you only need titles and links.

## `filterByDate` (type: `string`):

Only return items newer than this ISO-8601 date (e.g. '2026-01-01' or '2026-01-01T00:00:00Z'). Leave empty to return all items.

## `fetchTimeoutSeconds` (type: `integer`):

HTTP request timeout per feed URL.

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

Optional proxy configuration for fetching feeds. Most public feeds do not require a proxy.

## Actor input object example

```json
{
  "feedUrls": [
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://hnrss.org/frontpage",
    "https://changelog.com/podcast/feed"
  ],
  "maxItemsPerFeed": 100,
  "includeContent": true,
  "fetchTimeoutSeconds": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `feedItems` (type: `string`):

Dataset of feed items and summaries

# 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",
        "https://hnrss.org/frontpage",
        "https://changelog.com/podcast/feed"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/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://feeds.bbci.co.uk/news/rss.xml",
        "https://hnrss.org/frontpage",
        "https://changelog.com/podcast/feed",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/rss-feed-reader").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 '{
  "feedUrls": [
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://hnrss.org/frontpage",
    "https://changelog.com/podcast/feed"
  ]
}' |
apify call santamaria-automations/rss-feed-reader --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RSS & Atom Feed Reader - Monitor Any Feed at Scale",
        "description": "Extract articles from RSS, Atom, and JSON feeds including title, author, content, images, categories, enclosures, and publication dates. Export data, run via API, schedule and monitor runs, or integrate with other tools.",
        "version": "1.0",
        "x-build-id": "DCkAGvMG8p4zpQ3g8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/santamaria-automations~rss-feed-reader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-santamaria-automations-rss-feed-reader",
                "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/santamaria-automations~rss-feed-reader/runs": {
            "post": {
                "operationId": "runs-sync-santamaria-automations-rss-feed-reader",
                "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/santamaria-automations~rss-feed-reader/run-sync": {
            "post": {
                "operationId": "run-sync-santamaria-automations-rss-feed-reader",
                "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": [
                    "feedUrls"
                ],
                "properties": {
                    "feedUrls": {
                        "title": "Feed URLs",
                        "type": "array",
                        "description": "List of RSS, Atom or JSON Feed URLs to parse. Format is auto-detected. Supports RSS 2.0, Atom 1.0 and JSON Feed 1.0/1.1.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerFeed": {
                        "title": "Max Items per Feed",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of items to return per feed. Use this to cap output for very long feeds.",
                        "default": 100
                    },
                    "includeContent": {
                        "title": "Include Full Content",
                        "type": "boolean",
                        "description": "Include the full HTML content body of each item. Disable to reduce output size when you only need titles and links.",
                        "default": true
                    },
                    "filterByDate": {
                        "title": "Filter by Date (Since)",
                        "type": "string",
                        "description": "Only return items newer than this ISO-8601 date (e.g. '2026-01-01' or '2026-01-01T00:00:00Z'). Leave empty to return all items."
                    },
                    "fetchTimeoutSeconds": {
                        "title": "Fetch Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 300,
                        "type": "integer",
                        "description": "HTTP request timeout per feed URL.",
                        "default": 30
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Optional proxy configuration for fetching feeds. Most public feeds do not require a proxy.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
