RSS & Atom Feed Reader / Monitor icon

AI & documents · Live on Apify

RSS and Atom Feed Reader: Export and Monitor Feeds

Paste one or more feed links and get each item as a row. You can export it as JSON or CSV. Monitor mode shows which items are new or changed since last time.

About $0.76 for 1,000 feed items$0.00075 per feed item + $0.0056 per run. Apify bills you, not us.One feed item in a run of its own: about $0.0063.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

rowTypeITEM
modesnapshot
feedUrlhttps://hnrss.org/frontpage

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://hnrss.org/frontpage in Feed URLs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Read public RSS and Atom feeds into one Apify Dataset. Save article titles, links, dates, summaries, and feed metadata as JSON or CSV. Choose monitor mode to see which feed items are new or updated since the last saved baseline.

Who uses it

Content teams

Save the latest posts from blogs you follow into one table.

Developers

Turn RSS and Atom feeds into clean JSON for your app.

Market watchers

Track new posts from many feeds and filter them by keywords.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Saved feed item$0.00075One chargeable event for each ITEM or monitor status row saved to the default dataset.
Start fee$0.0056Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.

Examples

  • One feed item: about $0.0063.
  • 1,000 feed items: about $0.76.
  • Every day 100 feed items, for 30 days: about $2.42 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 6,600 feed items.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Can it get old posts that left the feed?

No. A feed shows only its recent items. Removed items cannot be read again.

Does it read the full article?

No. It saves what is inside the feed. It does not open the article pages.

Why did monitor mode return no items?

The first run makes a baseline. After that, quiet feeds return only the run summary.

Does it send me alerts?

No. Use an Apify schedule and an integration to send results where you want.

Details

Step by step on Apify
  1. Open the Actor's Input tab and choose a new input. The form already contains feedUrls: ["https://hnrss.org/frontpage"], maxItemsPerFeed: 10, and maxItemsTotal: 10.
  2. Leave mode as snapshot, or keep the form's other default settings. Do not replace the feed with a website homepage.
  3. Click Start. Open the Dataset tab after the run ends.
  4. Check that the first ITEM has title, link, feedType, and itemKey. The last row is RUN_SUMMARY; check feedResults and status there.
  5. Export the Dataset as JSON or CSV, or read it through the Apify API.
Use cases
NeedKey inputResult
Save the latest posts from a public blogmode: "snapshot", feedUrlsITEM rows with title, link, and optional dates
Read several RSS and Atom feedsSeveral feedUrls, maxItemsTotalRows tagged with feedIndex, feedType, feedUrl
Find feed changes across runsmode: "monitor", same stateKey and storageNEW, UPDATED, and optional UNCHANGED / NO_LONGER_IN_CURRENT_FEED
Limit a topic listincludeKeywords, excludeKeywordsFiltered item rows and filteredCount in summary
Inspect a feed that gave no rowsRead final RUN_SUMMARYPer-feed outcome, httpStatus, and errorCode
Tips for better results
  • Use the direct feed URL, not the site homepage. The tool does not search for feeds.
  • In monitor mode, keep the same state key each run. Then it can compare with the last baseline.
  • Use include and exclude keywords to keep only the topics you care about.
Limits and good to know

The Actor reads feed files via direct HTTP(S) calls with bounded requests, redirects, decompressed bytes, retries, item limits, and concurrency. It rejects URL credentials, private/reserved IP targets, unsupported ports, and unsafe redirects. XML DTD, external entities, and unsafe entity expansion are refused. Item links and enclosure URLs are returned as data only.

