RSS, Atom & JSON Feed Monitor avatar

RSS, Atom & JSON Feed Monitor

Pricing

from $1.50 / 1,000 feed item emitteds

Go to Apify Store
RSS, Atom & JSON Feed Monitor

RSS, Atom & JSON Feed Monitor

Discover, parse, filter, and deduplicate RSS, Atom, and JSON feeds, with persistent only-new monitoring for scheduled runs.

Pricing

from $1.50 / 1,000 feed item emitteds

Rating

0.0

(0)

Developer

sky zhong

sky zhong

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Discover and parse RSS 2.0, Atom, and JSON Feed sources into one consistent dataset. Use it once as a feed scraper, or schedule it with Output only unseen items enabled to build news alerts, content pipelines, competitor monitors, newsletters, and automation triggers.

Why use this Actor?

  • Accepts direct feed URLs and website homepages.
  • Discovers RSS, Atom, and JSON Feed links from HTML metadata and page links.
  • Normalizes different feed formats into one predictable output schema.
  • Filters entries with include and exclude keywords using any or all matching.
  • Removes duplicate articles across multiple feeds.
  • Persists seen-item history by monitorId, so scheduled runs can emit only new entries.
  • Does not visit article pages, use cookies, require account credentials, or call a paid external API.
  • Charges only for successfully emitted feed items. Source errors are saved as uncharged diagnostics.

Quick start

{
"startUrls": [
{ "url": "https://blog.apify.com/" },
{ "url": "https://example.com/blog" }
],
"onlyNew": true,
"monitorId": "daily-tech-news",
"includeKeywords": ["AI", "automation"],
"excludeKeywords": ["sponsored"],
"matchMode": "any",
"maxItemsPerFeed": 50,
"maxTotalItems": 500
}

The first run treats all matching items as new. Later runs using the same monitorId skip entries that were already emitted. Change the monitor ID when you want a separate history.

Input options

FieldDefaultPurpose
startUrlsrequiredUp to 100 public feed or website URLs
discoverFeedstrueDiscover feed links when an input is HTML
onlyNewtrueSkip items emitted by earlier runs with the same monitor ID
monitorIddefaultNames the persistent seen-item history
includeKeywords[]Keep entries matching these terms
excludeKeywords[]Reject entries matching any of these terms
matchModeanyRequire any or all include keywords
caseSensitivefalseControl keyword case sensitivity
deduplicateAcrossFeedstrueEmit the same article once per run
includeFeedContenttrueInclude content supplied by the feed
maxItemsPerFeed50Per-feed parsing limit, up to 500
maxTotalItems500Run-level paid-output limit, up to 5,000
respectRobotsTxttrueCheck robots.txt before requests
maxConcurrency5Concurrent input URLs, up to 20
delayMs100Minimum delay between same-origin requests
requestTimeoutSecs20Per-request timeout, 5–60 seconds

Output

Every successful item has recordType: "item" and includes:

  • feed metadata: sourceUrl, feedUrl, feedType, feedTitle, feedLanguage
  • article identity: id, url, contentHash
  • content: title, summary, contentHtml, contentText
  • publishing data: author, authors, publishedAt, updatedAt, categories
  • media: imageUrl, enclosures
  • monitoring data: matchedKeywords, isNew, firstSeenAt, collectedAt

Failed sources have recordType: "error", errorCode, and errorMessage. They are useful for monitoring and are not charged as feed-item events.

Example item:

{
"recordType": "item",
"sourceUrl": "https://hnrss.org/frontpage",
"feedUrl": "https://hnrss.org/frontpage",
"feedType": "rss",
"feedTitle": "Hacker News: Front Page",
"id": "https://example.com/article",
"url": "https://example.com/article",
"title": "Example article",
"summary": "A normalized feed summary.",
"authors": ["Example Author"],
"categories": ["technology"],
"matchedKeywords": ["AI"],
"isNew": true,
"firstSeenAt": "2026-08-26T08:00:00Z",
"collectedAt": "2026-08-26T08:00:00Z",
"status": "ok"
}

The default key-value store record OUTPUT contains the run summary, including parsed, matched, emitted, duplicate, previously seen, and failed totals.

Scheduling a monitor

  1. Run the Actor once with your chosen inputs.
  2. Save the configuration as an Apify task.
  3. Create a schedule for the task.
  4. Keep the same monitorId for that task.
  5. Connect the dataset to a webhook, Make, Zapier, Google Sheets, or your own API.

Because old entries are remembered, later scheduled runs output only newly discovered matching items. Seen-item history is stored in the Actor user's private storage and is capped to the 50,000 most recent identities per monitor.

Pricing

The Actor uses pay per event:

  • $1.50 per 1,000 emitted feed items ($0.0015 each)
  • the standard small Actor-start event
  • platform usage included

Parsing failures, blocked URLs, pages with no feed, filtered items, duplicates, and previously seen entries do not trigger the feed-item charge.

Responsible use and limits

Use only public URLs that you are allowed to access. The Actor blocks local/private networks and embedded credentials, revalidates redirects, limits responses to 5 MB, and respects robots.txt by default. Feed-provided HTML can contain third-party markup; sanitize it before displaying it in a browser. The Actor does not bypass logins, anti-bot controls, or paywalls.

Support

For bugs, include the run URL, a public example feed, and the relevant error code. Do not include passwords, cookies, API tokens, or private feed URLs in public issue reports.

License

MIT