RSS, Atom & JSON Feed Monitor
Pricing
from $0.68 / 1,000 feed results
RSS, Atom & JSON Feed Monitor
Monitor RSS, Atom, JSON Feed and website feeds. Get structured health records and only new or changed items with persistent state and HTTP caching.
Pricing
from $0.68 / 1,000 feed results
Rating
0.0
(0)
Developer
Hryhory Sinenka
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
RSS, Atom & JSON Feed Change Monitor for Agents
Use this RSS change monitor to turn RSS, Atom, JSON Feed, or ordinary website URLs into a stateful, versioned change stream. Every run returns feed-health evidence and only emits item records that are new or changed after the stored baseline.
This Actor is designed for agents, scheduled automations, ETL jobs, and monitoring systems that need stable JSON rather than another one-time feed parser.
Start with a ready-made example
- Check RSS or Atom feed health for a low-cost first run with feed-health evidence.
- Monitor competitor blog updates to create a baseline and route later changes into a scheduled workflow.
Know the price before scheduling
Each visible feed-health or changed-item record costs $0.0008 on Apify Free,
plus $0.00005 when the Actor starts. A quiet check of one direct feed that
emits only its health record therefore costs $0.00085.
Paid Apify plans lower the result price for higher-volume monitoring: Starter
is 5% lower, Scale 10% lower, and Business 15% lower. For one direct feed, a
run that reaches the default limit of 1,000 changed items plus its health record
would cost at most about $0.80085 on Free or $0.68073 on Business. The start
price is unchanged.
Use Free for evaluation or quiet schedules. A paid plan becomes cheaper when a feed regularly changes, or when many feeds are checked together. For a tighter ceiling, set the maximum run cost in Apify; the Actor stops writing chargeable results when that limit is reached.
Use from an MCP client
Connect only this Actor through Apify's remote MCP server:
https://mcp.apify.com?tools=xerophylous_mercy_0wn/feed-contract-monitor
Authenticate with Apify OAuth or a bearer token. The scoped URL keeps tool discovery focused and exposes the Actor's input and output contracts to compatible agent clients.
Pay from an AI agent with x402
An agent can run this Actor without an Apify account or Apify API token by
buying an Apify prepaid bearer token with USDC on Base. Follow Apify's
x402 setup to create and fund the
wallet and buy the token. Apify currently requires a $1 minimum prepaid
balance; the token expires after 14 days and unused balance is non-refundable.
After obtaining the token, call this Actor directly:
curl -sS -X POST \-H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/json" \-d '{"feedUrls":["https://www.nasa.gov/feed/"],"firstRunMode":"emit_recent","maxInitialItems":3}' \"https://api.apify.com/v2/actors/xerophylous_mercy_0wn~feed-contract-monitor/run-sync-get-dataset-items"
The prepaid balance is the absolute spending cap. Keep the bearer token secret; do not place it in workflow JSON, shared logs, or public prompts.
Use from n8n
n8n has approved and published the Feed Change Alert workflow in its workflow library. The page shows the complete setup before you use the template and gives this integration one native n8n discovery and reuse path.
Self-hosted n8n users can install the public, scanner-passing community package
n8n-nodes-feed-contract-monitor.
It runs this Actor with Apify API key or OAuth credentials and ships an
importable scheduled feed-change workflow. The public package, source,
provenance, and security scan are versioned independently from this Actor.
If you prefer a direct JSON import after installing the community node, download the Feed Change Alert workflow JSON, import it into self-hosted n8n, add an Apify credential, and run the quiet baseline once before activating its schedule.
What it does
- Parses RSS 2.0, RSS 1.0/RDF, Atom 1.0, and JSON Feed 1.0/1.1.
- Discovers feeds from standard HTML
<link rel="alternate">elements. - Sends
If-None-MatchandIf-Modified-Sinceon later runs when publishers provideETagorLast-Modified. - Stores a bounded baseline in a named Apify key-value store.
- Emits
newandchangeditem records with deterministic fingerprints and delivery IDs. - Reports malformed feeds, duplicate IDs, invalid dates, stale feeds, redirects, HTTP failures, and output limits with stable issue codes.
- Never scrapes linked article pages. Content comes only from the feed itself.
- Rejects private-network, loopback, link-local, authenticated, and non-HTTP targets.
Quick start
Use a direct feed URL:
{"feedUrls": ["https://www.nasa.gov/feed/"],"firstRunMode": "emit_recent","maxInitialItems": 20}
Or give it websites and let it discover their declared feeds:
{"feedUrls": ["https://example.com/","https://another.example/news"],"discoverFromWebsites": true,"stateNamespace": "production-news"}
For a clean monitoring baseline without historical output:
{"feedUrls": ["https://example.com/feed.json"],"firstRunMode": "baseline_only"}
Schedule later runs with the same stateStoreName and stateNamespace.
Dataset contract
The default dataset contains two record types. Both are charged as visible dataset results under Apify pay-per-event pricing.
Feed-health record
One health record is emitted for every checked feed. Website discovery adds one additional discovery health record.
{"schemaVersion": "feed-health/1.0","recordType": "feed_health","sourceUrl": "https://www.nasa.gov/feed/","feedUrl": "https://www.nasa.gov/feed/","feedTitle": "NASA","feedFormat": "rss-2.0","checkedAt": "2026-08-04T15:00:00.000Z","status": "ok","httpStatus": 200,"itemCounts": {"seen": 10,"new": 3,"changed": 0,"unchanged": 7,"emitted": 3,"deferred": 0,"remembered": 10},"conditionalRequest": {"etagUsed": true,"lastModifiedUsed": false,"notModified": false},"stale": false,"issues": []}
Changed-item record
{"schemaVersion": "feed-item/1.0","recordType": "feed_item","sourceUrl": "https://example.com/feed.json","feedUrl": "https://example.com/feed.json","feedTitle": "Example research feed","feedFormat": "json-feed-1.1","checkedAt": "2026-08-04T15:00:00.000Z","status": "new","changeType": "new","deliveryId": "77248d...","itemId": "paper-123","url": "https://example.com/papers/123","title": "A new result","summary": "Publisher-supplied excerpt","contentText": null,"authors": ["Example Author"],"tags": ["chemistry"],"publishedAt": "2026-08-04T13:00:00.000Z","modifiedAt": null,"fingerprint": "f7b5ac...","sourcePointer": "items[0]","issues": []}
The run summary is also stored as SUMMARY in the run's default key-value
store.
Delivery semantics
Delivery is at least once. A process can stop after a dataset write but
before its baseline update, so downstream systems should deduplicate with
deliveryId. The ID is stable for the same feed URL, item ID, and item
fingerprint. A corrected item receives a new delivery ID and
changeType: "changed".
Missing items are not reported as deletions because most feeds are rolling
windows. Items deferred by maxItemsPerRun remain eligible on a later run.
Content modes
metadata: IDs, links, titles, dates, authors, and tags only.excerpts(default): metadata plus a truncated publisher-supplied summary.feed_content: excerpts plus truncated text supplied inside the feed.
The Actor does not visit item links, bypass access controls, or retrieve authenticated content.
Persistent state
The default named store is feed-contract-monitor-state. Each feed has one
hashed state record containing:
ETagandLast-Modifiedvalues;- last successful and last checked timestamps;
- feed format and final URL;
- bounded item IDs, fingerprints, and seen timestamps.
Use stateNamespace to keep independent baselines for development,
production, or different consumers. State is capped by
maxStateItemsPerFeed; the most recently seen entries are retained.
Stable issue codes
| Range | Meaning |
|---|---|
FCM001–FCM010 | URL, DNS, network, redirect, size, and encoding failures |
FCM100–FCM103 | Unsupported or malformed feed/discovery documents |
FCM110–FCM116 | Feed and item quality warnings |
FCM200–FCM202 | State or output-limit warnings |
Every issue includes code, severity, message, and an optional source
pointer. Codes remain stable within contract version 1.x.
Cost controls
- 256 MB default memory and 512 MB hard maximum.
- Bounded response size, retries, redirects, state, output, and concurrency.
- Conditional requests when the publisher supports them.
- No browser runtime or proxy use.
- One visible health result per checked feed, even when no item changed.
Set a run maximum cost in Apify when using large URL batches. Publication uses pay per event so the Actor remains available to API and agentic consumers.
Current limitations
- HTML discovery uses declared alternate links; it does not execute JavaScript.
- Non-UTF-8 feeds may contain replacement characters.
- Publisher-specific formats outside RSS, Atom, RDF/RSS, and JSON Feed are not inferred.
- Feed removals are not treated as item deletions.
- Availability and correctness ultimately depend on the publisher's endpoint.
Output and schema versions
- Feed items:
feed-item/1.0 - Feed health:
feed-health/1.0 - Persistent state:
feed-state/1.0 - Run summary:
feed-monitor-run/1.0
Minor releases may add optional fields or issue codes. Breaking field changes require a new major contract version.