Reddit Posts Search Scraper
Search Reddit by keyword: title, post text, author, subreddit, permalink and dates. Add a free Reddit app for scores. $0.891 per 1,000 posts.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
query,subreddit,time(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.000891 per post = $0.891 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Post returned | Charged per Reddit post returned in the dataset (empty searches are not charged). | $0.000891 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-19, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
query | Keywords to search Reddit for. Supports Reddit search operators (e.g. "title:layoffs", "author:spez", quotes for phrases). | string |
subreddit | Search only within this subreddit (e.g. "MechanicalKeyboards" or "r/MechanicalKeyboards"). Leave empty to search all of Reddit. | string |
time | Applies to Relevance / Top / Most-comments sorts. | string |
redditClientId | Optional. Create a free 'script' app at reddit.com/prefs/apps to fill in the vote data the public feed does not carry (score, upvoteRatio, numComments, flair), to get scores on comments, and to page past 100 posts. Without it the actor uses the keyless feed, which still returns posts and comments. | string |
redditClientSecret | The secret for the Reddit app above. | string |
sort | How to order the search results. | string |
maxItems | The keyless feed returns up to 100 matching posts per search, ask for more and 100 is what arrives. It carries no vote data, so score, numComments, upvoteRatio and flair come back null; title, author, url, permalink, subreddit, selftext, createdAt, isSelf, domain and thumbnail are populated. Add Reddit app credentials below to fill in the vote data and page past 100. | integer |
commentLimit | How many comments to keep per post, top-sorted. Worth keeping low when you are pulling a lot of posts, this multiplies with Max posts. | integer |
includeComments | Read each post's comments. Works without Reddit app credentials. Reddit serves a given address about one comment feed per minute, so this is paced and slower than a plain search: measured, 5 posts come back complete in about 5 seconds, while 100 posts take about 3 minutes and around 86 of them get comments. Posts that missed out carry a commentsError on the row rather than an empty list. Comments have author, body, permalink and createdAt; Reddit's comment feed carries no scores, so comment score is null unless you add app credentials. | boolean |
notionConnector | Optional. Write each post as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
authorcreatedAtcreatedUtcdetailsdomainflairidisSelfnumCommentsover18permalinkqueryscoreselftextsubreddittitleurlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
22 ready-to-run use cases
Reddit Monitoring Tool: New Posts Naming Your Brand
A reddit monitoring tool run: every post from the past week naming your company, with the full text, a link, and the comments under it.
Reddit Lead Generation: r/SaaS 'What Tool' Threads
Reddit lead generation from r/SaaS. Posts where somebody asks which tool to use, with the whole ask, the author and a link. Buyer intent in their own words.
Reddit Startup Ideas from r/Entrepreneur Pain Points
Reddit startup ideas mined from r/Entrepreneur posts that begin 'I wish there was'. Full post text and links, top of the year. Validate before you build.
WallStreetBets Posts by Ticker, Scraped Daily
Today's wallstreetbets posts naming a ticker, with full text, author and link. Raw posts for you to score. There is no sentiment column in the output.
Reddit SEO: Find Threads Ranking for Your Keyword
Reddit SEO research. Pull the year's top threads for a commercial keyword and check which ones Google shows. Post text and links, no upvote numbers.
Reddit Market Research on a Named Company
A reddit market research sweep: a month of top posts naming a company, with the full write-ups, links and the replies under each one.
BuyItForLife Products: r/BuyItForLife Top Posts
Which buyitforlife products people actually stand behind, from the month's top r/BuyItForLife posts. Full text and links. Repeat mentions are the signal.
Reddit Dataset of Top Questions from a Subreddit
Build a reddit dataset from top 'how do I' posts in r/learnprogramming: questions with full body text and the answers from their comment threads.
Reddit Sentiment Analysis Input: A Week of Posts
Raw material for reddit sentiment analysis: a week of new posts from one subreddit, full text included. It collects the posts. The scoring is yours to run.
Reddit 'Alternative To' Threads for Any Product
Every reddit alternative to thread naming a product you pick, across the past year. Full posts and links, so you read the objection in the writer's words.
Subreddit Search: Top Threads from One Community
A subreddit search over the past year's top posts, so you see what a community actually argues about. Full text and links. Vote counts are not returned.
Reddit Product Reviews for One Specific Model
Reddit product reviews for a named model, pulled by relevance: full post text, author, link, and the comment threads under each one.
Reddit AI Agents Discussion from r/LocalLLaMA
A month of reddit ai agents posts from r/LocalLLaMA, top first. Full write-ups and links, so you read the frontier chatter before it reaches the press.
cscareerquestions Salary and Offer Threads
Top cscareerquestions salary, offer and negotiation posts from the past year, full text included. Real numbers from people who took the offer.
Reddit Content Ideas from Top 'How To' Questions
Reddit content ideas straight from the month's top 'how to' posts in a niche subreddit. Real questions, full text, links. An editorial calendar with sources.
Reddit Data Breach Posts from the Last 24 Hours
Every reddit data breach post from the past day, newest first, with full text, links and the comments on each post.
Best Mechanical Keyboard Reddit Threads, Scraped
Best mechanical keyboard reddit threads pulled by relevance, with full post text and links. The picks argued in the replies are not part of the output.
Notion Reddit Threads from r/productivity, Past Year
Notion reddit discussion in r/productivity over the past year: full post text, author, date, link, and the replies underneath each thread.
r/MachineLearning LLM Posts, Pulled by Hot Sort
LLM threads from r/MachineLearning using Reddit's hot sort: title, post body, author, date, link. Upvote numbers are not in the feed this reads.
Reddit User Post History for Any Username
Pull a reddit user post history with the author: operator. Every post from one account, newest first, with body text, subreddit, link and comments.
Reddit Mentions of a Brand Inside One Subreddit
Track reddit mentions of a brand or product in one subreddit, newest first: post body, author, date, link and the comments where Reddit serves them.
Reddit Scraper: Search Any Keyword, Get Posts as JSON
Reddit scraper for any keyword. Post title, body, author, subreddit, date and link as JSON, no API key. Comments on most posts. No vote counts.
Ready-made automation using this tool
A finished workflow you can import into n8n and run — this tool does the data-gathering inside it. Free, and yours to change.
Collect what customers complain about into one board
Your customers already say what is wrong with your product — on Reddit, on review sites, in app stores. This reads one of those places, pulls out the actual complaint in their own words, groups the wording into consistent themes, and files it. Swap the source without rebuilding anything.
Related tools in Social Media Scrapers
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Reddit Video Scraper & Downloader
Download v.redd.it videos from any subreddit or Reddit user, with the audio joined back in. Get post details and dedupe. $0.03 per video record.
Telegram Channel Scraper
Scrape public Telegram channels with no bot token and no API key. Get post text, date, views, author, media links and subscriber count. $1.50 per 1,000.
Pinterest Search Scraper
Search Pinterest by keyword: pin title, description, image URL, destination link, pinner and board. No login. $1.60 per 1,000 pins.
Bluesky Scraper
Scrape Bluesky posts and profiles by handle, no login. Archive keyword search needs your own app password. $2.00 per 1,000 posts.
Mastodon Scraper
Scrape public Mastodon posts by hashtag, account or timeline: text, author, followers, engagement, media and tags. $1.50 per 1,000.
Lemmy Scraper
Scrape public Lemmy posts from any instance: title, body, author, score, votes, comments and permalink. Pick the host. $1.50 per 1,000 posts.
Where this tool sits
- Categories
- Social Media Scrapers
- Platforms
Reddit Search Scraper: keyword search across Reddit, or inside one subreddit
Type a query and it returns the posts that match, as rows. Title, author, subreddit, the full post text, the permalink and the posting time, with the comments too if you ask for them.
The honest part first. The keyless run gives you up to 100 posts per search, and the public feed it reads carries no vote data, so score, numComments, upvoteRatio and flair arrive as null. Everything else on the row is filled. Add your own free Reddit app credentials and those fields fill in and the search can page past 100.
| Input | A search query, optionally scoped to one subreddit |
| Output | One row per matching post |
| Ceiling | 100 posts per search, or up to 1,000 with your own Reddit app |
| Account needed | None by default |
| Price | $0.891 per 1,000 posts |
🔎 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 rather than parallel, 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 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. |
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. |
redditClientId, redditClientSecret | none | Your own free script app from reddit.com/prefs/apps. Fills the vote fields and pages past 100. |
notionConnector, notionParentId | none | Optional. Write each post into your Notion as well as the dataset. |
proxyConfiguration | off | Leave it alone. Only worth switching on for very large runs. |
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 | What it is |
|---|---|
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 path produced the row: the keyless feed, or 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 | Charged |
|---|---|---|
| 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. |
A fetch 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 paced us out on that post, http_404 means the thread was gone by the time we asked.
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 |
▶️ How to run it
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, and pick a Sort and 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?
$0.891 per 1,000 posts. Flat on every Apify plan, no volume tiers.
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.
💡 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,
and they are 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.
- 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 matching a keyword | This one |
| Everything posted in a subreddit or by one user | Reddit Scraper |
| Reddit videos as one MP4 with the sound | Reddit Video Scraper |
| Post text cleaned up for narration | Reddit Text Cleaner |
❓ 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 feed does not publish them. They are left empty on purpose, so an empty field never reads as a post with zero upvotes.
Do 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? Comment feeds are paced by Reddit, not by the actor. Roughly three minutes for 100 posts. Keep commentLimit low when you are pulling a lot of posts.
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.