# RSS Feed Reader — RSS, Atom & JSON Feed to Rows (`nexgensignal/rss-feed-reader-api`) Actor

Read any RSS, Atom, RDF or JSON Feed, or give a website and it finds the feed. Get clean rows: title, link, dates, summary text, categories, enclosures and images. Filter by date or keyword, de-duplicated across feeds. Part of NexGen Signal — data tools and official-source data products

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

## Pricing

from $33.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/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 — RSS, Atom & JSON Feed to Rows

Give feed links (RSS 2.0, RSS 1.0/RDF, Atom or JSON Feed) or just website links, and get **every item as a clean row**: title, link, guid, published and updated dates in UTC, summary as plain text, optional full content HTML, categories, enclosures (podcast audio, video) and the item image.

Website links work too: the actor reads the page's `<link rel="alternate">` tags and follows up to three feeds it advertises. Items are de-duplicated across feeds, and can be filtered by date and keywords. Author names are not delivered.

The unit of output is one feed item delivered.

### Who buys this and for what job

- **News and media monitoring** across many outlets and agencies on a schedule.
- **Podcast tools** listing episodes with audio enclosures.
- **AI agents and newsletters** pulling the latest posts in a clean, uniform shape.
- **Developers** replacing a feed parser and its edge cases with one API.

Buyers usually search for this as **"RSS feed reader"**, **"RSS to JSON"** or **"RSS parser API"**.

### 📊 Sample Output

![Table of feed items: feed title, item title, published date, link and summary.](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/rss-feed-reader-api.png)

| feed_title | title | published_at | link |
|---|---|---|---|
| NASA | NASA Names Stephen Cash Marshall Space Flight Center Director | 2026-10-16T20:14:39Z | https://www.nasa.gov/news-release/nasa-names-stephen-cash-marshall-space-flight-center-director/ |
| NASA | Artemis II Heat Shield After Splashdown | 2026-10-16T16:28:01Z | https://www.nasa.gov/image-article/artemis-ii-heat-shield-after-splashdown/ |
| NASA | I Am Artemis: Allison Mjoen | 2026-10-16T14:24:29Z | https://www.nasa.gov/missions/station/i-am-artemis-allison-mjoen/ |
| NASA | NASA’s Hubble Spies Spiral’s Edge | 2026-10-16T12:42:08Z | https://science.nasa.gov/missions/hubble/nasas-hubble-spies-spirals-edge/ |
| NASA | APOD: 2026 October 16 – Chasing the International Space Station | 2026-10-16T04:05:00Z | https://science.nasa.gov/image-article/apod-2026-october-16-chasing-the-international-space-station/ |

