Like many developers building small personal tools in 2026, I ran into a wall when trying to pull RSS feeds from Reddit.
Reddit's official API access is now gated behind a manual approval process under its "Responsible Builder Policy." Self-service app creation is closed, and approval requests commonly take weeks — or go unanswered entirely — even for personal, low-volume use. So I went looking for a way to keep using RSS without a Reddit account at all.
What I found, and what I'm sharing here, is a workaround built on real measurements of how Reddit's unauthenticated .rss endpoint actually behaves. The solution is not elegant, but it works reliably.
The problem: an IP-based rate limit, not a subreddit-based one
Reddit's public, unauthenticated .rss endpoint still exists. You can hit URLs like https://www.reddit.com/r/python/new/.rss without any authentication. But it is heavily rate-limited — and the limit is per IP, not per subreddit.
I measured this directly. With a 15-second delay between requests, I hit 17 subscribed subreddits sequentially and recorded the HTTP status and response time of each:
- Successful (200) requests arrived at roughly t = 0, 45, 105, 165, 225 seconds — a clear 45–60 second cycle.
- 429 (rate-limited) responses came back in ~0.2 seconds — rejected at the edge before reaching the real server.
- 200 responses took 0.6–1.0 seconds — they actually reached the backend.
The key observation: the cycle had nothing to do with which subreddit I was asking for. It was a global IP time-window. Hitting 17 subreddits in 15-second intervals meant about 12 out of 17 failed, and the failures appeared "randomly distributed" across subreddits only because of request order.
The workaround: one request, all subreddits
Reddit supports a URL syntax that combines multiple subreddits into a single feed:
https://www.reddit.com/r/{sub1}+{sub2}+...+{subN}/hot/.rss?limit=100
This bundles all 17 subreddits into one HTTP request. In my measurements, this single request succeeded 100% of the time and returned 100 items in one shot.
But there was a second problem: how the items are distributed across subreddits.
I compared three sort modes on the combined feed:
| Sort | Subreddits appearing in top 25 | Dominance |
|---|---|---|
new |
8 / 17 |
r/LocalLLaMA took 10 of 25 items (40%) |
top (weekly) |
4 / 17 |
r/Economics took 14 of 25 items (56%) |
hot |
15 / 17 | Max 3 items per subreddit; most had 1–2 |
hot works because Reddit normalizes score and age within each community before ranking. So a combined hot feed naturally spreads results across communities instead of letting the highest-volume subreddit dominate the window.
Adding limit=100 pushed coverage to 17 / 17 subreddits in a single request — even low-traffic ones like r/compsci and r/systems appeared with 1–2 items each.
What I built on top of this
I wrapped the logic in a small, single-process Streamlit app that pulls the newest posts from Hacker News, Reddit, and Lemmy into one sortable table. A few implementation details worth mentioning:
-
HN's
entry.linkquirk. The rawhnrss.orgfeed setsentry.linkto the linked article (the external URL), not the HN discussion page. For a reader where you want to actually reply, you needentry.commentsinstead. The tool corrects this so clicking a link lands you on the HN thread. -
Comment counts from description fields. HN and Lemmy both embed comment counts in their feed
descriptionfields (# Comments: Nfor HN,| <a ...>N comments</a>for Lemmy). The tool parses these with regex. Reddit's unauthenticated feed exposes no comment count at all — sohotsort doubles as a practical stand-in for "is this thread active." - Translation is optional. Titles can be machine-translated via DeepL, but the checkbox defaults to off if no API key is configured. With translation off, the tool makes zero external API calls beyond the feeds themselves.
-
Per-subreddit cap. After fetching the combined 100-item
hotfeed, the tool caps each subreddit at N items (default 5) before translation, which bounds DeepL cost and prevents any one subreddit from crowding out the rest.
Trade-offs
This approach is not a replacement for the official API, and it has real limitations:
- Reddit comment counts are unavailable.
- The 100-item shared window means very low-traffic subreddits can occasionally be squeezed out of a given run (though
hotsort measurably reduces this vs.newortop). - Lemmy and Reddit community activity levels vary by orders of magnitude — picking sources with comparable activity is on the user.
But for a personal tool that just needs to surface what's new across HN, Reddit, and Lemmy — without a Reddit API key, without a cloud service, without ads — it does the job.
Source code
The project is open source on GitHub:
👉 github.com/ErystelaThevale/rss
The repo includes a detailed DESIGN_HISTORY.md with the raw measurements behind the rate-limit investigation (M5), the Lemmy community selection process (M4), and the schema evolution. If you're hitting the same Reddit API walls, feel free to take a look or open an issue.
Happy to answer questions about the rate-limit measurements or the feed-parsing logic in the comments.
Top comments (0)