# RSS & Atom Feed Monitor: Only New Items (`pandadad0214/rss-feed-monitor`) Actor

Watch many RSS, Atom or JSON feeds — or just website URLs, with feed autodiscovery — and get only items that are new since your last run. Keyword and age filters; one clean row per item with an agent-ready summary. Excel and CSV.

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

## Pricing

Pay per event

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 & Atom Feed Monitor: Only New Items, Keyword Filters, Excel

**Use this to watch many RSS, Atom or JSON feeds and get only the items that are new since your last run.** Paste feed URLs, or just website and blog URLs: the feed is found automatically. Each row has the **feed, title, link, publish date and age, author, plain-text summary, categories, podcast/media enclosure and the keywords it matched**. Filter by **keywords, excluded words and maximum age**. **$0.0005 per item.**

- 🔁 **Only new items**: the Actor remembers what it already returned (per *state key*), so a scheduled run returns and charges only fresh items
- 🔎 **Feed autodiscovery**: give `https://blog.example.com` and it finds `/feed`, `/rss.xml` or the `<link rel="alternate">` feed
- 🧰 **RSS 2.0, Atom and JSON Feed**, up to 500 feeds per run, fetched in parallel
- 🏷️ **Keyword include/exclude** across title, summary and categories, plus **maximum age in hours**
- 🩺 **FEED_STATUS** record: which feeds worked, which failed and why (failed feeds are free)
- 💸 **$0.0005 per item**; runs with nothing new are free

### Who it's for

- **Marketing and PR teams:** competitor blogs, press rooms and industry news in one daily sheet
- **Sales and RevOps:** trigger events (funding, launches, hiring posts) from target-company blogs
- **Analysts, compliance and policy teams:** regulator, agency and court RSS feeds filtered by keyword
- **Newsletter writers and content curators:** a clean daily digest with summaries and links
- **AI agents and automations:** a reliable "what's new" step before summarising or posting

### How to use it

1. Click **Try for free**.
2. Paste **feeds or websites** (one per line).
3. Optional: **keywords**, **exclude keywords**, **maximum age (hours)**, a **state key** for this watch list.
4. Click **Start**, then schedule it (hourly or daily). Download **RSS_XLSX** or **RSS_CSV** from **Storage → Key-value store**, or connect the dataset to Slack, email or Sheets.

#### Input example

```json
{
  "feeds": ["https://blog.apify.com", "https://github.blog", "https://www.theverge.com"],
  "keywords": ["AI", "agent", "scraping"],
  "maxAgeHours": 48,
  "onlyNew": true,
  "stateKey": "tech-watch"
}
```

### Task examples

- **Competitor blog watch:** `{"feeds": ["competitor1.com/blog", "competitor2.com/news"], "stateKey": "competitors"}` daily
- **Regulator alerts with keywords:** `{"feeds": ["https://www.federalregister.gov/api/v1/documents.rss?conditions%5Bagencies%5D%5B%5D=food-and-drug-administration"], "keywords": ["device", "recall"]}`
- **Hacker News stories over 100 points about AI:** `{"feeds": ["https://hnrss.org/newest?points=100"], "keywords": ["AI", "LLM"], "maxAgeHours": 24}`
- **Podcast episode tracker:** `{"feeds": ["https://feeds.example.com/show.xml"], "onlyNew": true}` and read `enclosureUrl`
- **One-off digest of the last week, no memory:** `{"feeds": [...], "maxAgeHours": 168, "onlyNew": false}`

### Output example

```json
{
  "feedTitle": "The GitHub Blog",
  "feedUrl": "https://github.blog/feed/",
  "siteUrl": "https://github.blog/",
  "title": "Beyond code generation: A developer’s guide to agentic engineering",
  "link": "https://github.blog/ai-and-ml/github-copilot/beyond-code-generation-a-developers-guide-to-agentic-engineering/",
  "published": "2026-11-06T22:15:59+00:00",
  "ageHours": 65.2,
  "author": "Nick Liffen",
  "summary": "Writing code got faster. The work around it didn't. See how you can plan, write code, review changes, and investigate production issues with GitHub Copilot, and what work still needs your judgment. The post Beyond code generation: A developer’s guide to agentic engineering appeared first on The GitHub Blog .",
  "categories": [
    "AI & ML",
    "GitHub Copilot",
    "GitHub Universe"
  ],
  "enclosureUrl": null,
  "matchedKeywords": [],
  "itemKey": "392d1ff82a7bb255fe2e",
  "agentSummary": "The GitHub Blog: \"Beyond code generation: A developer’s guide to agentic engineering\" 2026-11-06 (65.2h ago) — Writing code got faster. The work around it didn't. See how you can plan, write code, review changes, and investigate production issues with GitHub Copilot, an… https://github.blog/ai-and-ml/github-copilot/beyond-code-generation-a-developers-guide-to-agentic-engineering/"
}
```

The item above is real output from a test run on 2026-11-09.

### For AI agents

Use this Actor to answer "what's new on these sites or feeds since last time, about topic X?". Minimal input: `{"feeds": ["https://github.blog"], "maxAgeHours": 24}`. Read `agentSummary` per item (feed, title, date and age, short summary, matched keywords, link) or the SUMMARY `takeaway` (count per feed and the newest headline). Check `FEED_STATUS` for feeds that failed.

