{"name":"rss-feed-reader","id":"sfoln/rss-feed-reader","title":"RSS Feed Reader – Blogs, News & Newsletters","description":"Read RSS, Atom and JSON feeds, or paste any website, Substack, Ghost, Beehiiv or Medium URL and the feed is found for you. One clean JSON row per item: title, link, date, author, summary, full content, categories, image, podcast audio. Only-new mode for monitoring. $0.50 per 1,000 items.","version":"0.1","status":"ready","family":{"id":"ai-agent-web-toolkit","name":"Web toolkit for agents","description":"Web search for retrieval, pages and sites converted to Markdown, AI extraction to JSON, URL metadata and safety checks, sitemaps, feeds, change monitoring and academic paper search.","actors":11},"categories":["NEWS","AUTOMATION","AI"],"availability":"on_request","seoTitle":"RSS Feed Reader API – RSS, Atom & JSON Feed to JSON","seoDescription":"Turn RSS, Atom and JSON feeds, websites and Substack, Ghost, Beehiiv or Medium newsletters into clean JSON rows. Only-new mode. $0.50 per 1,000 items.","summary":"Read any RSS, Atom or JSON feed as clean JSON, or just paste a website, blog or newsletter URL (Substack, Ghost, Beehiiv, Medium, WordPress, Blogger, YouTube channel) and the feed is found for you. You get one row per item with title, link, publication date, author, a plain-text summary, the full content (HTML and text), categories, image and podcast enclosure, newest first, plus one summary row per feed. Built for news monitoring, content curation, newsletter tracking, podcast catalogues and AI agents that need \"what's new on this site?\". $0.50 per 1,000 items, no start fee; feeds that cannot be found or read are free.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"feed-item","title":"Feed item","description":"Charged once per feed item (post, article, episode) delivered as a dataset row.","priceUsd":0.0005}]},"input":{"description":"Feed, website or newsletter URLs. Every feed gives one dataset row per item plus one summary row.","required":["feedUrls"],"fields":[{"name":"feedUrls","title":"Feed, website or newsletter URLs","type":"array","required":true,"description":"RSS, Atom or JSON Feed URLs, or any website, blog or newsletter URL (Substack, Ghost, Beehiiv, Medium, WordPress, Blogger, YouTube channel): the feed is discovered automatically. One per line. Accounts on the Apify free plan can process up to 10 feeds per run.","prefill":["https://blog.apify.com/rss/"],"editor":"stringList"},{"name":"maxItemsPerFeed","title":"Max items per feed","type":"integer","required":false,"description":"Newest items delivered per feed (1–5,000). Each delivered item is one feed-item event.","default":100,"prefill":10,"minimum":1,"maximum":5000},{"name":"sinceDays","title":"Only items from the last N days","type":"integer","required":false,"description":"Only items published in the last N days (0 = no date filter). Items without a date are left out when this is set.","default":0,"minimum":0,"maximum":36500},{"name":"onlyNew","title":"Only new items (monitoring)","type":"boolean","required":false,"description":"Deliver (and charge) only items that earlier runs of yours did not deliver. The first run returns the latest items and remembers everything the feed lists; later runs return only items published after it. The memory is kept in your account's key-value store \"rss-feed-reader-memory\" for 30 days after an item was last seen.","default":false},{"name":"includeContent","title":"Include full content","type":"boolean","required":false,"description":"Add the full item content as published (contentHtml) and as plain text (contentText) when the feed carries it. Turn off for smaller rows.","default":true},{"name":"maxFeeds","title":"Max feeds","type":"integer","required":false,"description":"Safety cap on how many URLs are processed in this run; the rest are ignored and counted in the OUTPUT record.","default":1000,"minimum":1,"maximum":10000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"Feeds processed in parallel (1–10). Requests to one host are always limited to 2 per second.","default":5,"minimum":1,"maximum":10},{"name":"includeRaw","title":"Include raw item","type":"boolean","required":false,"description":"Attach the parsed source item (every namespace: iTunes, podcast, media, Dublin Core, …) as raw on each row.","default":false}]},"exampleInput":{"feedUrls":["https://blog.apify.com/rss/"],"maxItemsPerFeed":10},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The feed, website or newsletter URL this record belongs to, as given."},{"name":"recordType","type":"string","title":"Record type","description":"feed-item = one item of a feed (charged); summary = one record per input URL (never charged).","example":"feed-item"},{"name":"position","type":"integer","title":"Position","description":"feed-item: 1-based position of the item among the items delivered for its input (newest first)."},{"name":"feedUrl","type":"string | null","title":"Feed URL","description":"The feed the item was read from (after redirects)."},{"name":"feedTitle","type":"string | null","title":"Feed title"},{"name":"guid","type":"string | null","title":"GUID","description":"The item's id in the feed (RSS guid, Atom id, JSON Feed id), else its link."},{"name":"title","type":"string | null","title":"Title","description":"Item title as plain text (markup and entities decoded)."},{"name":"link","type":"string | null","title":"Link","description":"Absolute URL of the item's page."},{"name":"publishedAt","type":"string | null","title":"Published at","description":"ISO 8601 (UTC) publication time; null when the feed gives no valid date."},{"name":"updatedAt","type":"string | null","title":"Updated at","description":"ISO 8601 (UTC) last update, when the feed states one (Atom updated, JSON Feed date_modified)."},{"name":"author","type":"string | null","title":"Author","description":"Author or creator name as published."},{"name":"summary","type":"string | null","title":"Summary","description":"Plain-text summary (description / summary, else the start of the content), at most 1,000 characters."},{"name":"contentHtml","type":"string | null","title":"Content (HTML)","description":"Full content as published in HTML (content:encoded, Atom content, content_html), at most 100,000 characters; only with includeContent."},{"name":"contentText","type":"string | null","title":"Content (text)","description":"Full content as plain text (content_text, else derived from contentHtml), at most 100,000 characters; only with includeContent."},{"name":"categories","type":"array","title":"Categories","description":"Categories and tags of the item."},{"name":"enclosure","type":"object | null","title":"Enclosure","description":"{ url, type, length } of the item's first enclosure (podcast audio, video, attachment)."},{"name":"imageUrl","type":"string | null","title":"Image URL","description":"Media thumbnail, iTunes image, image enclosure or the first image of the content."},{"name":"durationSecs","type":"integer | null","title":"Duration (s)","description":"Media duration in seconds (podcasts, videos), when stated."},{"name":"inputUrl","type":"string | null","title":"Input URL","description":"summary: the input normalized to an absolute URL."},{"name":"feedFormat","type":"string | null","title":"Feed format","description":"summary: rss | atom | rdf | json."},{"name":"siteUrl","type":"string | null","title":"Site URL","description":"summary: the website the feed belongs to."},{"name":"feedDescription","type":"string | null","title":"Feed description"},{"name":"feedLanguage","type":"string | null","title":"Feed language"},{"name":"feedImageUrl","type":"string | null","title":"Feed image URL"},{"name":"feedUpdatedAt","type":"string | null","title":"Feed updated at","description":"summary: ISO 8601 time the feed says it was last built or updated."},{"name":"discoveredVia","type":"string | null","title":"Discovered via","description":"summary: direct (the URL is a feed) | platform (Substack, Medium, …) | link (<link rel=\"alternate\"> on the page) | probe (a common feed path)."},{"name":"platform","type":"string | null","title":"Platform","description":"summary: substack | medium | ghost | beehiiv | wordpress | blogger | tumblr | youtube, when recognised."},{"name":"otherFeeds","type":"array","title":"Other feeds","description":"summary: further feeds the page announces (e.g. a comments feed)."},{"name":"itemsInFeed","type":"integer | null","title":"Items in feed","description":"summary: items the feed lists."},{"name":"itemsOutsideDateWindow","type":"integer | null","title":"Items outside sinceDays","description":"summary: items older than sinceDays (not delivered, not charged)."},{"name":"onlyNew","type":"boolean | null","title":"Only new","description":"summary: present when onlyNew was on."},{"name":"firstRun","type":"boolean | null","title":"First run","description":"summary (onlyNew): true when no earlier run remembered this feed."},{"name":"itemsAlreadySeen","type":"integer | null","title":"Items already seen","description":"summary (onlyNew): items skipped because an earlier run delivered them."},{"name":"resultsDelivered","type":"integer | null","title":"Items delivered","description":"summary: feed-item rows delivered (and charged) for this input."},{"name":"stopReason","type":"string | null","title":"Stop reason","description":"summary: limit (maxItemsPerFeed reached) | end (no more items) | budget | free_plan | aborted."},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"true on every feed-item row (one feed-item event each); summary records are never charged."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"feed-item on item rows."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when a charge came back short (present only then)."},{"name":"source","type":"string","title":"Source","description":"Always \"feed\" (fetched from the publisher by the Actor)."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ code, message, provider?, status? } when status is not ok. Codes: not_a_feed (no feed found), malformed_feed, invalid_url, not_found, http_error, timeout, network, dns_not_found, blocked_url, too_large, unexpected_type, plus the runtime codes budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed."},{"name":"warnings","type":"array","title":"Warnings","description":"Notes about this record (lenient parsing, undated items, budget or free-plan caps)."},{"name":"raw","type":"object | null","title":"Raw item","description":"The parsed source item with every namespace (only with includeRaw)."}],"outputExample":[{"input":"https://blog.apify.com/rss/","recordType":"feed-item","position":1,"feedUrl":"https://blog.apify.com/rss/","feedTitle":"Apify Blog","guid":"654c99deca26d10001cb6b14","title":"How to do question answering from a PDF with Python and RAG","link":"https://blog.apify.com/how-to-do-question-answering-from-a-pdf/","publishedAt":"2026-10-14T08:16:08.000Z","updatedAt":null,"author":"Jane Example","summary":"Build a Python pipeline that answers questions from PDFs and links each answer to its page, then check the citations before you trust them.","contentHtml":"<p>A cited page lets you check an answer from a PDF …</p>","contentText":"A cited page lets you check an answer from a PDF …","categories":["AI","Data processing and analysis","Tutorial"],"enclosure":null,"imageUrl":"https://blog.apify.com/content/images/2026/10/question-answering-from-a-pdf-feature-image.webp","durationSecs":null,"status":"ok","charged":true,"chargedEvent":"feed-item","source":"feed","fetchedAt":"2026-10-14T10:00:00.000Z"},{"input":"https://blog.apify.com/rss/","inputUrl":"https://blog.apify.com/rss/","feedUrl":"https://blog.apify.com/rss/","feedTitle":"Apify Blog","feedFormat":"rss","siteUrl":"https://blog.apify.com/","feedDescription":"Apify is the largest marketplace of tools for AI.","feedLanguage":null,"feedImageUrl":"https://blog.apify.com/favicon.png","feedUpdatedAt":"2026-10-14T17:13:34.000Z","discoveredVia":"direct","platform":null,"otherFeeds":[],"itemsInFeed":15,"itemsOutsideDateWindow":0,"recordType":"summary","resultsDelivered":10,"stopReason":"limit","status":"ok","charged":false,"source":"feed","fetchedAt":"2026-10-14T10:00:01.000Z"}],"faq":[{"question":"Do I need the exact feed URL?","answer":"No. Paste a website, blog or newsletter URL and the Actor finds the feed: the page's `<link rel=\"alternate\">` feeds first, then the usual feed paths (/feed, /rss, /feed.xml, /atom.xml, /index.xml, /feed.json). Substack, Ghost, Beehiiv, Medium, WordPress.com, Blogger, Tumblr and YouTube channel URLs are mapped to their feeds directly. The summary row says how the feed was found (discoveredVia) and lists other feeds the page announces."},{"question":"How does onlyNew work for monitoring?","answer":"With onlyNew on, the Actor remembers which items it delivered to you (hashed ids only, in your account's key-value store \"rss-feed-reader-memory\", one record per feed). The first run returns the latest items and remembers everything the feed lists; every later run returns, and charges, only items that were not delivered before. Schedule it hourly or daily and attach a webhook to get new posts pushed to you. Delete the store to start over."},{"question":"Which feed formats are supported?","answer":"RSS 0.9x, 1.0 (RDF) and 2.0, Atom 0.3 and 1.0, and JSON Feed 1.0 and 1.1, including the content, Dublin Core, Media RSS and iTunes podcast extensions. Malformed feeds (unescaped ampersands, a cut-off file, stray control characters) are repaired and read leniently, with a warning."}],"mcpExamplePrompt":"Get the 10 latest posts from https://blog.apify.com/rss/ with their titles, links and publication dates.","related":["sitemap-url-extractor","rag-web-search","url-to-markdown-summary","brand-mentions-monitor","google-news-search"],"urls":{"site":"https://www.sfoln.com/actors/rss-feed-reader/","siteJson":"https://www.sfoln.com/actors/rss-feed-reader.json","siteMarkdown":"https://www.sfoln.com/actors/rss-feed-reader.md","runSync":"https://api.apify.com/v2/actors/sfoln~rss-feed-reader/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~rss-feed-reader/runs","mcp":"https://mcp.apify.com?tools=sfoln/rss-feed-reader","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20RSS%20Feed%20Reader%20%E2%80%93%20Blogs%2C%20News%20%26%20Newsletters%20(sfoln%2Frss-feed-reader)&body=Please%20publish%20rss-feed-reader.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}