Reddit Search Scraper - Posts by Keyword, No API Key avatar

Reddit Search Scraper - Posts by Keyword, No API Key

Pricing

from $0.86 / 1,000 posts

Go to Apify Store
Reddit Search Scraper - Posts by Keyword, No API Key

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

3

Monthly active users

2 days ago

Last modified

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.

InputA search query, optionally kept inside one subreddit
OutputOne row per matching post: title, author, subreddit, full text, links, timestamp, and comments if you ask
Ceiling100 posts per search, or up to 1,000 with your own Reddit app
Account neededNone 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 getField
The post id, title, author and subredditid, title, author, subreddit
The thread link, and where a link post pointspermalink, url, domain, isSelf
The whole post textselftext
The timestamp, as epoch seconds and as a datecreatedUtc, createdAt
The thumbnail, when the post has onethumbnail
Votes, upvote ratio, comment count, flair and the over-18 flag, real only with your own appscore, upvoteRatio, numComments, flair, over18
The comments, when you ask for them, or why they are missingcomments, commentsError
Which way the row was readsource

โ–ถ๏ธ How to scrape Reddit search results by keyword

  1. Open Reddit Search Scraper and click Try for free.
  2. Type your keywords into Search query.
  3. Optional: put a community into Restrict to subreddit (optional), and pick a Sort by and a Time window.
  4. Set Max posts. Start at 25 while you check the wording of your query.
  5. 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
}
FieldDefaultWhat it is
querynone, requiredYour keywords. Reddit's search operators and quoted phrases both work. The form opens with best mechanical keyboard.
subredditnoneSearch inside one community. MechanicalKeyboards or r/MechanicalKeyboards. Empty searches all of Reddit.
sortrelevancerelevance, hot, top, new or comments.
timeallThe window. Applies to relevance, top and most-comments sorts.
maxItems50Posts to return, 1 to 1,000, but see the ceiling above. This is your spend cap.
includeCommentsfalseAttach each post's comments. Slower, see above.
commentLimit10Comments kept per post, top first. 1 to 100. Only used with includeComments on.
redditClientId, redditClientSecretnoneYour own free script app from reddit.com/prefs/apps. Fills the vote fields and pages past 100.
notionConnectornoneOptional. Pick a Notion connector and each post is written into your Notion as well as the dataset.
notionParentIdnoneThe Notion database to write into. Empty creates the pages privately in your workspace.
proxyConfigurationoffLeave 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.

FieldHow to read it
urlThe outbound link on a link post. On a text post it is the thread itself.
permalinkAlways the Reddit thread, whatever kind of post it is.
isSelf, domaintrue and self.<subreddit> on a text post. On a link post, the host it points at.
createdUtc, createdAtThe same moment as epoch seconds and as an ISO string.
sourceWhich way the row was read: rss for the keyless search, oauth for your app credentials.
commentsOnly 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.

RowHow to spot itBilled
A postok: true and an idyes
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your results.

CodeWhat it means
BAD_INPUTThe query was empty or unusable. Nothing was searched.
NO_RESULTSThe search ran and Reddit matched nothing. Try a wider time window or fewer operators.
TIME_LIMITThe 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:

FieldKeylessWith your app credentials
title, author, selftext, permalink, createdAtfilledfilled
score, upvoteRatio, numComments, flair, over18nullfilled
comment scorenullfilled
posts per searchup to 100pages 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, upvoteRatio and flair are null, 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 commentsError rather 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 wantUse
Posts and their full text from subreddits or profiles you nameReddit Scraper
Posts matching a keyword, across Reddit or inside one subredditThis one
Reddit videos as one MP4 with the sound in itReddit Video Scraper
Post text you already have, cleaned up for a voice to readReddit Text Cleaner
A post rewritten into a hook and a short-form scriptStory to Script Rewriter
A finished faceless short video from a subreddit or a storyAI 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.

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.