Advanced Reddit Search Filters API (2026)
Filter Reddit search by score, comment count, media type, and NSFW over one authenticated GET. Every filter parameter, the response meta, and real Python.

Reddit's search endpoint answers a keyword query, but it will not let you ask for only the high-signal posts. You cannot tell native search "give me posts above 500 upvotes" or "only text self-posts" or "sorted by comment count." The advanced filters API closes that gap: it takes the page Reddit returns and applies score, comment-count, media, and state filters to it, the same way pullpush did for historical data. This guide covers every filter parameter, the honest completeness meta, and copy-paste Python.
Not affiliated with Reddit Inc. redditapis.com is an independent third-party REST proxy for Reddit's API. This guide is vendor-neutral: it explains the native
/search.jsonlimits, the pullpush filter model, and a managed REST option so you can pick what fits.
TL;DR: Reddit's search cannot filter by score, comment count, or media type server-side. A managed endpoint applies those filters to the returned page, like pullpush: pass
min_score,max_comments,is_self,is_video,over_18, orsort_typetohttps://api.redditapis.com/api/reddit/searchwith yourq. A filtered response adds ametablock (fetched,returned,filtered_out) so a small page is never read as the end of results. One GET, $0.002 (pricing).
What you will build:
- A score-bounded search that returns only posts above a threshold with
min_score - A media filter that keeps only self-posts or only videos with
is_selfandis_video - A
sort_typere-sort that orders a filtered page by score, comment count, or recency - A pagination loop that reads the
metablock to gather a target number of matches
The Gap in Native Reddit Search
Native Reddit search takes a query and a sort tab (relevance, new, top, comments) and a time window. What it does not take is a numeric filter. There is no min_score, no min_comments, no "self-posts only" on the public endpoint. For years the answer to that gap was Pushshift, and then its successor pullpush, because they indexed Reddit and let you filter the index directly.
The demand shows up plainly whenever developers discuss what the API costs and what it cannot do. This widely-read r/redditdev thread on API calls names the exact gap in passing, noting that with Pushshift gone you can no longer even average the comment scores across a thread:
Lets talk about those API calls
The same want surfaces as "is there an API equivalent of comment search," where people expect to filter results by user or subreddit and find the native surface will not do it:
Is there an API equivalent of comment search?
The honest framing is that Reddit's search index does not expose these filters, so any tool that offers them is filtering after the fetch. That is exactly how pullpush works, and it is how the managed endpoint below works. Understanding that one fact explains everything about the response shape.
The Filter Parameters
The managed search endpoint takes your normal q, subreddit, sort, and t, then layers a set of advanced filters on top. They fall into three groups: numeric bounds, boolean flags, and a re-sort.
- Numeric bounds:
min_score,max_score,min_comments,max_comments. Each takes a number and bounds the post's score (upvotes) or comment count. A non-numeric value returns a 400. - Boolean flags:
is_video,is_self,over_18,locked,stickied,spoiler,contest_mode. Each takestrueorfalse.is_self=truekeeps only text self-posts;is_video=truekeeps only hosted video posts;over_18includes or excludes NSFW. - Re-sort:
sort_typetakesscore,num_comments, orcreatedand re-orders the filtered page by that field, descending. This is a different axis from Reddit's ownsorttab, which is why both can be set at once.
Filters combine. A single call can ask for text self-posts, above 500 upvotes, with at least 50 comments, sorted by comment count:
import os
import requests
API_KEY = os.environ["REDDITAPI_KEY"]
BASE = "https://api.redditapis.com"
resp = requests.get(
f"{BASE}/api/reddit/search",
params={
"q": "postgres vs mysql",
"min_score": 500,
"min_comments": 50,
"is_self": "true",
"sort_type": "num_comments",
"limit": 100,
},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
for post in data["posts"]:
print(f"{post['upvotes']:>6} up | {post['comments']:>4} com | {post['title']}")
Note the post fields: the managed path returns upvotes and comments, not the native score and num_comments, so read those names when you print or store a result. The full post shape (id, title, author, permalink, subreddit, over_18, is_self, created_utc, and more) matches the rest of the read endpoints and is documented in the search tutorial.
Start building with Redditapis
Reads $0.002, votes $0.005, writes $0.012, DMs $0.025. $0.50 free credits.
How the Filters Run
Because Reddit will not filter on these fields, the endpoint fetches a page from Reddit's search, then keeps or drops each post against your filters, then re-sorts what survives. That is the pullpush model applied to live search, and it has one consequence you must design around: a filtered page can return far fewer posts than your limit.
To keep that honest, a filtered response adds a meta block that a plain search does not carry:
import os
import requests
API_KEY = os.environ["REDDITAPI_KEY"]
BASE = "https://api.redditapis.com"
resp = requests.get(
f"{BASE}/api/reddit/search",
params={"q": "kubernetes", "min_score": 1000, "limit": 100},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
data = resp.json()
print(data["meta"])
# {'fetched': 100, 'returned': 7, 'filtered_out': 93, 'filters': {'min_score': 1000}}
for post in data["posts"]:
print(post["upvotes"], post["title"])
The meta block reports fetched (how many Reddit returned for the query), returned (how many survived the filter), filtered_out (the difference), and the filters that were applied. Read meta.returned as the count for this page only. A strict filter like min_score=1000 will often keep single digits out of a hundred, and that is correct behavior, not an empty index. When you pass no filters at all, the endpoint returns the plain { posts, after } shape with no meta, so existing callers are untouched.
Paginating a Strict Filter
Because a strict filter thins each page, gathering a target number of matches means paging on the after cursor and accumulating until you have enough. Here is the standard pattern:
import os
import requests
API_KEY = os.environ["REDDITAPI_KEY"]
BASE = "https://api.redditapis.com"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def search_filtered(query, want=25, max_pages=10, **filters):
collected = []
after = None
for _ in range(max_pages):
params = {"q": query, "limit": 100, **filters}
if after:
params["after"] = after
data = requests.get(f"{BASE}/api/reddit/search", params=params,
headers=HEADERS, timeout=60).json()
collected.extend(data["posts"])
after = data.get("after")
if len(collected) >= want or not after:
break
return collected[:want]
top = search_filtered("local llm", want=25, min_score=200, is_self="true")
print(f"Collected {len(top)} self-posts above 200 upvotes")
Set max_pages deliberately. Reddit caps any single query at 10 pages of 100 results, so max_pages=10 is the ceiling for one keyword. If a very strict filter still comes up short, loosen the bound or vary the query (scope it to a subreddit, or narrow the t window) rather than paging past the cap. The pagination guide covers the cursor mechanics in full.
The cheapest Reddit API. Try it free.
Reads from $0.002 per call. $0.50 free credits. No credit card required.
The Pullpush Gap, Closed
Pushshift shut down in 2023, and its community successor pullpush (pullpush.io) kept the filtered-search model alive: score bounds, comment bounds, and field filters over an index of Reddit data. It is free, and it has no uptime guarantee, which is fine for a research script and a real risk for anything customer-facing. The original model is documented in the Pushshift docs, and the migration options are laid out in the Pushshift alternatives roundup.
The managed filters bring that same score, comment, and media filtering to live Reddit search with a maintained IP pool and honest meta. The reliability angle is not academic. Developers keep reaching for no-auth workarounds precisely because the official surface is awkward, and posts like this one, offering to pull Reddit data without keys, get thousands of bookmarks:

Tom Dörr
@tom_doerr
Scrapes Reddit data without API keys https://t.co/JeyRHIaa9P https://t.co/ntPLzeNHVs

The trade is the usual one. Native search is free but has no filters. Pullpush is free, has filters, and has no SLA. A managed path has the filters and a reliability guarantee, priced per call at $0.002 per GET (pricing). Pick on whether reliability or zero cost matters more for your job.
What Developers Build on Filtered Search
Score and comment filters are rarely the goal on their own; they are how you raise the signal of a larger pipeline. Three patterns cover most of it, and each leans on a specific filter.
- RAG ingestion. Grounding an LLM answer wants the highest-signal threads, so
min_scoreandmin_commentscut the long tail before you spend embeddings on it. Pair withis_self=truewhen you want discussion text rather than link posts. - Trend and brand monitoring. Watching for meaningful mentions rather than every mention,
min_scorefilters out the posts nobody engaged with, so an alert fires on a thread that actually gained traction. The keyword monitor walkthrough builds exactly this. - Dataset building. Assembling a labeled set of, say, video posts or NSFW-flagged content,
is_videoandover_18turn a broad query into a clean slice without a second filtering pass in your own code.
The same endpoint serves all three; the filters are what specialize it. If you are wiring search into an agent, the Reddit API for AI agents guide covers the surrounding read calls you will pair with it.
Verdict
Native Reddit search gives you a keyword and a sort tab and nothing else, which is why the pullpush and Pushshift questions never fully died. The advanced filters API adds the missing axis: score and comment bounds, media and state flags, and a numeric re-sort, all over one authenticated GET, applied to the page the same way pullpush filters its index. The meta block keeps it honest so a thinned page is never mistaken for an empty one. Native search is free with no filters, pullpush is free with filters and no SLA, and a managed endpoint like https://api.redditapis.com/api/reddit/search gives you the filters plus a reliability guarantee for $0.002 per call. Start free, measure how strict your filters really are, and upgrade when a missing filter becomes a missing feature. Grab a key and filter a query.
Where these numbers come from.
Each row is a figure in this post and the artefact it was read from. Reddit's access rules and the third-party archives around them keep moving, so check the date on a source before you build against it.
- Reddit API documentation
- The base search endpoint and the sort and time parameters the filters layer onto.
- Reddit Data API wiki
- Access rules and rate limits for the search endpoint.
- PullPush API
- The community Pushshift successor whose score and comment filters this endpoint mirrors.
- Pushshift documentation
- The original filtered-search model referenced in the pullpush-gap section.
- redditapis.com API docs
- The managed search path and advanced filter parameters shown in the article.
Frequently asked questions.
Reddit's own search cannot filter by score or comment count server-side, so a managed REST path applies the filters to the page Reddit returns, the way pullpush does. Pass `min_score`, `max_score`, `min_comments`, or `max_comments` to `https://api.redditapis.com/api/reddit/search` alongside your `q`, and each post in the page is kept or dropped against those bounds. A filtered response adds a `meta` block reporting `fetched`, `returned`, and `filtered_out` so a small page is never mistaken for the end of results. See the [filter reference](/blogs/reddit-advanced-search-filters-api-2026#the-filter-parameters).
The managed search endpoint accepts numeric bounds (`min_score`, `max_score`, `min_comments`, `max_comments`), boolean flags (`is_video`, `is_self`, `over_18`, `locked`, `stickied`, `spoiler`, `contest_mode`), and a `sort_type` of `score`, `num_comments`, or `created`. Numeric and boolean filters run together, so `min_score=500&is_self=true` returns only text self-posts above 500 upvotes. A bad value returns a 400 before any upstream read.
Yes. Pass `is_self=true` to keep only text self-posts, or `is_video=true` to keep only hosted video posts. Both are boolean filters that take `true` or `false`. Because Reddit does not expose these as server-side search parameters, they are applied to the returned page, so combine them with `after` pagination when a strict filter matches only a few posts per page. The [request flow](/blogs/reddit-advanced-search-filters-api-2026#how-the-filters-run) explains why.
Pushshift let you filter historical Reddit search by score and comment count directly, and its community successor pullpush kept that model, but neither has an uptime guarantee. The managed search endpoint brings the same score, comment, and media filters to live Reddit search over one authenticated GET, with honest completeness meta and a maintained IP pool. It is the reliability trade: pullpush is free with no SLA, the managed path prices per call at $0.002 ([pricing](/pricing)).
Because filters apply to the page Reddit returns, not to Reddit's index. If you request `limit=100` with `min_score=1000`, Reddit hands back up to 100 posts for your query and the filter may keep only a handful of them. That is expected, not an error. The `meta` block tells you exactly what happened (`fetched: 100, returned: 4, filtered_out: 96`), and you page with the `after` cursor to gather more. Treat `meta.returned` as the count for this page, never as the total available.
No. A filtered search is still one GET at $0.002 ([pricing](/pricing)); the filters run on the page after Reddit returns it, so there is no extra upstream call. The only practical difference is that a strict filter may need more pages (more GETs) to collect a target number of matches. The first $0.50 of credit is free at [signup](/signup), so you can test a few filter combinations before a card is needed.
Keep reading.
Continue exploring related pages.
Reddit API documentation
The complete 2026 reference: auth, all 38 endpoints, and code.
Get a Reddit API key
Instant bearer token, no waitlist and no enterprise contract.
Reddit Responsible Builder Policy
Why Reddit denies API applications, and the managed REST bypass.
Reddit API use cases
14 use cases from AI training to brand monitoring and DMs.
Reddit Search API
Search posts, comments, users, and communities over one REST endpoint.
Reddit MCP server
Wrap the REST API as MCP tools for Claude, Cursor, and any MCP client.
Reddit API for AI agents
Live Reddit context for tool calls, MCP servers, and RAG pipelines.
Redditapis pricing
Endpoint-level costs and quick monthly totals - reads from $0.002 / call.
Reddit API cost calculator
Estimate monthly spend using your request volume.
Reddit API guides and tutorials
Tutorials, walkthroughs, and API deep-dives for developers.
Reddit API alternatives
Evaluate alternatives by cost model, limits, and integration fit.
Cheap Reddit API
The cheapest way to get Reddit data: $0.002 per call, no contract, no minimum.
Official Reddit API vs Redditapis
Access, setup, rate limits, and pricing, side by side.
PRAW alternative
A hosted Reddit REST API for any language, no app registration or OAuth.
Reddapi alternative
A maintained Reddit REST API with published pricing and write endpoints.
Reddit comment scraper alternative
The raw comment API: search and filter comments, historical and live, clean JSON.
Reddit scraper API
Hosted scraper API vs building your own: managed proxies, clean JSON.
RapidAPI Reddit alternative
A direct, maintained Reddit API with published pricing and write endpoints.
Bright Data Reddit alternative
A purpose-built Reddit API vs a general scraping platform: structured JSON, plus writes.
ScraperAPI Reddit alternative
A Reddit-native API vs a generic HTML fetcher: auth and pagination handled, typed JSON.
Reddit monitoring API
Build your own keyword and brand-mention monitor: search, comment search, and subreddit streams over REST.
Affiliate program
Earn 20% lifetime commissions - capped at $5,000/yr.
Reddit Vote API tutorial
Upvote and downvote a post programmatically via the REST API.
Reddit Data API: REST, no PRAW
REST endpoints for Reddit data with no PRAW and no OAuth dance.
Reddit scraping benchmarks
Real throughput, error rates, and cost benchmarks for Reddit scraping.
Reddit API answers
Direct answers on cost, access, rate limits, endpoints, and auth.
How much the Reddit API costs
Per-call pricing from $0.002 a read, with $0.50 in free credits.
Reddit API in Python
One requests call with a bearer token, no PRAW and no OAuth flow.
Reddit shadowban checker
Check if a Reddit account is shadowbanned in seconds, free and no login.
Similar reads.
More guides on the Reddit API, scraping, pricing, and MCP servers.








