Python Reddit API wrapper guide: PRAW vs a hosted API
PRAW is the standard Python Reddit API wrapper. A working PRAW example, what Reddit's 2026 access changes mean, and the same jobs with requests and a hosted API.
Piyushh · October 14, 2026 · 6 min read
PRAW is the standard Python Reddit API wrapper, and it still works well in 2026 if you have Reddit API credentials. Getting them is the hard part. Since November 2025 every new Reddit app needs Reddit's approval, Reddit stops accepting new requests on October 31, 2026, and many developers report rejections or no reply at all. This guide gives you a working PRAW example and explains what the access changes mean for your keys. Then it does the same jobs (subreddit posts, search, a thread with comments) in plain Python with requests against a hosted API that needs no Reddit developer account.
For background on Reddit's API itself (endpoints, rate limits, pagination), read our Reddit API guide. This post covers the Python side.
Python Reddit API wrapper options in 2026
| Option | What it is | Needs Reddit credentials | Stars / last commit (Oct 14, 2026) |
|---|---|---|---|
| PRAW | The Python Reddit API Wrapper, synchronous | Yes | 4,281 / Oct 13, 2026 |
| Async PRAW | The same API for asyncio code | Yes | 155 / Oct 14, 2026 |
requests + oauth.reddit.com | Raw calls to Reddit's API, OAuth handled by you | Yes | n/a |
requests + a hosted API | Plain HTTP calls to a third-party Reddit API | No, the provider's key | n/a |
PRAW and Async PRAW share a version number. On October 14, 2026, both sat at 8.0.3 on PyPI (released August 12, 2026), and both need Python 3.10 or newer. Both are BSD-2-Clause licensed.
PRAW: the standard Python Reddit API wrapper
Most of Reddit's developer community uses PRAW, but Reddit doesn't make it. It's an open-source project run by volunteers. It handles OAuth tokens, Reddit's rate limit headers and listing pagination, and it represents posts, comments, subreddits and users as Python objects.
The PRAW quick start says a read-only client needs three values: a client id, a client secret and a user agent. Writing (posting, voting, moderating) with a script app also needs the account's username and password.
What changed for PRAW users
The library stayed the same. Reddit's access rules changed.
- November 11, 2025: self-service app creation closed. New OAuth tokens need explicit approval under the Responsible Builder Policy.
- October 31, 2026: Reddit stops accepting new public API requests.
- January 12, 2027: apps that haven't registered start losing access.
- March 2027: public API access closes for the remaining apps, which Reddit wants moved to Devvit, its TypeScript developer platform.
Here is how that looks to a developer posting in r/redditdev:
"for 2 days I have been trying to build an app to get the client ID and client secret since it is what required to use PRAW for my project but every time I clicked the create app it just said “in order to create an application or use our API you can read our full policies here:”."
u/riowonist112617, December 2025
The same user later said the rejection arrived by email "around a day or 2" after applying, and stated that the request didn't comply with the Responsible Builder Policy "or lack necessary detail." In August 2026, a post asking "Is it possible to still use PRAW?" got two opposite answers. u/Watchful1 replied "Nope, it's no longer possible. You have to use devvit and typescript." u/NeedAGoodUsername, with more upvotes, replied "That's incorrect. It is still possible because I'm still using PRAW for my own scripts."
Each answer covers a different case. PRAW works if you already have credentials, and if you need new ones, the door is closing. Someone in that thread pointed out that if you made an app years ago and forgot about it, you can check old.reddit.com/prefs/apps, which still lists existing credentials.
Our guide on how to get a Reddit API key walks through the request itself.
A working PRAW example
This PRAW tutorial assumes you already have a client id and secret. As the PRAW docs recommend, keep credentials in praw.ini and out of your code:
[research]
client_id=YOUR_CLIENT_ID
client_secret=YOUR_CLIENT_SECRET
user_agent=script:my-research-app:v1.0 (by /u/your_username)
Reddit's Data API Wiki asks for a descriptive user agent in that platform:app:version (by /u/user) shape. With that set up, here are three common jobs:
import praw
reddit = praw.Reddit("research") # reads the [research] section of praw.ini
print(reddit.read_only) # True
# 1. Top posts in a subreddit this week
for post in reddit.subreddit("SaaS").top(time_filter="week", limit=25):
print(post.score, post.num_comments, post.title)
# 2. Keyword search across Reddit
for post in reddit.subreddit("all").search('"cold email"', sort="new", time_filter="month", limit=25):
print(post.subreddit.display_name, post.title, post.permalink)
# 3. A thread with every comment PRAW can load
submission = reddit.submission(id="1wdihhj")
submission.comments.replace_more(limit=None)
for comment in submission.comments.list():
print(comment.parent_id, comment.author, comment.score, comment.body[:80])
Before you run job 3 on a big thread, know two things:
replace_more(limit=None)replaces every "load more comments" stub, and the comments tutorial warns that "each replacement requires one network request." A thread with thousands of comments means a lot of requests. The default limit of 32 is often enough.- PRAW respects Reddit's rate limit headers. When Reddit asks it to wait, it sleeps if the wait is within
ratelimit_seconds(default 5 seconds) and raises an exception if not (rate limits). For long jobs, raiseratelimit_secondsinpraw.iniinstead of catching errors in a loop.
According to Reddit's Data API Wiki, the free limit is 100 queries per minute per OAuth client id (checked 2026-10-14).
The same jobs with requests and a hosted API
If you can't get credentials, or you'd rather not depend on a key Reddit can revoke, you can do the read jobs with plain requests against a hosted Reddit API. ChatterAPI is one. It's independent and not affiliated with Reddit, and you sign up with Google instead of applying for access. Here are the three jobs above:
import os
import requests
BASE = "https://api.chatterapi.com/v1"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['CHATTERAPI_KEY']}"
def get(path, **params):
r = session.get(f"{BASE}{path}", params=params, timeout=60)
r.raise_for_status()
return r.json()
# 1. Top posts in a subreddit this week (2 credits per page)
for post in get("/reddit/subreddits/SaaS/posts", sort="top", time="week")["data"]:
print(post["score"], post["numComments"], post["title"])
# 2. Keyword search across Reddit (2 credits per page)
for post in get("/reddit/search", q='"cold email"', sort="new", time="month")["data"]:
print(post["subreddit"], post["title"], post["url"])
# 3. A thread with its comments (3 credits per page)
thread = get("/reddit/threads/1wdihhj")["data"]
for c in thread["comments"]:
print(c["parentId"], c["author"], c["score"], c["body"][:80])
print(len(thread["comments"]), "of", thread["reportedCommentCount"], "comments loaded")
Job 1 returns this, trimmed to one post. It's a recorded sample from a test key, which returns one real response per endpoint for free:
{
"data": [
{
"id": "1wvjgm2",
"fullname": "t3_1wvjgm2",
"title": "I made $7,802 today",
"author": "OkPositive9373",
"subreddit": "SaaS",
"score": 614,
"numComments": 276,
"createdAt": "2026-10-02T03:29:02.000Z",
"url": "https://www.reddit.com/r/SaaS/comments/1wvjgm2/i_made_7802_today/"
}
],
"page": { "nextCursor": "AdxXcaGWSY8c…", "hasMore": true },
"credits": { "charged": 0, "remaining": 719 }
}
On the test thread, job 3 printed 101 of 186 comments loaded. The comments come back as a flat list with parentId instead of PRAW's nested CommentForest. Our post on exporting Reddit comments to CSV or JSON shows how to rebuild the tree. To get more pages, pass page.nextCursor back as cursor. The endpoints are subreddit posts, search and threads.
If you want to check your key first, here is the same call with curl:
curl "https://api.chatterapi.com/v1/reddit/subreddits/SaaS/posts?sort=top&time=week" \
-H "Authorization: Bearer $CHATTERAPI_KEY"
PRAW vs a hosted API
| PRAW | Hosted API with requests | |
|---|---|---|
| Credentials | Reddit app, approved by Reddit | Provider key; ChatterAPI signs up with Google |
| Cost | Free library; Reddit's free tier is 100 QPM, commercial use needs a contract | Per call; ChatterAPI from $19/month for 25,000 credits |
| Write actions | Post, comment, vote, moderate | ChatterAPI is read-only for Reddit |
| Comment trees | Nested CommentForest, replace_more | Flat list with parentId |
| Comment search | Not in Reddit's public API | GET /v1/reddit/comments/search |
| Async | Async PRAW | Any HTTP client: httpx, aiohttp |
| Account status | Not exposed | GET /v1/reddit/users/{name}/status |
| AI agents | Wrap it yourself | Hosted MCP server at https://api.chatterapi.com/mcp |
| Future access | Tied to Reddit's API timeline | Tied to the provider |
Our PRAW alternative page has a fuller comparison with sources. Going through a hosted API doesn't change the rules for Reddit content: Reddit's Data API Terms still apply to whatever you build.
The case for staying on PRAW
If you have working credentials, there are good reasons to stay.
The library costs nothing, and the free tier covers a lot of hobby and research use.
It also does things a read-only API can't, like bots that reply, mod tools that remove posts and scripts that manage flair. ChatterAPI doesn't post or vote on Reddit at all, by design.
You talk to Reddit directly. With no middleman, nobody else's outage becomes yours.
People are still shipping on it. "This bot still uses PRAW just fine," u/MarvelSnapCodeBot wrote in August 2026.
The risk is the timeline. Register your app before January 12, 2027, and plan for March 2027, when Reddit closes public API access and pushes apps toward Devvit. Bot developers in r/redditdev doubt big Python bots can make that move. "It's completely impossible to migrate mission critical bots we depend on to devvit," u/emily_in_boots wrote. If your job only reads data, a hosted API is a fallback you can set up in an afternoon. If it writes, Devvit is where Reddit is pointing.
Pick your route
If you have keys and need to write, stay on PRAW and register. If you need to read Reddit from Python without keys, or from an AI agent, use requests and a hosted API. Sign up with Google for 100 free credits with no card. That covers about 50 subreddit pages or 33 threads. Plans start at $19 a month for 25,000 credits.