# RSS Feed Reader (`maximedupre/rss-feed-reader`) Actor

Read public RSS, Atom, RDF, and JSON Feed URLs. Export feed item titles, links, dates, authors, categories, content, images, enclosures, and source metadata for API workflows, schedules, and dataset exports.

- **URL**: https://apify.com/maximedupre/rss-feed-reader.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools
- **Features:** Limited permissions
- **Stats:** 4 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 saved 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 📡 RSS feed reader for clean feed exports

RSS Feed Reader reads public RSS, Atom, RDF, and JSON Feed URLs and saves each feed item as a clean Apify dataset row. Use this RSS feed reader when you already have feed URLs and want titles, links, dates, authors, categories, summaries, content, images, enclosures, and source metadata in JSON, CSV, Excel, XML, or API form.

Start with one feed URL or a list of feeds such as news RSS feeds, blog Atom feeds, Hacker News feeds, podcast feeds, changelogs, or JSON Feed endpoints. The Actor is built for feed parsing, feed monitoring, content aggregation, and downstream automation. It does not crawl article pages or discover feeds from websites; it reads the feed payload each public feed exposes.

- ✅ **rss feed reader app** - turn public feeds into rows you can inspect, export, schedule, or send to another app.
- ✅ **rss reader online** - run feed parsing from Apify Console without hosting your own RSS reader software.
- ✅ **best rss reader workflows** - collect normalized feed data for alerts, dashboards, BI tools, databases, and LLM pipelines.
- ✅ **open source rss reader support** - feed your own reader, archive, or database with stable item keys for dedupe.
- ✅ **RSS, Atom, RDF, and JSON Feed** - parse common public feed formats in one Actor run.

#### ✅ What this RSS feed reader does

- Reads one or many public feed URLs in one run.
- Supports RSS 2.0, Atom, RSS 1.0/RDF, and JSON Feed.
- Saves one dataset item per accepted feed item.
- Extracts item title, URL, GUID, publication date, update date, authors, categories, summary, content, image URL, and enclosures when the feed provides them.
- Keeps feed-level context such as feed URL, feed title, feed home URL, feed type, and source order.
- Adds a stable `itemKey` for downstream dedupe in scheduled runs.
- Lets you cap items per feed and total items across the run.
- Lets you keep only items published on or after a date when the feed includes dates.
- Continues through the rest of your list when one feed is unavailable, malformed, empty, or blocked.
- Works with Apify dataset exports, API access, schedules, webhooks, and integrations.

#### 📦 Feed data you can extract

Each output row represents one parsed feed item.

| Data group        | Example fields                                                           |
| ----------------- | ------------------------------------------------------------------------ |
| Feed context      | `feedUrl`, `feedIndex`, `feedTitle`, `feedHomeUrl`, `feedType`           |
| Item identity     | `title`, `url`, `guid`, `itemKey`, `itemIndexInFeed`                     |
| Dates and authors | `publishedAt`, `updatedAt`, `rawDateText`, `authors`                     |
| Content           | `summaryText`, `summaryHtml`, `contentText`, `contentHtml`, `categories` |
| Media             | `imageUrl`, `enclosures`                                                 |

Feed formats vary. Some feeds include full HTML content, some include only summaries, and some omit authors, dates, images, or enclosures. Missing optional values are returned as `null` or an empty array instead of guessed data.

#### 🎯 Common use cases

- Monitor news, blogs, changelogs, newsletters, podcasts, or community feeds.
- Build a feed aggregation dataset from many RSS or Atom URLs.
- Export new feed items for spreadsheets, BI tools, alerts, LLM workflows, or databases.
- Schedule repeat runs and dedupe by `itemKey`, `guid`, `url`, or publication date.
- Convert RSS, Atom, RDF, or JSON Feed content into JSON, CSV, Excel, XML, or HTML exports.
- Keep source feed metadata attached to each item for traceability.

#### 🚀 How to run it

1. Open the Input tab.
2. Add one feed URL per line in `Feed URLs`.
3. Optional: set `Published after` to keep newer items only when feed dates are available.
4. Set `Maximum items per feed` and `Maximum items total` to control run size and cost.
5. Start the Actor and open the dataset, or fetch the same rows through the Apify API.

For a small first run, keep the prefilled feed URLs and leave `Maximum items total` at `25`.

#### ✍️ Input example

```json
{
	"feedUrls": [
		"https://hnrss.org/frontpage",
		"https://feeds.bbci.co.uk/news/rss.xml",
		"https://www.jsonfeed.org/feed.json"
	],
	"publishedAfter": "2026-06-01",
	"maxItemsPerFeed": 15,
	"maxTotalItems": 25
}
```

#### 🧾 Output example