Recent updates
  1. Update · 18 September 2026

    • Closed post-Publish release reconciliation as RELEASE_CLOSED. Public latest is build uNNoNvRAZQWoHmGoF / 0.2.11 from source b371827, annotated tag v0.2.11; the prior 0.2.10 build remains a rollback reference.
    • Reconciled the owner-selected public rss-item price at USD 0.00075 and aligned README/Store copy. Final public default canary rY5YhbcSotd4cipi3 produced 10 ITEM rows plus RUN_SUMMARY, committed 10 charge events and a settled conservative cost of USD 0.007982402858808637.
    • Verified public visibility, non-deprecated state, unchanged icon, ordinary PR #8 merge, release tag push, temporary-tag removal and no schedules or webhooks. Exact Publish timestamp is not exposed by the Actor API.
  2. Update

    • M04 maintenance: bounded fresh-form prefill, fixed source-work deadline, resource-error diagnostics, strict malformed XML rejection and one-pass XML entity decoding, pre-write item charging limits, dependency remediation, full Input/Output reference and functional README banner.
    • Completed TZ-05 private finalization. Build pdMeFD6WZwBHEeYS2 / 0.2.8 from source aca635c is assigned to private latest and production, the rollback tag tz04-candidate-abb8a0b remains available, and the Actor is still private with no icon or Publish action.
    • Applied private pay-per-event pricing: rss-item at USD 0.0005 per acknowledged ITEM row, no start fee, no synthetic default-dataset event, and a USD 0.0005 minimum total-charge guard. Final latest/production and cap checks reconcile one charge receipt per ITEM and a free RUN_SUMMARY.
  3. Update

    • Completed TZ-01 audit and design with a GO verdict for the bounded direct public RSS/Atom/RDF reader/monitor.
    • Added implementation-ready input, output, error, state, pricing, performance and test contracts.
    • Recorded exact OSS provenance and rejected reuse of unsafe transport/state patterns.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "schemaVersion": 1,
  "rowType": "ITEM",
  "mode": "snapshot",
  "feedUrl": "https://hnrss.org/frontpage",
  "feedType": "rss2",
  "feedTitle": "Hacker News: Front Page",
  "itemKey": "v1:sourceId:fc45d683916c42bc268704901045f040",
  "title": "OTel-Native by Design – Building Products That Export to Any Observability Stack",
  "link": "https://opentelemetry.io/blog/2026/otel-native-by-design/",
  "publishedAt": "2026-10-09T06:54:45.000Z",
  "changeType": "SNAPSHOT",
  "presentInCurrentFeed": true,
  "deletionConfirmed": false
}

Use it from code

Actor ID: cliqtomedia/rss-atom-feed-reader-monitor. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/rss-atom-feed-reader-monitor").call(run_input={
    "feedUrls": [
        "https://hnrss.org/frontpage"
    ],
    "mode": "snapshot"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~rss-atom-feed-reader-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"feedUrls": ["https://hnrss.org/frontpage"], "mode": "snapshot"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/rss-atom-feed-reader-monitor")
result = tool.invoke({"run_input": {"feedUrls": ["https://hnrss.org/frontpage"], "mode": "snapshot"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (18)
FieldTypeMeaning
schemaVersionintegerOutput contract version.
rowTypestringDataset row type.
runIdstringRun identifier.
observedAtstringUTC emission time.
modestringExecution mode.
statusstringChange type or run outcome.
feedUrlstringCanonical feed URL for ITEM rows.
effectiveFeedUrlstringValidated final feed URL after redirects.
feedTypestringDetected feed format.
itemKeystringVersioned stable item identity.
titlestringFeed-provided item title.
linkstringFeed-provided item link; never fetched.
publishedAtstringNormalized item publication time.
changeTypestringSNAPSHOT, NEW, UPDATED, UNCHANGED or NO_LONGER_IN_CURRENT_FEED.
deletionConfirmedbooleanThe Actor always sets false; a missing item is not confirmed deleted.
errorCodestringCanonical run/feed outcome when present.
chargedItemRowsintegerCount of acknowledged PPE item charges.
chargeStatusstringShows whether item charges were not needed, committed, limited or unclear.
Input settings (21)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Feed URLs requiredfeedUrlsarray["https://hnrss.org/frontpage"]
Modemodestring"snapshot"
Maximum items per feedmaxItemsPerFeedinteger10
Maximum total itemsmaxItemsTotalinteger10
Ordersortstring"source"
Published afterpublishedAfterstring
Published beforepublishedBeforestring
Include keywordsincludeKeywordsarray[]
Exclude keywordsexcludeKeywordsarray[]
Remove repeated items across feedsdedupeAcrossFeedsbooleanfalse
Include feed contentincludeContentbooleanfalse
Maximum summary charactersmaxSummaryCharsinteger4000
Maximum content charactersmaxContentCharsinteger20000
Request timeoutrequestTimeoutMsinteger15000
Maximum retriesmaxRetriesinteger2
Maximum concurrencymaxConcurrencyinteger5
Monitor namestateKeystring
Start a new baselineresetStatebooleanfalse
Show baseline itemsemitBaselineItemsbooleanfalse
Show unchanged itemsemitUnchangedbooleanfalse
Show missing current itemsemitNoLongerCurrentbooleanfalse

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure