RSS Feed Monitor – New Entries Since the Last Run avatar

RSS Feed Monitor – New Entries Since the Last Run

Pricing

from $1.40 / 1,000 feed compareds

Go to Apify Store
RSS Feed Monitor – New Entries Since the Last Run

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

Gabor Molnar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Security

Limited permissions

Share

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.

  1. Fill in urls and monitorName and save the input as a task.
  2. In Apify Console open Schedules, click Create new, add the task and set the cron expression to @hourly (or @daily).
  3. 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.

reasonCodeMeaningCharged?
baselineInitial identities recorded; old entries not emittedyes
new_entriesNewly observed identities returnedyes
unchangedNo unseen identities in this responseyes
invalid_url, unsafe_targetInvalid or nonpublic targetno
blocked, http_error, unreachableFeed could not be readno
invalid_redirect, redirect_loop, redirect_limitRedirect chain could not be followed safelyno
too_large, invalid_xml, not_feedResponse unusable as a bounded feedno
truncated_feedReader could not retain the whole current feedno
missing_identityAn entry has neither ID nor usable linkno
state_limitNew identities would exceed retained historyno
state_errorHistory could not be loaded, validated or savedno

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 monitorName to 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.