```json
{
	"feedUrl": "https://hnrss.org/frontpage",
	"feedIndex": 1,
	"feedTitle": "Hacker News: Front Page",
	"feedHomeUrl": "https://news.ycombinator.com/",
	"feedType": "rss",
	"itemIndexInFeed": 1,
	"title": "Example feed item",
	"url": "https://example.com/article",
	"guid": "https://news.ycombinator.com/item?id=123456",
	"itemKey": "https://hnrss.org/frontpage|https://news.ycombinator.com/item?id=123456|https://example.com/article|Example feed item|2026-06-13T12:00:00.000Z",
	"publishedAt": "2026-06-13T12:00:00.000Z",
	"updatedAt": null,
	"authors": ["Example author"],
	"categories": ["Technology"],
	"summaryText": "Short item summary.",
	"summaryHtml": "<p>Short item summary.</p>",
	"contentText": "Full feed-provided content.",
	"contentHtml": "<p>Full feed-provided content.</p>",
	"imageUrl": "https://example.com/image.jpg",
	"enclosures": [
		{
			"url": "https://example.com/audio.mp3",
			"type": "audio/mpeg",
			"length": "123",
			"title": null
		}
	],
	"rawDateText": "Sat, 13 Jun 2026 12:00:00 GMT"
}
```

#### 💸 Pricing

This Actor uses pay-per-event pricing. You are charged for each feed item saved. Runs that skip an unavailable or empty feed do not save a placeholder row for that feed.

Use `Maximum items per feed` and `Maximum items total` to control cost before running larger feed lists.

#### 🔌 Integrations

RSS Feed Reader works with Apify integrations, schedules, webhooks, dataset exports, and API clients. You can run it on a schedule, send finished runs to another service, or pull dataset rows into your own data pipeline.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### 🔌 Why not use the RSS API?

RSS, Atom, RDF, and JSON Feed are source formats, not one shared API. This Actor gives you a hosted RSS feed parser API on Apify: send feed URLs, run on demand or on a schedule, and read normalized dataset rows through the Apify API.

##### 🧩 What are RSS alternatives?

Feedly, Inoreader, FreshRSS, Newsboat, and similar RSS reader tools are good when you want a reading inbox. RSS Feed Reader is for data workflows: exporting feed items, scheduling collection, deduping with `itemKey`, and sending rows to APIs, spreadsheets, databases, or AI workflows.

##### 📰 Can it scrape the full article behind each feed item URL?

No. This Actor parses feed payloads. It returns full content only when the feed itself includes full content. Crawling article pages is a separate scraping job.

##### ⚠️ What happens when one feed fails?

The run keeps going. Failed, empty, blocked, or malformed feeds are reported in logs, while successful feed items from other feeds are still saved.

##### 🕒 How does the date filter work?

The `Published after` filter depends on dates exposed by the feed. Undated items are kept by default so sparse feeds can still return useful rows.

##### 🔐 Can it read private feeds?

No. Only public HTTP and HTTPS feed URLs are supported. Private, authenticated, paywalled, or cookie-protected feeds are outside this Actor's scope.

### 📝 Changelog

- 1.0: Updated feed item exports with a cleaner stable row contract for RSS, Atom, RDF, and JSON Feed data.
- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~rss-feed-reader/issues) and I'll fix or implement it in less than 24h.

### 🔗 Other actors

- [Reddit Scraper ↗](https://apify.com/maximedupre/reddit-scraper) - Search Reddit posts and comments for topic monitoring.
- [Reddit Comments Search Scraper ↗](https://apify.com/maximedupre/reddit-comments-search-scraper) - Export public Reddit comments by keyword or subreddit.
- [Telegram Channel Messages Scraper ↗](https://apify.com/maximedupre/telegram-channel-messages-scraper) - Collect public Telegram channel posts for monitoring and research.
- [Quora Search Scraper ↗](https://apify.com/maximedupre/quora-search-scraper) - Find public Quora questions, answers, profiles, topics, spaces, and posts.
- [Stocktwits Scraper ↗](https://apify.com/maximedupre/stocktwits-scraper) - Track public Stocktwits messages, sentiment, cashtags, and trending symbols.

**Made by Maxime Dupré**

# Actor input Schema

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

Enter one public feed URL per line. RSS, Atom, RDF, and JSON Feed URLs are accepted.

## `publishedAfter` (type: `string`):

Keep feed items published on or after this date.

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

Maximum feed items to save from each submitted feed.

## `maxTotalItems` (type: `integer`):

Maximum feed items to save across the whole run.

## Actor input object example

```json
{
  "feedUrls": [
    "https://hnrss.org/frontpage",
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://www.nasa.gov/news-release/feed/",
    "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml",
    "https://www.jsonfeed.org/feed.json"
  ],
  "maxItemsPerFeed": 100,
  "maxTotalItems": 100
}
```

# 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 = {
    "feedUrls": [
        "https://hnrss.org/frontpage",
        "https://feeds.bbci.co.uk/news/rss.xml",
        "https://www.nasa.gov/news-release/feed/",
        "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml",
        "https://www.jsonfeed.org/feed.json"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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",
        "https://feeds.bbci.co.uk/news/rss.xml",
        "https://www.nasa.gov/news-release/feed/",
        "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml",
        "https://www.jsonfeed.org/feed.json",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/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",
    "https://feeds.bbci.co.uk/news/rss.xml",
    "https://www.nasa.gov/news-release/feed/",
    "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml",
    "https://www.jsonfeed.org/feed.json"
  ]
}' |
apify call maximedupre/rss-feed-reader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/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/Vh4FlhhaaJEJwEP2D/builds/ZbNZehXI8J8rVn1iV/openapi.json
