# Public RSS Feed Monitor (`snappytools/rss-feed-monitor`) Actor

Public RSS Feed Monitor downloads one or more publicly accessible RSS 2.0 or Atom feeds, parses every entry, and saves normalized records to the Apify dataset.

- **URL**: https://apify.com/snappytools/rss-feed-monitor.md
- **Developed by:** [Snappy](https://apify.com/snappytools) (community)
- **Categories:** News, SEO tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 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/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

## Public RSS Feed Monitor – RSS and Atom feed scraper and export

Give it a list of public RSS 2.0 or Atom feed URLs and get back one clean row per feed entry. Each row has the title, link, summary, author, categories, publish time and the feed it came from, so columns stay the same across every feed.

You can keep only what matters with a keyword filter or an age filter. Schedule it to run every hour or every day and you build a running archive of new posts.

### Why this one

- **Works with both formats.** It reads RSS 2.0 and Atom feeds and puts them into one layout, with `feedFormat` telling you which each was.
- **Stable ids.** Every record has an `id` built from the feed URL and the item's guid or link, so you can spot repeats across runs.
- **Filters before you pay.** The **Keyword filter** and **Only items newer than (hours)** settings drop unwanted items, and you are only charged for what is saved.
- **Many feeds in one run.** Add up to 20 feeds and pull up to 200 items from each.
- **Failed feeds don't stop the run.** A feed that errors is logged and skipped, and the other feeds still finish.
- **Pay per result.** $1.00 per 1,000 results, with no start fee, and runs with no results cost nothing.

### Quick start

```json
{
  "feedUrls": ["https://www.nasa.gov/rss/dyn/breaking_news.rss"],
  "maxItemsPerFeed": 5,
  "sinceHours": 0
}
```

In a test run on 27 Oct 2026 this returned 5 items from the NASA feed.

### What you can use it for

| Who | What for |
| --- | --- |
| Media monitoring teams | Track press releases from agencies and companies |
| Analysts | Collect regulatory, research or industry news into spreadsheets or BI tools |
| Marketers | Watch competitor blogs for new posts |
| Developers | Feed a normalised stream into alerts or LLM pipelines |
| Researchers | Build a historical archive of public announcements with scheduled runs |

### How to use it

1. Click **Try for free**.
2. Add your feeds under **Feed URLs**, for example `https://www.nasa.gov/rss/dyn/breaking_news.rss`. Use http or https links, up to 20.
3. Set **Max items per feed** (1 to 200, default 25).
4. Optional: type a **Keyword filter** such as `moon`. It matches the title or summary and ignores case.
5. Optional: set **Only items newer than (hours)**, for example `24`. Use 0 to turn it off.
6. Click **Start**.

To watch feeds over time, set up a schedule and use the `id` field to ignore items you have already seen.

### What data you get

One row per feed entry. Fields a feed doesn't provide come back as null or an empty list.

| Field | What it is | Example |
| --- | --- | --- |
| `id` | Stable hash of the feed URL and item guid or link | `e1b9a06d9554b3e0d7f20cfd68202bb0` |
| `url` | Link to the item | `https://www.nasa.gov/general/how-a-johnson-mentor-shapes-the-next-generation-of-nasa-talent/` |
| `title` | Item title | `How a Johnson Mentor Shapes the Next Generation of NASA Talent` |
| `summary` | Item summary with HTML removed | `When Rice University student Malvika Bhardwaj asked her mentor...` |
| `author` | Author, if the feed gives one | `Sumer Loggins` |
| `categories` | List of categories | `["General"]` |
| `publishedAt` | Publish time in ISO 8601 | `2026-10-27T07:07:51.000Z` |
| `fetchedAt` | When the item was fetched | `2026-10-27T08:57:43.919Z` |
| `feedUrl` | The feed it came from | `https://www.nasa.gov/rss/dyn/breaking_news.rss` |
| `feedTitle` | Title of the feed | `NASA` |
| `sourceDomain` | Domain of the feed | `www.nasa.gov` |
| `feedFormat` | Feed type | `rss` |

### Pricing

| Event | Price |
| --- | --- |
| Result (each item saved to the dataset) | $0.001 |

| Run | Cost |
| --- | --- |
| 100 results | $0.10 |
| 1,000 results | $1.00 |
| 10,000 results | $10.00 |

There is no start fee. Runs with no results cost nothing.

### Good to know

- **Limits.** Up to 20 feeds per run and 200 items per feed.
- **Timeouts and size.** Each request times out after 20 seconds, and responses over 5 MB are not accepted.
- **Failed feeds.** Feeds with a network error, a non-200 status or invalid XML are logged and skipped. The run fails only if every feed fails.
- **Summaries.** HTML is stripped and summaries are cut to 1,000 characters.
- **Items without dates.** The age filter keeps them.
- **Data source.** Only the public feed URLs you give it. No login is used.
- **Publisher terms.** Feed content belongs to its publishers, so check each publisher's terms of use.
- **Not affiliated.** This tool isn't affiliated with or endorsed by any feed publisher.

### Getting the data out

Download results as Excel, CSV or JSON from the Output tab. Send them to Google Sheets, Slack, Zapier, Make or webhooks from the **Integrations** tab. Every run is available through the Apify API, and you can schedule runs from **Schedules**.

### Questions or problems

Open an issue on the **Issues** tab and include the run link. I reply within one business day.

### Related tools

- [Sitemap News Article Extractor](https://apify.com/snappytools/smart-sitemap-article-extractor): pull articles from a site's news sitemap
- [Hacker News Search and Who-is-Hiring Extractor](https://apify.com/snappytools/hackernews-algolia-scraper): search Hacker News and export who-is-hiring posts
- [Government and Public Job Boards Aggregator (USAJobs API)](https://apify.com/snappytools/usajobs-public-job-search): search public government jobs

# Actor input Schema

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

List of public RSS 2.0 or Atom feed URLs (http or https). Maximum 20 feeds per run.

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

Maximum number of items saved from each feed (1-200).

## `keyword` (type: `string`):

Optional case-insensitive keyword; only items whose title or summary contain it are saved.

## `sinceHours` (type: `integer`):

Optional age filter in hours; 0 disables it. Items without dates are kept.

## Actor input object example

```json
{
  "feedUrls": [
    "https://www.nasa.gov/rss/dyn/breaking_news.rss"
  ],
  "maxItemsPerFeed": 10,
  "sinceHours": 0
}
```

# 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://www.nasa.gov/rss/dyn/breaking_news.rss"
    ],
    "maxItemsPerFeed": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("snappytools/rss-feed-monitor").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.nasa.gov/rss/dyn/breaking_news.rss"],
    "maxItemsPerFeed": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("snappytools/rss-feed-monitor").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.nasa.gov/rss/dyn/breaking_news.rss"
  ],
  "maxItemsPerFeed": 10
}' |
apify call snappytools/rss-feed-monitor --silent --output-dataset

```

## MCP server setup

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

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/qU9dTCgqWjUAxER2d/builds/msZEQVaUW7O1JwTIZ/openapi.json
