# RSS Feed Scraper & Monitor - RSS to JSON (`monriah-studio/rss-feed-monitor`) Actor

RSS to JSON for any RSS 2.0 or Atom feed: news, blogs, changelogs, podcasts. Many feeds per run, keyword filters, and change detection that returns only new items since the last run. Public feeds only, no login, no proxy.

- **URL**: https://apify.com/monriah-studio/rss-feed-monitor.md
- **Developed by:** [MonRiah Studio](https://apify.com/monriah-studio) (community)
- **Categories:** News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 feed item 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

## RSS Feed Scraper & Monitor - RSS to JSON

A 15-result test run with the default input (Hacker News front page) costs about $0.02 ($0.0015 per result, plus a $0.00005 start fee). Apify's free plan includes monthly platform credit.

**Turn any RSS or Atom feed into clean JSON, CSV or Excel.** Point it at news sites, blogs, product changelogs, release notes, job feeds or podcasts, and get one structured row per item. Turn on **change detection** and each scheduled run returns **only the items that are new since the last run**, so you can build news monitors, alerts and AI-agent pipelines without writing a feed parser.

No login, no proxy, no browser. It fetches only the public feed URLs you give it.

### What it does

- Parses **RSS 2.0 and Atom**, with the format auto-detected per feed.
- Reads **many feeds in one run** and writes a per-feed summary.
- Normalizes the fields: title, link, guid, description (plain text), author, categories, ISO `publishedAt`, plus optional full HTML content.
- **Change detection** (`onlyNewSinceLastRun`): remembers each item's guid or link in a named key-value store, so you pay only for new items.
- **Keyword filter** on title and description keeps noisy feeds cheap.

### Use cases

- **News monitoring**: track mentions of your brand, competitors or topics across news and blog feeds, and send new matches to Slack or email.
- **RSS to JSON API**: give your app, database or AI agent clean JSON from any feed, on a schedule or on demand.
- **Changelog and release tracking**: watch vendors' release notes and status pages that publish RSS.
- **Content curation**: fill newsletters, Discord or Telegram channels and dashboards with fresh items.
- **Research datasets**: archive feed items over time for analysis.

### Input example

```json
{
  "feedUrls": [
    "https://hnrss.org/frontpage",
    "https://feeds.bbci.co.uk/news/rss.xml"
  ],
  "maxItemsPerFeed": 25,
  "keywords": ["AI", "open source"],
  "onlyNewSinceLastRun": true,
  "includeContent": false
}
```

### Output example

```json
{
  "feedUrl": "https://hnrss.org/frontpage",
  "feedTitle": "Hacker News: Front Page",
  "feedFormat": "rss",
  "title": "Launch HN: Laminar (YC S24) – We trained a model to catch silent agent failures",
  "link": "https://news.ycombinator.com/item?id=50154029",
  "guid": "https://news.ycombinator.com/item?id=50154029",
  "description": "Hi HN, we're Robert and Din from Laminar...",
  "author": "skull8888888",
  "categories": [],
  "publishedAt": "2026-10-19T16:00:18.000Z",
  "isNew": true,
  "scrapedAt": "2026-10-19T17:07:15.273Z"
}
```

Fields: `feedUrl, feedTitle, feedFormat, title, link, guid, description, author, categories, publishedAt, isNew, scrapedAt`, plus `content` when `includeContent` is true. The key-value store record `SUMMARY` holds item and new-item counts for each feed. Export to JSON, CSV or Excel, or connect webhooks, Google Sheets, Slack, Zapier, Make or n8n.

### Pricing

Pay per result: **$1.50 per 1,000 items delivered** (`result` event, $0.0015 per item). Apify also charges a tiny Actor-start event ($0.00005 per run per GB of memory). Items skipped by change detection or keyword filters are **not charged**.

Examples:

- Hourly monitor of 10 feeds with change detection and about 100 new items a day: about **$0.15 a day**.
- One-off export of 5 feeds × 25 items: about **$0.19**.

### FAQ

**How do I find a site's RSS feed?** Look for an RSS icon or a `/feed`, `/rss` or `/atom.xml` URL, or check the page source for `<link rel="alternate" type="application/rss+xml">`. Many news sites, blogs, YouTube channels, Reddit and GitHub releases publish feeds.

**How does change detection work?** Item guids (or links) are stored in the key-value store named by `stateStoreName`. The first run outputs everything and sets the baseline, and later runs output only unseen items. Rename the store to start fresh.

**How often can I run it?** As often as you like. Use an Apify Schedule (e.g. hourly). Each run takes only a few seconds.

**Does it support JSON Feed or podcast enclosures?** JSON Feed isn't supported yet. Podcast RSS works for titles, links and dates, but enclosure fields aren't modeled yet.

**Can it scrape sites without a feed?** No, it reads RSS and Atom feeds only. Fetch only feeds you're allowed to access, and respect each publisher's terms.

*Not affiliated with any feed publisher.*

### Use from an AI agent

You can give this Actor to an AI agent as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) (`https://mcp.apify.com`), from Claude, Cursor, VS Code and other MCP clients. Add the server with only this Actor loaded:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=monriah-studio/rss-feed-monitor"
    }
  }
}
```

On first connection your browser opens to sign in to Apify (OAuth). Or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }` to use your API token instead. Then ask your agent something like "Summarize today's top Hacker News stories".

