<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ErystelaThevale</title>
    <description>The latest articles on DEV Community by ErystelaThevale (@erystelathevale).</description>
    <link>https://dev.to/erystelathevale</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4082282%2F7264a539-7632-454a-b28f-2b3cfe3fbdf5.png</url>
      <title>DEV Community: ErystelaThevale</title>
      <link>https://dev.to/erystelathevale</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erystelathevale"/>
    <language>en</language>
    <item>
      <title>How I Bypassed Reddit's Unauthenticated RSS Rate Limits (Without an API Key)</title>
      <dc:creator>ErystelaThevale</dc:creator>
      <pubDate>Mon, 17 Aug 2026 22:37:02 +0000</pubDate>
      <link>https://dev.to/erystelathevale/how-i-bypassed-reddits-unauthenticated-rss-rate-limits-without-an-api-key-3hkc</link>
      <guid>https://dev.to/erystelathevale/how-i-bypassed-reddits-unauthenticated-rss-rate-limits-without-an-api-key-3hkc</guid>
      <description>&lt;p&gt;Like many developers building small personal tools in 2026, I ran into a wall when trying to pull RSS feeds from Reddit.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;What I found, and what I'm sharing here, is a workaround built on real measurements of how Reddit's unauthenticated &lt;code&gt;.rss&lt;/code&gt; endpoint actually behaves. The solution is not elegant, but it works reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: an IP-based rate limit, not a subreddit-based one
&lt;/h2&gt;

&lt;p&gt;Reddit's public, unauthenticated &lt;code&gt;.rss&lt;/code&gt; endpoint still exists. You can hit URLs like &lt;code&gt;https://www.reddit.com/r/python/new/.rss&lt;/code&gt; without any authentication. But it is heavily rate-limited — and the limit is &lt;strong&gt;per IP, not per subreddit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Successful (200) requests arrived at roughly &lt;strong&gt;t = 0, 45, 105, 165, 225 seconds&lt;/strong&gt; — a clear 45–60 second cycle.&lt;/li&gt;
&lt;li&gt;429 (rate-limited) responses came back in &lt;strong&gt;~0.2 seconds&lt;/strong&gt; — rejected at the edge before reaching the real server.&lt;/li&gt;
&lt;li&gt;200 responses took &lt;strong&gt;0.6–1.0 seconds&lt;/strong&gt; — they actually reached the backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key observation: &lt;strong&gt;the cycle had nothing to do with which subreddit I was asking for.&lt;/strong&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workaround: one request, all subreddits
&lt;/h2&gt;

&lt;p&gt;Reddit supports a URL syntax that combines multiple subreddits into a single feed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.reddit.com/r/{sub1}+{sub2}+...+{subN}/hot/.rss?limit=100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This bundles all 17 subreddits into &lt;strong&gt;one HTTP request&lt;/strong&gt;. In my measurements, this single request succeeded 100% of the time and returned 100 items in one shot.&lt;/p&gt;

&lt;p&gt;But there was a second problem: &lt;strong&gt;how the items are distributed across subreddits.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I compared three sort modes on the combined feed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sort&lt;/th&gt;
&lt;th&gt;Subreddits appearing in top 25&lt;/th&gt;
&lt;th&gt;Dominance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;new&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8 / 17&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;r/LocalLLaMA&lt;/code&gt; took 10 of 25 items (40%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;top&lt;/code&gt; (weekly)&lt;/td&gt;
&lt;td&gt;4 / 17&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;r/Economics&lt;/code&gt; took 14 of 25 items (56%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;15 / 17&lt;/td&gt;
&lt;td&gt;Max 3 items per subreddit; most had 1–2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;hot&lt;/code&gt; works because Reddit normalizes score and age &lt;strong&gt;within each community&lt;/strong&gt; before ranking. So a combined &lt;code&gt;hot&lt;/code&gt; feed naturally spreads results across communities instead of letting the highest-volume subreddit dominate the window.&lt;/p&gt;

&lt;p&gt;Adding &lt;code&gt;limit=100&lt;/code&gt; pushed coverage to &lt;strong&gt;17 / 17 subreddits&lt;/strong&gt; in a single request — even low-traffic ones like &lt;code&gt;r/compsci&lt;/code&gt; and &lt;code&gt;r/systems&lt;/code&gt; appeared with 1–2 items each.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built on top of this
&lt;/h2&gt;

&lt;p&gt;I wrapped the logic in a small, single-process &lt;a href="https://streamlit.io/" rel="noopener noreferrer"&gt;Streamlit&lt;/a&gt; app that pulls the newest posts from &lt;strong&gt;Hacker News, Reddit, and Lemmy&lt;/strong&gt; into one sortable table. A few implementation details worth mentioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HN's &lt;code&gt;entry.link&lt;/code&gt; quirk.&lt;/strong&gt; The raw &lt;code&gt;hnrss.org&lt;/code&gt; feed sets &lt;code&gt;entry.link&lt;/code&gt; to the &lt;em&gt;linked article&lt;/em&gt; (the external URL), not the HN discussion page. For a reader where you want to actually reply, you need &lt;code&gt;entry.comments&lt;/code&gt; instead. The tool corrects this so clicking a link lands you on the HN thread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comment counts from description fields.&lt;/strong&gt; HN and Lemmy both embed comment counts in their feed &lt;code&gt;description&lt;/code&gt; fields (&lt;code&gt;# Comments: N&lt;/code&gt; for HN, &lt;code&gt;| &amp;lt;a ...&amp;gt;N comments&amp;lt;/a&amp;gt;&lt;/code&gt; for Lemmy). The tool parses these with regex. Reddit's unauthenticated feed exposes no comment count at all — so &lt;code&gt;hot&lt;/code&gt; sort doubles as a practical stand-in for "is this thread active."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translation is optional.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-subreddit cap.&lt;/strong&gt; After fetching the combined 100-item &lt;code&gt;hot&lt;/code&gt; feed, the tool caps each subreddit at N items (default 5) &lt;em&gt;before&lt;/em&gt; translation, which bounds DeepL cost and prevents any one subreddit from crowding out the rest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;This approach is not a replacement for the official API, and it has real limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reddit comment counts are unavailable.&lt;/li&gt;
&lt;li&gt;The 100-item shared window means very low-traffic subreddits can occasionally be squeezed out of a given run (though &lt;code&gt;hot&lt;/code&gt; sort measurably reduces this vs. &lt;code&gt;new&lt;/code&gt; or &lt;code&gt;top&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Lemmy and Reddit community activity levels vary by orders of magnitude — picking sources with comparable activity is on the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source code
&lt;/h2&gt;

&lt;p&gt;The project is open source on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/ErystelaThevale/rss" rel="noopener noreferrer"&gt;github.com/ErystelaThevale/rss&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repo includes a detailed &lt;code&gt;DESIGN_HISTORY.md&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the rate-limit measurements or the feed-parsing logic in the comments.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>rss</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
