On 2026-11-13 Reddit turns off RSS. Every reddit.com/.../.rss URL in your n8n workflows, cron scripts and feed readers stops, and Reddit says there is no replacement unless you moderate the community. The public Data API follows in 2027, so "just use the API" is a stopgap.
This guide finds every Reddit feed you have, shows what survives, and swaps the feed URL for one HTTP call that returns the same items your RSS Read node did: only new posts, billed per post. I built the Apify Actor used in the hands-on part, kumo-data/reddit-scraper; the first two parts do not depend on it.
What stops, and when
Reddit announced the cutoff in r/modnews on 2026-09-30. TNW quotes the post: "If you use RSS for feeds outside of a community you moderate, there is no replacement." Moderators get the Discord Relay app on Reddit's Developer Platform; everyone else gets nothing.
-
Scope is not spelled out. Reddit names no feed types and no exceptions, so plan as if subreddit, search, user and comment
.rssURLs all stop. - Old Reddit is not a fallback. It already requires login and is being limited to moderators and recent users.
- The API is closing too. New public Data API requests stopped on 2026-10-31; access starts closing on 2027-01-12 and ends for everyone else in March 2027. PRAW and n8n's built-in Reddit node sit on that API. Reddit's migration target is Devvit, TypeScript apps that run on Reddit itself, which does not replace an external script or an n8n workflow.
The n8n community thread on this expects RSS Read nodes to fail quietly rather than throw, so add a "zero items for N hours" alert to every feed workflow this week, whatever you migrate to.
Step 0: find every Reddit feed you have
# n8n: export workflows, then grep
grep -rl 'reddit.com/.*\.rss' ~/n8n-exports/
# scripts, cron jobs, configs
grep -rn --include='*.py' --include='*.js' --include='*.sh' --include='*.toml' --include='*.yaml' \
'reddit.com.*\.rss' ~/projects/
# feed readers: export OPML and grep it
grep -o 'xmlUrl="[^"]*reddit[^"]*"' subscriptions.opml
For each URL note where it feeds into (Slack, a sheet, a database) and roughly how many new posts a day it produces; the second number sets what a replacement costs.
Your options
| Option | After Nov 13 | Notes |
|---|---|---|
| Official Data API, PRAW, n8n Reddit node | Only with credentials you already hold | Access closes between 2027-01-12 and March 2027 |
| Devvit / Discord Relay | Yes | Reddit's own path, for moderators and bots. Not a feed, not Python, not external |
| RSS bridges | Do not plan on it | RSSHub has no Reddit route and closed the request as "not planned"; others unverified |
Unauthenticated .json
|
Unreliable | Conflicting reports of 403s during 2026 |
| Feed readers | Mostly stop | Readers that fetch .rss directly stop (HushRead's list) |
| Apify Actors that read public pages | Yes | No Reddit API key or RSS involved. See below |
Several Actors on the Store cover the last row, among them harshmaur/reddit-scraper, automation-lab/reddit-scraper and headply/reddit-rss-feed; they differ in output shape and features, and I have not run them. Mine is built for the swap below: old feed URL in, RSS Read items out, only new posts each run.
Hands-on: swap the RSS URL for one HTTP call
Paste the old feed URL into targets. With outputFormat: "rss" each post has the eight keys n8n's RSS Read node produced from a Reddit feed (title, link, pubDate, author, content, contentSnippet, id, isoDate). With newSinceLastRun: true each run returns only posts it has not returned before: no overlap, no date math. You need an Apify API token; the full input reference is on the Actor page.
curl
curl -s -X POST \
"https://api.apify.com/v2/acts/kumo-data~reddit-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"targets": ["https://www.reddit.com/r/n8n/new/.rss"],
"outputFormat": "rss",
"newSinceLastRun": true,
"maxPostsPerTarget": 50
}'
On 2026-11-07 this call (with maxPostsPerTarget: 3) returned HTTP 201 and three items in 5.9 seconds. The endpoint waits for the run and answers with the dataset as a JSON array: no polling.
newSinceLastRun keeps its state (per target: last run time and the IDs already returned) in the key-value store reddit-scraper-state in your own Apify account. The first run has no state and returns up to maxPostsPerTarget posts (default 100); to start from now, cap it or add "postedAfter": "2 hours".
Python
import os
import requests
APIFY_TOKEN = os.environ["APIFY_TOKEN"]
URL = "https://api.apify.com/v2/acts/kumo-data~reddit-scraper/run-sync-get-dataset-items"
payload = {
"targets": ["https://www.reddit.com/r/n8n/new/.rss"],
"outputFormat": "rss",
"newSinceLastRun": True,
"maxPostsPerTarget": 50,
}
resp = requests.post(
URL,
json=payload,
headers={"Authorization": f"Bearer {APIFY_TOKEN}"},
timeout=300, # run-sync endpoints wait for the run; give them the full window
)
resp.raise_for_status()
for item in resp.json():
print(item["isoDate"], item["id"], item["title"], item["link"])
For a feedparser script, entry.title, entry.link, entry.id and entry.author map one to one; entry.published becomes pubDate and isoDate (ISO 8601 with milliseconds). I compared against n8n's parser, not feedparser.
Scheduling
- Apify Schedules. Save the input above as a task in the Apify Console and attach a schedule; hourly is typical. A run that finds nothing costs $0.
-
n8n. Replace the RSS Read node with an HTTP Request node on a Schedule Trigger: POST to the URL above, header
Authorization: Bearer <token>, JSON body as in the curl call. Or use Apify's community noden8n-nodes-apifyand its "Run Actor and get dataset" operation. I have not run either inside an n8n instance with this Actor yet, so test the wiring before cutting over.
What the output looks like
One item from the real run above, content and contentSnippet trimmed:
{
"title": "What actually changed when I moved a client workflow from Sheets to a real database",
"link": "https://www.reddit.com/r/n8n/comments/1xpe08r/what_actually_changed_when_i_moved_a_client/",
"pubDate": "2026-11-06T14:21:48.000Z",
"author": "/u/easybits_ai",
"content": "<!-- SC_OFF --><div class=\"md\"><p>π Hey n8n Community,</p><p>I spent today moving a client approval workflow ...</p></div><!-- SC_ON -->   submitted by   <a href=\"https://www.reddit.com/user/easybits_ai\"> /u/easybits_ai </a> ...",
"contentSnippet": "π Hey n8n Community,\nI spent today moving a client approval workflow ...\n submitted by /u/easybits_ai \n [link] [comments]",
"id": "t3_1xpe08r",
"isoDate": "2026-11-06T14:21:48.000Z"
}
/u/ on author, t3_ on id and the submitted by wrapper in content are kept on purpose: downstream nodes written against the real feed expect them.
How compatible, exactly
Checked on 50 posts from two real feeds snapshotted before the cutoff (r/Python and r/pics), parsed with the rss-parser version n8n's RSS Read node uses, against the Actor's rss output for the same posts:
| Field | Result on 50 posts |
|---|---|
title, link, author, id, pubDate, isoDate, key set and order |
Identical, 50 of 50 |
contentSnippet |
Same text once whitespace is normalized (23 of 25 text posts); line breaks between blocks differ |
content |
Equivalent HTML, not byte-identical (' vs ', <li><p> vs <li>, a different preview.redd.it URL for the same picture) |
Keyword filters, dedup by id, date math and anything that renders content keep working; an exact string comparison of content against old stored values does not. Not compared yet: Make and Zapier RSS modules and Reddit's comment feeds. score and commentCount are in the Actor's default format, not in rss. Posts marked 18+ are never collected; private communities are not readable without login.
Before you cut over, run the old feed and the new call side by side for a day and compare the id sets for the window both cover. Then switch the downstream node and keep the zero-items alert.
Cost
Pay per post saved to the dataset: $1.50 per 1,000 on the Free plan, $1.20 on paid plans. No start fee, no charge for duplicates or filtered posts, and empty runs cost $0. An hourly schedule for a month that yields 3,000 new posts comes to about $4.50 on the Free plan.
Summary
Inventory your feeds this week. Existing API credentials carry PRAW or the n8n Reddit node into early 2027; moderators have Discord Relay. For everything else, the swap above is one HTTP call: old feed URL in, the same items out, only new posts each run, $0 when nothing is new. Start here: apify.com/kumo-data/reddit-scraper.

Top comments (0)