RSS Feed Monitor – New Entries Since the Last Run
Pricing
from $1.40 / 1,000 feed compareds
RSS Feed Monitor – New Entries Since the Last Run
Compare up to 20 supplied RSS/Atom feeds across runs. Return newly observed IDs or links after a baseline. Incomplete reads leave history unchanged and are uncharged.
Pricing
from $1.40 / 1,000 feed compareds
Rating
0.0
(0)
Developer
Gabor Molnar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Security
Limited permissionsShare
Compare supplied RSS 2.0, RSS 1.0 or Atom feeds across runs. The first successful check establishes a baseline and returns no old entries. Later checks return entries with identities not previously observed by this monitor. No API key is needed.
{"urls": ["https://www.nasa.gov/feed/"],"monitorName": "news"}
Reuse monitorName and the feed URLs on subsequent runs, or in an Apify schedule. A new name starts separate history. Canonical URL repeats (host case, default port and fragments) produce one row/check; different paths or query strings are separate feeds.
Run it on a schedule
One run is a snapshot. A schedule is what makes it a monitor; the Actor does not create one for you.
- Fill in
urlsandmonitorNameand save the input as a task. - In Apify Console open Schedules, click Create new, add the task and set the cron expression to
@hourly(or@daily). - The first scheduled run takes the baselines and reports
baseline. Every run after that returns only the entries it has not seen before.
To hear only about what matters, read the run's dataset and keep the rows where reasonCode is new_entries. Apify's Slack integration posts when a run finishes but cannot see the rows, so on its own it tells you the check ran, not what it found. A Make, n8n or Zapier workflow that starts when the run finishes, fetches the dataset items and filters on that field does.
What it costs at $0.002 per feed check: 20 feeds daily is about $1.20 a month, 20 feeds hourly about $29.
Output
One row per processed distinct feed with reasonCode, entries, newCount, observedCount, checkedAt, previousCheckedAt, url, finalUrl, httpStatus, format and truncated. Each returned entry retains the reader's id, title, link, summary, content and dates when present. Summary/content can contain untrusted HTML; sanitize before displaying it.
Identity is the feed's ID with surrounding whitespace trimmed, otherwise its HTTP(S) link resolved against the final feed URL. IDs are not interpreted as URLs. The reader ignores xml:base, so relative links in feeds using XML base may resolve incorrectly and miss distinctions between entries; use feeds with stable IDs or absolute links for reliable comparisons. Dates do not determine novelty: newly observed is not necessarily newly published. Reordering, edits under the same identity and disappearing/reappearing identities produce no new entries. Duplicate identities within a response keep the first entry. Entries without an ID or usable link make that check inconclusive.
History stores identity hashes and the last successful check time in a key-value store named rss-feed-monitor-qaejuflkkomn4ylnw (the Actor's name and id) in your own Apify account. Failed, incomplete or inconclusive reads do not advance it. Corrupt or inaccessible history is a free state_error, not a fresh baseline.
Billing
One charge per answered feed check, not per entry. Baselines, unchanged checks and successful checks with new entries are charged; failures are not. Processing stops at the run's charge limit. Unprocessed feeds have neither result rows nor history updates.
| reasonCode | Meaning | Charged? |
|---|---|---|
baseline | Initial identities recorded; old entries not emitted | yes |
new_entries | Newly observed identities returned | yes |
unchanged | No unseen identities in this response | yes |
invalid_url, unsafe_target | Invalid or nonpublic target | no |
blocked, http_error, unreachable | Feed could not be read | no |
invalid_redirect, redirect_loop, redirect_limit | Redirect chain could not be followed safely | no |
too_large, invalid_xml, not_feed | Response unusable as a bounded feed | no |
truncated_feed | Reader could not retain the whole current feed | no |
missing_identity | An entry has neither ID nor usable link | no |
state_limit | New identities would exceed retained history | no |
state_error | History could not be loaded, validated or saved | no |
Limits
- Up to 20 feeds/run, sequential checks; ports 80/443, no URL credentials. Public DNS addresses are checked and pinned on each redirect hop.
- Up to 100 entries/current feed, 32 MiB decoded response, 15 seconds/read and five redirects. Truncation is uncharged and leaves state untouched, rather than comparing an incomplete snapshot.
- Up to 10,000 retained identities/feed. No eviction: after the ceiling, checks introducing new identities fail free. Start a new
monitorNameto reset, which deliberately treats the current response as baseline. - Only entries present in a supplied response can be observed. Items published and removed between checks can be missed. No article crawling, edits/removal alerts, email notifications or publication-completeness claim.
- Do not run the same namespace/feed concurrently: state updates are not locked. History is saved before the dataset row; a crash between these writes can lose a notification. This is not a durable or exactly-once delivery service.
You must have permission to access and reuse each feed's content; public access is not blanket redistribution permission. The example source is NASA's documented RSS feed. Acknowledge NASA for its content; third-party copyright, likeness and endorsement restrictions still apply. NASA does not endorse this Actor.