Rows from live run `SvRdfMmk7lmnd7EdQ` on Apify (the Store example: the Federal Reserve press-release feed and NASA's news-release feed). Notice that both feeds come back in one shape even though they are built differently.

### ✅ What you get

Every field of each record:

- `record_id` — stable id from the feed and the item's guid (or link); use it to upsert.
- `feed_url`, `feed_source_url`, `feed_title`, `feed_site_link`, `feed_format`, `feed_language` — the link you gave, the feed actually read, and the feed's details.
- `item_position` — position in the feed (1 = first).
- `title`, `link`, `guid` — the item.
- `published_at`, `updated_at` — dates in UTC.
- `summary_text`, `content_html` — summary as plain text (up to 5,000 characters) and full content HTML (with includeContent).
- `categories`, `enclosures`, `image_url`, `comments_link` — tags, attached files (url, type, length), item image and comments link.
- `read_at` — when the feed was read (UTC).

### ⚙️ Sample inputs

**Two agency feeds (the Store example)**

```json
{
  "feedUrls": ["https://www.federalreserve.gov/feeds/press_all.xml", "https://www.nasa.gov/news-release/feed/"],
  "maxItems": 10
}
```

Newest items first, as the feeds list them.

**Find the feed from a website**

```json
{
  "feedUrls": ["https://www.nasa.gov/"],
  "maxItems": 10
}
```

Reads the feed the homepage advertises.

**Keyword and date filter with full content**

```json
{
  "feedUrls": ["https://www.federalreserve.gov/feeds/press_all.xml"],
  "keywords": ["enforcement"],
  "publishedAfter": "2026-09-01",
  "includeContent": true,
  "maxItems": 100
}
```

Only matching items since 1 September.

Input fields:

| Field | Meaning |
|---|---|
| `feedUrls` | feed or website links (up to 2,000). |
| `discoverFeeds` | follow feeds advertised by web pages (default true). |
| `publishedAfter` | date like 2026-10-01; undated items are skipped when set. |
| `keywords` | keep items whose title, summary or categories contain any of these. |
| `includeContent` | add full content HTML (default false). |
| `maxItemsPerFeed` | items read per feed, in feed order (default 100). |
| `maxItems` | stop after this many delivered items (default 1,000). Each delivered item is billed. |

### 🧾 JSON sample record

```json
{
  "record_id": "54dc396b11aed1ae01c5051d",
  "feed_url": "https://www.nasa.gov/news-release/feed/",
  "feed_source_url": "https://www.nasa.gov/news-release/feed/",
  "feed_title": "NASA",
  "feed_site_link": "https://www.nasa.gov",
  "feed_format": "rss2",
  "feed_language": "en-US",
  "item_position": 1,
  "title": "NASA Names Stephen Cash Marshall Space Flight Center Director",
  "link": "https://www.nasa.gov/news-release/nasa-names-stephen-cash-marshall-space-flight-center-director/",
  "guid": "https://www.nasa.gov/?post_type=press-release&p=1057238",
  "published_at": "2026-10-16T20:14:39Z",
  "updated_at": null,
  "summary_text": "NASA Administrator Jared Isaacman has named Stephen Cash director of the agency’ …",
  "content_html": null,
  "categories": [
    "Leadership",
    "Marshall Space Flight Center",
    "NASA Headquarters"
  ],
  "enclosures": null,
  "image_url": null,
  "comments_link": null,
  "read_at": "2026-10-17T03:46:16Z"
}
```

### 🔧 How it works

Feeds are fetched 8 at a time and parsed with a hardened XML parser (no external entities, no network access from the XML). RSS dates (RFC 822) and Atom dates (ISO 8601) are both turned into UTC.

Every run reads each host's robots.txt first: a path it disallows is skipped, listed in the run receipt and never charged. Only public internet addresses are fetched (no private, loopback or cloud-metadata addresses, checked again on every redirect). No logins, no CAPTCHA solving, no proxies.

Delivery is pushed first and charged after. The run receipt (`RUN_RECEIPT`) lists every link: feeds discovered, items in the feed, read, matching, duplicates skipped and delivered, plus the robots.txt result and the delivered and charged counts.

### 💰 Pricing example

Per item delivered, no start fee, no monthly charge:

| Apify plan | Price per item |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold, Platinum, Diamond | $0.0335 |

- 10 items: $0.50 on the Free plan, $0.335 on Gold.
- 1,000 items: $50.00 on Free, $33.50 on Gold.
- 10,000 items: $500.00 on Free, $335.00 on Gold.

**Coverage and size.** Proof runs on 17 Oct 2026: the Federal Reserve feed held 20 items and NASA's 10 (both delivered in about 3 seconds); the Federal Register feed held 200; NASA's homepage advertised its feed and it was found; GitHub's .atom release feeds were skipped because GitHub's robots.txt disallows them.

### ⚖️ Legal & ToS

Feed content belongs to its publishers. You choose the links. Make sure you have the right to download and use the content you point it at; the actor fetches only what you give it (and, where you turn it on, what those pages link to).

Every run reads each host's robots.txt first: a path it disallows is skipped, listed in the run receipt and never charged. Only public internet addresses are fetched (no private, loopback or cloud-metadata addresses, checked again on every redirect). No logins, no CAPTCHA solving, no proxies.

### ❓ FAQ

**Does it keep history?**
No. Each run reads what the feed holds now; run it on a schedule and upsert by record_id.

**Why is an author missing?**
Author names are not delivered.

**Can it read feeds behind a login?**
No.

### 🆘 Troubleshooting

- **no feed: the link is a web page** — The page advertises no feed; find the feed link on the site and give it directly.
- **Fewer items than expected** — Feeds only hold their latest items (often 10 to 50); check maxItemsPerFeed and your filters.
- **SOURCE UNAVAILABLE** — None of your links could be reached after retries. Nothing was charged.

### 🔗 Related Actors

- [PR Newswire Scraper](https://apify.com/nexgensignal/press-release-monitor-api) — press releases by company or topic
- [Website Tech Stack Detector](https://apify.com/nexgensignal/website-tech-stack-api) — what a site is built with
- [Website Contact Scraper](https://apify.com/nexgensignal/bulk-website-contact-extractor) — contact details from website lists

🏢 **About NexGen Signal** — data tools and official-source data products on Apify. Browse the catalog: [apify.com/nexgensignal](https://apify.com/nexgensignal)

### ⭐ Found this useful?

If this actor saved you time, a rating on its Apify Store page helps other buyers find it.

Part of NexGen Signal — data tools and official-source data products.

# Actor input Schema

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

RSS, Atom, RDF or JSON Feed links, or website links. Up to 2,000 per run.

## `discoverFeeds` (type: `boolean`):

When a link is a web page, read the RSS/Atom/JSON feeds it advertises (up to 3).

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

Date like 2026-10-01 (UTC). Items with no date are skipped when this is set.

## `keywords` (type: `array`):

Keep items whose title, summary or categories contain any of these (case-insensitive). Empty = all items.

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

Add the full content HTML when the feed carries it (content:encoded, Atom content, JSON content_html).

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

Read at most this many items from each feed, in feed order (usually newest first).

## `maxItems` (type: `integer`):

Stop after this many items in total. Each delivered item is billed.

## Actor input object example

```json
{
  "feedUrls": [
    "https://www.federalreserve.gov/feeds/press_all.xml",
    "https://www.nasa.gov/news-release/feed/"
  ],
  "discoverFeeds": true,
  "keywords": [],
  "includeContent": false,
  "maxItemsPerFeed": 100,
  "maxItems": 10
}
```

# Actor output Schema

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

The delivered (and billed) records.

## `receipt` (type: `string`):

Per-link outcome, robots result, delivered and charged counts.

# 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://www.federalreserve.gov/feeds/press_all.xml",
        "https://www.nasa.gov/news-release/feed/"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/rss-feed-reader-api").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://www.federalreserve.gov/feeds/press_all.xml",
        "https://www.nasa.gov/news-release/feed/",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/rss-feed-reader-api").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://www.federalreserve.gov/feeds/press_all.xml",
    "https://www.nasa.gov/news-release/feed/"
  ],
  "maxItems": 10
}' |
apify call nexgensignal/rss-feed-reader-api --silent --output-dataset

```

## MCP server setup

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

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/CkwDOYvbrRCFPJdRt/builds/kGmiobZlzCC9GJBx9/openapi.json
