Reddit Posts Search Scraper
Pricing
from $3.99 / 1,000 results
Reddit Posts Search Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperX
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Reddit Posts Search Scraper β Fast Parallel Reddit Search with Full Comment Trees
Search Reddit by keyword, subreddit or URL and pull back up to 10,000 posts per run with their full comment threads. Built for speed: posts are processed in parallel, so a large keyword sweep finishes in a fraction of the time a sequential scraper would take.
No Reddit API key, no browser, no login. Just sources, a total cap, and a sort mode.
What you get
| π Post data | π¬ Comments | π Diagnostics |
|---|---|---|
| Post ID and permalink | Comment author | Per-post success flag |
| Title and full body text | Comment body | Precise error message on failure |
| Author | Comment score | Per-post processing time |
| Score (net upvotes) | Creation timestamp | Proxy tier escalation in the log |
| Comment count | Nested replies, recursively | |
| Subreddit | Configurable limit per post | |
| Image URL and thumbnail | ||
| Creation timestamp (UTC) |
Key features
- Parallel processing. Posts are fetched concurrently rather than one after another β the single biggest difference in wall-clock time on large runs.
- One total cap, not per source.
maxPostsis a hard ceiling across all sources combined (up to 10,000). The run stops the moment it hits that number, so your budget is predictable no matter how many keywords you throw in. - Keywords, subreddits and URLs together.
artificial intelligence,r/technologyandhttps://www.reddit.com/r/news/can all sit in the same input list; each source is scraped independently. - Full comment trees. Every comment carries its own
repliesarray, recursively β the discussion structure survives into your dataset. - Comments are optional.
maxComments: 0gives a much faster metadata-only pass; up to 1,000 per post when you need depth. - Four sort modes with a time window. Hot, New, Top and Rising; the time filter applies to Top and Rising and is ignored for Hot and New β stated plainly so you are never misled.
- Smart proxy fallback. No proxy β datacenter β residential, escalating automatically when Reddit blocks a request.
- Failures are visible, not silent. Posts that cannot be fetched are recorded with
success: false, the exacterror_message, and how long the attempt took.
Use cases
- Large-scale keyword monitoring β sweep every mention of a brand, product or topic across Reddit in one run.
- Social listening at volume β thousands of posts with their comment threads, ready for sentiment analysis.
- Market & customer research β capture how a whole community talks about a problem you solve.
- Content and SEO research β the top posts for a keyword are a ranked list of what an audience actually wants.
- Trend detection β
risingplus a short time window catches topics while they are still climbing. - Competitive intelligence β track competitor mentions and read the replies for unfiltered opinions.
- Lead generation β find people asking for recommendations in your category.
- Research datasets β build large, timestamped corpora of public discussion with engagement metrics attached.
How it works
- You list sources β keywords, subreddits, or full Reddit URLs, one per line.
- Each source is resolved: subreddits and URLs are read as listings; keywords run as Reddit searches.
- Posts are queued and processed in parallel, with the global
maxPostscap enforced across the whole run. - Comments are fetched per post up to
maxComments, with replies nested inside each comment. - On a block, the proxy tier escalates and the request is retried.
- Each post is pushed to the dataset as it completes, successful or not.
Quick start
- Open the Actor and add your sources β e.g.
artificial intelligence,r/technology. - Set Maximum Posts (total) β start with 25β50.
- Set Maximum Comments per Post β use
0for a fast first look. - Pick a Sort Order and, for Top/Rising, a Time Filter.
- Click Start and export the Output tab as JSON (recommended) or CSV.
Minimal input
{"startUrls": ["https://www.reddit.com/r/news/"],"sortOrder": "top","timeFilter": "week","maxPosts": 50,"maxComments": 10}
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | β (required) | Any mix of full Reddit URLs, subreddit names (news, r/news) and search keywords. One entry per line; each source is scraped independently. |
sortOrder | string | top | hot (trending now), new (most recent), top (highest scoring), rising (gaining traction). |
maxPosts | integer | 10 | Hard cap on total posts across all sources combined (1β10,000). The run stops as soon as this many posts are collected. |
maxComments | integer | 10 | Comments per post (0β1000). 0 skips comments entirely β much faster. |
timeFilter | string | week | hour, day, week, month, year, all. Applies to top and rising; ignored for hot and new. |
proxyConfiguration | object | off | Optional. Smart fallback: no proxy β datacenter β residential when Reddit blocks. |
Note on
maxPosts: it is a run total, not a per-source limit. With five keywords andmaxPosts: 100, you get 100 posts overall β not 500. This makes cost predictable; add sources freely without multiplying your bill.
Output data
One row per post.
| Field | Type | Description |
|---|---|---|
post_id | string | Reddit post ID. |
title | string | Post title. |
body | string | Self-text body. |
author | string | Poster's Reddit username. |
subreddit | string | Subreddit the post belongs to. |
score | number | Net upvotes. |
num_comments | number | Total comments Reddit reports. |
permalink | string | Reddit permalink path. |
image_url | string | External / media URL the post points to. |
thumbnail_url | string | Thumbnail image URL. |
created_utc | number | Creation timestamp (Unix, UTC). |
comments | array | { author, body, score, created_utc, replies[] }, nested recursively. |
success | boolean | Whether the post was scraped successfully. |
error_message | string | Failure reason when success is false. |
processing_time | number | Seconds spent on this post. |
Example output
{"post_id": "1abcdef","title": "Which AI tools have actually stuck in your workflow?","body": "Curious what people still use six months later, not just what they tried once.","author": "example_user","subreddit": "artificial","score": 3120,"num_comments": 487,"permalink": "/r/artificial/comments/1abcdef/which_ai_tools_have_actually_stuck/","image_url": "","thumbnail_url": "https://b.thumbs.redditmedia.com/β¦","created_utc": 1786451234,"comments": [{"author": "another_user","body": "Transcription and summarisation. Everything else fell away.","score": 402,"created_utc": 1786454321,"replies": [{"author": "third_user","body": "Same here β which one are you using?","score": 61,"created_utc": 1786455000,"replies": []}]}],"success": true,"error_message": null,"processing_time": 0.87}
Illustrative values β a live run returns current Reddit data.
Usage examples
Wide keyword sweep with a predictable budget
{"startUrls": ["project management software","time tracking app","team collaboration tool"],"maxPosts": 500,"maxComments": 15,"sortOrder": "top","timeFilter": "month"}
Brand monitoring, newest first
{"startUrls": ["your brand name"],"sortOrder": "new","maxPosts": 200,"maxComments": 25}
Save as a Task, attach a daily Schedule, and deduplicate on post_id.
Catch rising topics early
{"startUrls": ["r/startups", "r/SaaS", "r/entrepreneur"],"sortOrder": "rising","timeFilter": "day","maxPosts": 100,"maxComments": 0}
Maximum-speed metadata harvest
{"startUrls": ["r/all"],"sortOrder": "hot","maxPosts": 5000,"maxComments": 0}
Deep discussion analysis
{"startUrls": ["https://www.reddit.com/r/AskReddit/"],"sortOrder": "top","timeFilter": "year","maxPosts": 50,"maxComments": 500}
Run it from your own code
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperx/reddit-posts-search-scraper").call(run_input={"startUrls": ["artificial intelligence", "r/technology"],"sortOrder": "top","timeFilter": "week","maxPosts": 200,"maxComments": 10,})for post in client.dataset(run["defaultDatasetId"]).iterate_items():if post["success"]:print(post["score"], "|", post["subreddit"], "|", post["title"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperx/reddit-posts-search-scraper').call({startUrls: ['artificial intelligence'],maxPosts: 200,maxComments: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL
curl -X POST "https://api.apify.com/v2/acts/scraperx~reddit-posts-search-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrls":["artificial intelligence"],"maxPosts":200,"maxComments":10}'
Integrations
Push results into Google Sheets, Airtable, Slack, Make, Zapier, Google Drive or your own endpoint via webhooks, and use Schedules for continuous keyword monitoring.
Pricing
Pay-per-event: a small Actor-start charge plus a charge per post row delivered. Comments are nested inside the post row, so raising maxComments does not increase the number of billed rows β maxPosts is the cost lever, and because it is a run-wide total you can add as many sources as you like without multiplying the bill.
Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run.
Limits & good to know
maxPostsis a run-wide total (max 10,000), unlike per-source limits in other scrapers. Plan your source list accordingly.timeFilteronly applies totopandrisingβ Reddit ignores it forhotandnew.- Comments cost time, not rows. Very high
maxCommentsvalues lengthen runs considerably. - Reddit rate-limits aggressively. For big runs, enable Apify Proxy up front instead of waiting for the fallback.
- Only public subreddits and posts are accessible; private, quarantined and banned communities are not.
- Deleted or removed content is returned exactly as Reddit serves it (
[deleted],[removed]). - Rows with
success: falseinclude a preciseerror_messageβ useful for retrying just the failures. - Default run options are 4 GB memory and a 1-hour timeout β raise the timeout for deep comment runs.
FAQ
How is this different from a plain subreddit scraper?
Two things: posts are processed in parallel for speed, and maxPosts is a single run-wide cap rather than a per-source limit β so many keywords cost the same as one.
Do I need a Reddit account or API key? No. It reads public Reddit data without authentication.
Can I search all of Reddit by keyword?
Yes β put the keyword in startUrls as plain text.
Do I get nested replies?
Yes. Each comment has a replies array containing its child comments, recursively.
How do I make it as fast as possible?
Set maxComments: 0. Comment fetching is the main cost in run time.
Why is my time filter ignored?
Because sortOrder is hot or new. Reddit only applies a window to top and rising.
Do I need proxies? Not to start β the Actor escalates automatically. Enable Apify Proxy in advance for large runs.
Which export format should I use?
JSON to keep the comment trees; CSV works well with maxComments: 0.
Legal & responsible use
This Actor collects only publicly available Reddit content β the same posts and comments any visitor can read without logging in. It does not log in, vote, post, or access private communities. Usernames and content belong to their authors and may constitute personal data: comply with Reddit's User Agreement, copyright, and GDPR or comparable regulations when processing it.
Support
Need extra fields, higher concurrency, or a custom Reddit monitoring pipeline? Open an issue on the Issues tab of this Actor.