You can also call it directly via the [Apify API](https://docs.apify.com/api/v2), for example to run it and get the results in one request:

```bash
curl -X POST "https://api.apify.com/v2/acts/monriah-studio~rss-feed-monitor/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "feedUrls": ["https://hnrss.org/frontpage"],
  "maxItemsPerFeed": 15
}'
```

### More actors from MonRiah Studio

- [Greenhouse, Lever, Ashby & Workday Jobs Scraper](https://apify.com/monriah-studio/ats-hiring-signals): open roles and hiring signals from 6 ATS job boards, with change detection.
- [SEC Form 4 Insider Trading Scraper](https://apify.com/monriah-studio/sec-form4-insider-trades): insider trading data from official SEC EDGAR Form 4 filings.
- [Journalist Requests Scraper](https://apify.com/monriah-studio/journalist-requests): live #journorequest and PR source requests from Bluesky and Mastodon, a HARO alternative.
- [Grants.gov Funding Opportunities Scraper](https://apify.com/monriah-studio/grants-gov-opportunities): federal grant opportunities from the official Grants.gov API, with award amounts, deadlines, eligibility and new-grant alerts.
- [Bluesky Mentions Monitor](https://apify.com/monriah-studio/bluesky-mentions): brand, keyword and hashtag mentions on Bluesky, with engagement, sentiment and only-new alerts.

# Actor input Schema

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

RSS 2.0 or Atom feed URLs. One per line. Only public feeds (no login).

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

Cap items read from each feed. Keep small for fast default runs.

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

Keep items whose title or description contains any of these (case-insensitive). Empty = keep all.

## `onlyNewSinceLastRun` (type: `boolean`):

Change detection: output only items not seen before (by guid/link). State kept in a named key-value store.

## `stateStoreName` (type: `string`):

Named key-value store used when onlyNewSinceLastRun is on.

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

Include full HTML content when the feed provides it. Off by default for smaller, faster output.

## Actor input object example

```json
{
  "feedUrls": [
    "https://hnrss.org/frontpage"
  ],
  "maxItemsPerFeed": 15,
  "keywords": [],
  "onlyNewSinceLastRun": false,
  "stateStoreName": "rss-feed-monitor-state",
  "includeContent": false
}
```

# Actor output Schema

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

All feed items delivered by this run.

## `summary` (type: `string`):

JSON record SUMMARY: scrapedAt, totalDelivered, and per-feed stats.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("monriah-studio/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://hnrss.org/frontpage"] }

# Run the Actor and wait for it to finish
run = client.actor("monriah-studio/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://hnrss.org/frontpage"
  ]
}' |
apify call monriah-studio/rss-feed-monitor --silent --output-dataset

```

## MCP server setup

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