The Mine Works
How to Scrape Reddit Without an API Key in 2026
← All posts
tutorial May 12, 2025 · 6 min read Updated July 28, 2026

How to Scrape Reddit Without an API Key in 2026

The old reddit.com .json endpoints now return 403 and commercial API access is enterprise-only. Every method that still works in 2026 — with code you can use today.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

Reddit’s API shutdown in June 2023 ended the era of free, unauthenticated JSON endpoints — and in 2026 the door closed completely. The old trick of appending .json to any Reddit URL now returns HTTP 403 even for public pages at casual volume (we re-verified while updating this post in July 2026). For any data collection — from a single subreddit feed to thousands of posts with full comment trees — you need one of the approaches below.

TL;DR: Reddit’s Android app uses a public OAuth client ID (ohXpoqrZYub1kg) that any developer can use with the installed_client grant — no account registration, same 100 req/min rate limit as registered apps, full API access. For volume above that, a managed pay-per-result scraper is the practical choice.

Here is every method that still works in 2026, from lightest to most robust.

The Old .json Trick Is Dead

Before 2023, https://www.reddit.com/r/python.json returned clean paginated data with no auth. Reddit first rate-limited these endpoints aggressively (429s within minutes), and as of 2026 they return 403 Forbidden outright — even a single request from a normal browser user-agent is refused. Every script and tutorial built on the .json suffix is now broken. If that’s what brought you here, skip straight to the OAuth method or a managed scraper below.

Method 1: OAuth with a Reddit Developer App

The official path. You register an app at reddit.com/prefs/apps, get a client_id and client_secret, and exchange them for a bearer token via the password flow or authorization code flow.

import requests

CLIENT_ID = 'your_client_id'
CLIENT_SECRET = 'your_client_secret'

auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
data = {'grant_type': 'password', 'username': 'u', 'password': 'p'}
headers = {'User-Agent': 'MyApp/0.1'}

token = requests.post(
    'https://www.reddit.com/api/v1/access_token',
    auth=auth, data=data, headers=headers
).json()['access_token']

posts = requests.get(
    'https://oauth.reddit.com/r/python/hot',
    headers={**headers, 'Authorization': f'Bearer {token}'}
).json()

Limits: 100 requests per minute per OAuth token. Enough for moderate volumes. The app registration page uses reCAPTCHA, which is annoying to get through.

Method 2: The Public Reddit Android Client ID

This is the technique used in production by most Reddit scrapers. Reddit’s official Android app has a public client_id that anyone can use with the installed_client grant type — no developer account required.

const CLIENT_ID = 'ohXpoqrZYub1kg'; // Reddit Android public client_id
const USER_AGENT = 'android:com.reddit.frontpage:v2024.45.0 (by /u/yourusername)';

async function getToken() {
  const deviceId = crypto.randomUUID();
  const res = await fetch('https://www.reddit.com/api/v1/access_token', {
    method: 'POST',
    headers: {
      'Authorization': 'Basic ' + btoa(`${CLIENT_ID}:`),
      'Content-Type': 'application/x-www-form-urlencoded',
      'User-Agent': USER_AGENT,
    },
    body: `grant_type=https://oauth.reddit.com/grants/installed_client&device_id=${deviceId}`,
  });
  return (await res.json()).access_token;
}

async function getPosts(subreddit, token) {
  const res = await fetch(`https://oauth.reddit.com/r/${subreddit}/hot?limit=100`, {
    headers: {
      'Authorization': `Bearer ${token}`,
      'User-Agent': USER_AGENT,
    }
  });
  return (await res.json()).data.children.map(c => c.data);
}

This approach gives you the same rate limits as an authenticated user — 100 req/min — without account registration. All calls go to oauth.reddit.com, not www.reddit.com.

Important: Always set a descriptive User-Agent. Reddit blocks generic or missing user agents.

Method 3: Pushshift (Partially Restored)

Pushshift.io was the go-to for historical Reddit data until it was shut down in 2023. Its practical successor for bulk historical analysis is Arctic Shift, which serves downloadable archives; coverage is strongest pre-2023 and it has no global keyword search. For historical backfills it remains the right free tool — for live and recent data it doesn’t compete with the methods above.

Method 4: Use a Managed Scraper

If you need volume (millions of posts), historical backfills, or comment trees without managing session rotation, a managed solution is the practical choice. Our Reddit Scraper on Apify handles auth rotation, proxies, and rate limit backoff automatically. You pay per post scraped — zero charge on failed runs.

from apify_client import ApifyClient

client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('themineworks/reddit-scraper').call(run_input={
    'mode': 'subreddit',
    'subreddits': ['machinelearning', 'LocalLLaMA'],
    'sortBy': 'hot',
    'maxPosts': 500,
    'includeComments': True,
    'maxComments': 50,
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['title'], item['score'])

Handling Rate Limits and Bans

Regardless of method, follow these rules:

  • One request every 0.6 seconds minimum — Reddit’s ToS requires this
  • Rotate tokens if running parallel workers — don’t share a single token across threads
  • Respect Retry-After headers — Reddit will 429 you on bursts and tell you how long to wait
  • Use descriptive user agents — include your username as Reddit recommends

What Data You Can Get

The Reddit OAuth API provides:

  • Posts: title, body, score, upvote ratio, awards, flair, author, created timestamp
  • Comments: full nested tree, author, score, gilded status
  • Subreddit metadata: subscriber count, active users, description
  • User profiles: post history, comment karma, account age

What it does not provide: deleted content, shadow-banned users, private subreddits.

Summary

MethodRegistration RequiredRate LimitBest For
.json trickNoVery lowTesting only
Developer OAuth appYes (reCAPTCHA)100 req/minSmall projects
Android client IDNo100 req/minProduction scraping
Managed scraperNoEffectively unlimitedHigh volume

For most production use cases, the Android client ID approach is the sweet spot: no account required, full API access, same rate limits as registered apps.

Frequently Asked Questions

Can you still scrape Reddit without an API key in 2026?

Yes. Reddit’s official Android app uses a public client ID (ohXpoqrZYub1kg) that works with the installed_client grant type — no developer account registration required. This gives you the same 100 requests per minute as a registered app and full access to the OAuth API endpoints.

What happened to the Reddit .json trick after the 2023 API change?

It no longer works at all. After the 2023 change Reddit heavily rate-limited unauthenticated .json requests; in 2026 those endpoints return 403 Forbidden even for single public-page requests. Use the OAuth path or a managed scraper instead.

How much does the Reddit API cost at scale?

Reddit charges $0.24 per 1,000 API calls via the official developer OAuth path. At moderate volume (10,000 posts/month) that is $2.40. At scale — 1 million posts per month with comment trees averaging 3 API calls each — costs reach approximately $720/month before infrastructure.

What is Reddit’s API rate limit?

The Reddit OAuth API enforces 100 requests per minute per token, regardless of whether you use a registered developer app or the Android public client ID. For parallel scraping, you must rotate across multiple tokens and never share a single token across threads.

Is scraping Reddit legal?

The 2022 hiQ Labs v. LinkedIn ruling established that scraping publicly visible data does not constitute unauthorized access under the CFAA. Reddit’s terms of service prohibit automated access, but ToS violations are civil contract matters, not criminal offenses. For commercial operations at scale, review the applicable laws in your jurisdiction.

Related Actor

Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.