Reddit Search Scraper - Posts by Keyword, No API Key
Pricing
from $0.86 / 1,000 posts
Reddit Search Scraper - Posts by Keyword, No API Key
Search Reddit posts by keyword, across the whole site or inside one subreddit, no key needed. Each row holds the title, author, subreddit, full post text, links and timestamp, plus comments if you ask. Keyless runs carry no vote data; your own free Reddit app fills it in. $0.891 per 1,000 posts.
Pricing
from $0.86 / 1,000 posts
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
Type a keyword and get the Reddit posts that match it, across the whole site or inside one subreddit: title, author, subreddit, the full post text, the permalink and the timestamp, with the comments too if you ask for them.
The honest part first. A keyless run gives you up to 100 posts per search, and it carries no vote
data, so score, numComments, upvoteRatio, flair and over18 arrive as null. Everything
else on the row is filled. Add your own free Reddit app and those fields fill in, and the search can
page past 100.
| Input | A search query, optionally kept inside one subreddit |
| Output | One row per matching post: title, author, subreddit, full text, links, timestamp, and comments if you ask |
| Ceiling | 100 posts per search, or up to 1,000 with your own Reddit app |
| Account needed | None by default |
| Price | $0.89 per 1,000 posts ($0.000891 each), flat on every plan. The free plan's $5 a month covers about 5,600 |
๐ What Reddit Search Scraper does
It runs your query the way Reddit's own search box would, and writes each hit as a row. Reddit's
search operators work: title:layoffs, author:spez, quotes around a phrase. Leave subreddit
empty to search the whole site, or fill it in to stay inside one community.
Turn includeComments on and each post gets its comments attached, up to commentLimit. That path
is paced, so it is noticeably slower: measured, five posts finish in about five seconds, while 100
posts take around three minutes and roughly 86 of them come back with comments. The ones that miss
out carry a commentsError instead of a silently empty list.
There is no cross-run dedupe here. Run the same query twice and you get the same posts twice.
๐ What data you get from each Reddit post
| What you get | Field |
|---|---|
| The post id, title, author and subreddit | id, title, author, subreddit |
| The thread link, and where a link post points | permalink, url, domain, isSelf |
| The whole post text | selftext |
| The timestamp, as epoch seconds and as a date | createdUtc, createdAt |
| The thumbnail, when the post has one | thumbnail |
| Votes, upvote ratio, comment count, flair and the over-18 flag, real only with your own app | score, upvoteRatio, numComments, flair, over18 |
| The comments, when you ask for them, or why they are missing | comments, commentsError |
| Which way the row was read | source |
โถ๏ธ How to scrape Reddit search results by keyword
- Open Reddit Search Scraper and click Try for free.
- Type your keywords into Search query.
- Optional: put a community into Restrict to subreddit (optional), and pick a Sort by and a Time window.
- Set Max posts. Start at 25 while you check the wording of your query.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.
๐ฐ How much does it cost to scrape Reddit search results?
$0.891 per 1,000 posts, which is $0.000891 a post. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 5,600 posts.
You pay per post delivered. Diagnostic rows are not billed, and a search that matches nothing
produces no post rows to bill for. Comments ride on the post row, so turning includeComments on
adds time but not price.
If you set a maximum cost for the run, it stops writing posts when that is reached. A maximum too small to pay for a single post stops the run before it searches at all.
๐ฅ What you give it
{"query": "best mechanical keyboard","subreddit": "MechanicalKeyboards","sort": "top","time": "year","maxItems": 50}
| Field | Default | What it is |
|---|---|---|
query | none, required | Your keywords. Reddit's search operators and quoted phrases both work. The form opens with best mechanical keyboard. |
subreddit | none | Search inside one community. MechanicalKeyboards or r/MechanicalKeyboards. Empty searches all of Reddit. |
sort | relevance | relevance, hot, top, new or comments. |
time | all | The window. Applies to relevance, top and most-comments sorts. |
maxItems | 50 | Posts to return, 1 to 1,000, but see the ceiling above. This is your spend cap. |
includeComments | false | Attach each post's comments. Slower, see above. |
commentLimit | 10 | Comments kept per post, top first. 1 to 100. Only used with includeComments on. |
redditClientId, redditClientSecret | none | Your own free script app from reddit.com/prefs/apps. Fills the vote fields and pages past 100. |
notionConnector | none | Optional. Pick a Notion connector and each post is written into your Notion as well as the dataset. |
notionParentId | none | The Notion database to write into. Empty creates the pages privately in your workspace. |
proxyConfiguration | off | Leave it off. A normal run does not need it. |
query is required. Send an empty one and the run writes a BAD_INPUT row rather than
searching for nothing.
๐ค What you get back
A real row from a real run, keyless:
{"ok": true,"id": "1w4c63y","title": "What's The Best Mechanical Keyboard In 2026? (Price, Switches)","author": "freecoinsbabyhe","subreddit": "keyboards","url": "https://www.reddit.com/r/keyboards/comments/1w4c63y/whats_the_best_mechanical...","permalink": "https://www.reddit.com/r/keyboards/comments/1w4c63y/whats_the_best_mechanical...","selftext": "I tried my buddy's board recently with brown tactile switches he told me last week and I actually loved that little bump not too loud but you still feel it...","score": null,"upvoteRatio": null,"numComments": null,"createdUtc": 1788269666,"createdAt": "2026-09-01T13:34:26.000Z","flair": null,"over18": null,"isSelf": true,"thumbnail": null,"domain": "self.keyboards","source": "rss"}
The selftext above is cut short here for reading. In a real row it holds the whole post.
| Field | How to read it |
|---|---|
url | The outbound link on a link post. On a text post it is the thread itself. |
permalink | Always the Reddit thread, whatever kind of post it is. |
isSelf, domain | true and self.<subreddit> on a text post. On a link post, the host it points at. |
createdUtc, createdAt | The same moment as epoch seconds and as an ISO string. |
source | Which way the row was read: rss for the keyless search, oauth for your app credentials. |
comments | Only when includeComments is on. Author, body, permalink and time on each. |
๐งพ Reading the output
Two kinds of row land in the dataset, and only the first kind is billed.
| Row | How to spot it | Billed |
|---|---|---|
| A post | ok: true and an id | yes |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok == true and you have your results.
| Code | What it means |
|---|---|
BAD_INPUT | The query was empty or unusable. Nothing was searched. |
NO_RESULTS | The search ran and Reddit matched nothing. Try a wider time window or fewer operators. |
TIME_LIMIT | The run hit its time limit before a single post came back. The run ends as failed. |
A search that fails writes its own coded diagnostic row with the query on it, so you can tell a failed search from a search that genuinely found nothing.
commentsError is different. It sits on a real post row that was delivered and billed, and says the
comments for that one post could not be read. unavailable_429 means Reddit would not serve that
thread's comments at the time, http_404 means the thread was gone by the time they were asked
for, and time_limit means the run reached its time limit first. Every post found is still written.
Which fields carry a value depends on the path:
| Field | Keyless | With your app credentials |
|---|---|---|
title, author, selftext, permalink, createdAt | filled | filled |
score, upvoteRatio, numComments, flair, over18 | null | filled |
comment score | null | filled |
| posts per search | up to 100 | pages past 100 |
๐ก What people use it for
- Watching what people say about a product or a company, in their own words rather than in a summary.
- Pulling every thread in one subreddit that mentions a term, for a support or research backlog.
- Finding the threads behind a spike, by sorting on most comments inside a tight time window.
- Collecting question posts in a niche to see what keeps getting asked.
๐ง What it does not do
- No vote data on a keyless run.
score,numComments,upvoteRatioandflairarenull, left empty rather than written as zero so you can tell missing from none. - 100 posts per search while keyless. Ask for 500 and 100 is what arrives. Your own app credentials lift that.
- No dedupe between runs. The same query on Tuesday returns Monday's posts again, and bills for them.
- Comments are paced. On a big run some posts come back with a
commentsErrorrather than a comment list. Deleted comments are skipped. - A long search with your own app is all or nothing. If a later page fails, the run ends with a diagnostic row instead of the posts read before it, and none of them are billed.
- No user or subreddit browsing. This searches. To walk a subreddit or a profile in order, use the scraper linked below.
- No private or removed content. Public posts only, as Reddit's own search sees them.
๐งญ Which Reddit actor do you need?
| If you want | Use |
|---|---|
| Posts and their full text from subreddits or profiles you name | Reddit Scraper |
| Posts matching a keyword, across Reddit or inside one subreddit | This one |
| Reddit videos as one MP4 with the sound in it | Reddit Video Scraper |
| Post text you already have, cleaned up for a voice to read | Reddit Text Cleaner |
| A post rewritten into a hook and a short-form script | Story to Script Rewriter |
| A finished faceless short video from a subreddit or a story | AI Faceless Video Generator |
โ Questions people ask
Do I need a Reddit account?
No. The credential fields are optional. They buy you the vote fields, comment scores, and paging past 100 posts.
Why are all my scores null?
The keyless search does not carry them. They are left empty on purpose, so an empty field never reads as a post with zero upvotes.
Do Reddit search operators work?
Yes. title:, author:, quoted phrases, the usual Reddit set. They go in the same Search query
box.
Why is my run with comments so slow?
Each post's comments are a separate read, and Reddit sets the pace for those. Roughly three minutes
for 100 posts. Keep commentLimit low when you are pulling a lot of posts.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/reddit-search-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping Reddit legal?
This reads public posts only, never private messages or accounts. Rows can still hold personal data, which GDPR and similar laws cover, so have a reason for keeping it. Apify's write-up on the legality of web scraping is a sensible starting point, and we are not lawyers.
๐ If something breaks
Open the Issues tab on the actor page. Send the exact query you used and the run ID, and the log fills in the rest.