Home/Switch/PRAW

Keep your PRAW bot running

Two settings in praw.Reddit() point an existing bot at Redlisten. Reading, searching and thread walking keep working in Python. No rewrite in Devvit, no TypeScript.

Why PRAW bots need a new home

PRAW talks to Reddit's Data API. Reddit has said that unregistered apps lose that API on 12 Jan 2027 and that public access closes in March 2027. The replacement Reddit points developers at is Devvit, which is a TypeScript platform with its own runtime and its own review process. A Python bot with a few hundred lines of PRAW does not move there without being rewritten.

PRAW has two settings that decide where it sends requests. Point them at Redlisten and the bot keeps running as Python, with the same objects, the same iterators and the same attribute names.

The two settings

reddit_url is the host PRAW reads listings from, and oauth_url is the host it fetches tokens from. Set both to https://api.redlisten.com. Pass your key as client_id. client_secret must be present but its value is ignored, so any short string works. Keep your user_agent; it is sent through unchanged and shows up in your usage log.

The same values go in praw.ini if you configure PRAW that way: add reddit_url and oauth_url under your site block and set client_id to the key. Environment variables work through PRAW's usual praw_ prefix.

import os
import praw

reddit = praw.Reddit(
    client_id=os.environ["REDLISTEN_KEY"],   # your rl_live_ key
    client_secret="x",                        # any non empty string
    user_agent="watchbot/1.0",
    reddit_url="https://api.redlisten.com",
    oauth_url="https://api.redlisten.com",
)

# New posts in a community
for post in reddit.subreddit("python").new(limit=50):
    print(post.id, post.score, post.title)

# A full thread
sub = reddit.submission(id="1xju19t")
sub.comments.replace_more(limit=0)
for c in sub.comments.list():
    print(c.author, c.body[:80])

# An author's recent history
for item in reddit.redditor("example_user").new(limit=25):
    print(type(item).__name__, item.id)

# Search inside a community
for post in reddit.subreddit("smallbusiness").search("which CRM", sort="new", time_filter="week"):
    print(post.title)

The token exchange PRAW performs at startup succeeds against Redlisten and returns a token scoped to your key, so PRAW behaves as if it were authenticated with a script app. reddit.read_only is true, which is the mode most bots already run in.

What works

Pagination through limit and after is handled by PRAW as before. The Reddit style paths keep Reddit's ceiling of 100 items a page, and a free key pages in 50s, so PRAW's own batching behaves as it did against Reddit.

What does not work

Redlisten is read access, so anything that writes to Reddit is not available. That means no submit(), no reply(), no upvote() or downvote(), no save(), no modmail, no mod.approve() or mod.remove(), and no inbox. Those calls raise the usual PRAW exception for a 404. A bot that reads and then acts needs its acting half to stay on Reddit or move to Devvit; its reading half, which is usually the heavy half, runs here.

There is no logged in view, so private communities, quarantined communities and a user's own saved or hidden items are not served. hot, top and rising return the newest items in that community rather than Reddit's ranked order.

Rate limits and quotas

PRAW reads the x-ratelimit-* headers and sleeps on its own when they run low. The per minute limit is set by your plan, from 30 requests a minute on Free to 120 on Pro, 300 on Team and 600 on Business, as listed on 6 Nov 2026. Monthly request quotas are metered per calendar month with no daily cap. A free key with 250 requests a month is enough to prove the bot runs; a bot that polls a community every minute belongs on Pro, which has 50,000 requests a month.

Other client libraries

Any Reddit client that lets you set the base URL works the same way. Snoowrap in JavaScript takes an endpointDomain; async PRAW takes the same two settings as PRAW. A plain requests or fetch call against the Reddit style paths works with a bearer header and nothing else. If your library is stuck on oauth.reddit.com, the PRAW section of the docs shows the raw token call so you can patch it.

Common questions.

Do I need to change my bot's code?

No. Set reddit_url and oauth_url to https://api.redlisten.com in praw.Reddit() or praw.ini, pass your key as client_id, and the reading code stays as it is.

Can the bot still post or vote?

No. Redlisten is read access. Submitting, replying, voting, saving, modmail and moderation actions are not served and raise PRAW's usual exception for a 404.

Does PRAW's stream helper work?

Yes. stream.submissions() and stream.comments() poll the new listings, which Redlisten serves, so a streaming loop keeps running. The plan's per minute limit sets how fast it can poll.

What about async PRAW and snoowrap?

Async PRAW takes the same two settings. Snoowrap takes an endpointDomain. Any client that lets you set the base URL works, and raw HTTP against the Reddit style paths works with a bearer header.

Switch before 13 Nov

Get a key, change one URL, and your feeds, bots and alerts keep running. Then try the search Reddit never had.