- **MCP:** add this Actor to Claude, Cursor, Copilot or any MCP client through the [Apify MCP server](https://mcp.apify.com): `https://mcp.apify.com/?actors=pandadad0214/rss-feed-monitor`, then ask in plain English.
- **API:** `POST https://api.apify.com/v2/acts/pandadad0214~rss-feed-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN` with the input JSON.
- Keep a separate `stateKey` per watch list so "only new" memory doesn't mix between agents or clients.

### Pricing

**$0.0005 per feed item returned** (pay per event) plus Apify's tiny Actor-start fee of $0.00005. 1,000 items cost $0.50; a daily watch of 20 feeds returning ~60 new items costs about $0.03 a day. Runs with nothing new cost nothing, and failed or blocked feeds are never charged. Set **Maximum results** or Apify's *maximum charge per run* to cap any run.

**Apify paid-plan discounts:** Bronze members pay 10% less, Silver 20% less and Gold 30% less per item; the discount applies automatically. Apify's free plan includes monthly credit to try it.

### FAQ

**How does "only new" work?** Each returned item's ID (GUID, link or title+date) is stored in a named key-value store in your own Apify account (`pf-rss-feed-monitor-state`), under your state key. Next run, those items are skipped and not charged. Use a new state key, or set `onlyNew` to false, to start fresh.

**What if a site has no feed?** The run lists it in `FEED_STATUS` as "no RSS/Atom feed found" at no charge. Use the Website Change Monitor for pages without feeds.

**Does it read full articles?** No. It returns what the feed publishes (title, summary or content, link). That keeps it fast, cheap and polite to publishers.

**Is it safe to point at any URL?** Only public http(s) addresses are fetched. Private, internal and cloud-metadata addresses are blocked, including after redirects.

### Part of [Panda Federation](https://pandafederation.com/?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor)

This Actor is part of the [Panda Federation](https://pandafederation.com/?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor) catalog of public-data tools. See the rest of the work on the [official site](https://pandafederation.com/?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor).

### More Panda Federation tools

- [Website Change Monitor](https://apify.com/pandadad0214/website-change-monitor?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor): watch pages that have no feed
- [Federal Register Monitor](https://apify.com/pandadad0214/federal-register-monitor?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor): new US federal rules and comment deadlines
- [Podcast Leads Finder](https://apify.com/pandadad0214/podcast-leads-finder?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor): find podcasts and hosts by topic
- [Broken Link Checker](https://apify.com/pandadad0214/broken-link-checker?utm_source=apify\&utm_medium=listing\&utm_campaign=rss-feed-monitor): find dead links on a site
- Full catalog and MCP server: [Panda Federation Tools on GitHub](https://github.com/pandadad0214/panda-federation-tools)

*Built by Panda Federation. Questions or a custom version? Open an issue on the Actor's Issues tab.*

### Changelog

- **2026-11-10:** Store copy polish (SEO title and description, working example input). README now links the official Panda Federation site with listing campaign tags. Pricing unchanged.
- **2026-11-09:** First release (0.1.0): RSS 2.0, Atom and JSON Feed parsing, website feed autodiscovery, only-new memory per state key, keyword include/exclude, maximum age, per-feed item cap, FEED_STATUS health record, SSRF-safe fetching, Excel and CSV (`RSS_XLSX` / `RSS_CSV`), `agentSummary` and SUMMARY `takeaway`, pay-per-event pricing with Bronze/Silver/Gold discounts.

# Actor input Schema

## `feeds` (type: `array`):

RSS, Atom or JSON Feed URLs, or plain website/blog URLs (the feed is found automatically). Up to 500 per run.

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

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

## `excludeKeywords` (type: `array`):

Drop items containing any of these words.

## `maxAgeHours` (type: `integer`):

Skip items older than this. 0 or empty = any age. Undated items are kept.

## `onlyNew` (type: `boolean`):

Default on. Remembers returned items (per state key) in a named key-value store, so scheduled runs return and charge only new items.

## `stateKey` (type: `string`):

Separate memory for different watch lists, e.g. competitors or regulators. Default: default.

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

Newest N items considered per feed. Default 50.

## `summaryChars` (type: `integer`):

Plain-text summary length per item. Default 500.

## `maxResults` (type: `integer`):

You pay per item returned, so this also caps the cost. Default 500.

## Actor input object example

```json
{
  "feeds": [
    "https://blog.apify.com",
    "https://hnrss.org/newest?points=100"
  ],
  "onlyNew": true,
  "maxItemsPerFeed": 50,
  "summaryChars": 500,
  "maxResults": 500
}
```

# Actor output Schema

## `table` (type: `string`):

No description

## `xlsx` (type: `string`):

No description

## `csv` (type: `string`):

No description

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

Agent-friendly keys: `takeaway` (one-line result), counts, `nextStep` and `nextSteps`.

# 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 = {
    "feeds": [
        "https://blog.apify.com",
        "https://hnrss.org/newest?points=100"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandadad0214/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 = { "feeds": [
        "https://blog.apify.com",
        "https://hnrss.org/newest?points=100",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pandadad0214/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 '{
  "feeds": [
    "https://blog.apify.com",
    "https://hnrss.org/newest?points=100"
  ]
}' |
apify call pandadad0214/rss-feed-monitor --silent --output-dataset

```

## MCP server setup

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