Reddit Posts Search Scraper avatar

Reddit Posts Search Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Reddit Posts Search Scraper

Reddit Posts Search Scraper

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperX

ScraperX

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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 permalinkComment authorPer-post success flag
Title and full body textComment bodyPrecise error message on failure
AuthorComment scorePer-post processing time
Score (net upvotes)Creation timestampProxy tier escalation in the log
Comment countNested replies, recursively
SubredditConfigurable 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. maxPosts is 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/technology and https://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 replies array, recursively β€” the discussion structure survives into your dataset.
  • Comments are optional. maxComments: 0 gives 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 exact error_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 β€” rising plus 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

  1. You list sources β€” keywords, subreddits, or full Reddit URLs, one per line.
  2. Each source is resolved: subreddits and URLs are read as listings; keywords run as Reddit searches.
  3. Posts are queued and processed in parallel, with the global maxPosts cap enforced across the whole run.
  4. Comments are fetched per post up to maxComments, with replies nested inside each comment.
  5. On a block, the proxy tier escalates and the request is retried.
  6. Each post is pushed to the dataset as it completes, successful or not.

Quick start

  1. Open the Actor and add your sources β€” e.g. artificial intelligence, r/technology.
  2. Set Maximum Posts (total) β€” start with 25–50.
  3. Set Maximum Comments per Post β€” use 0 for a fast first look.
  4. Pick a Sort Order and, for Top/Rising, a Time Filter.
  5. 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

FieldTypeDefaultDescription
startUrlsarrayβ€” (required)Any mix of full Reddit URLs, subreddit names (news, r/news) and search keywords. One entry per line; each source is scraped independently.
sortOrderstringtophot (trending now), new (most recent), top (highest scoring), rising (gaining traction).
maxPostsinteger10Hard cap on total posts across all sources combined (1–10,000). The run stops as soon as this many posts are collected.
maxCommentsinteger10Comments per post (0–1000). 0 skips comments entirely β€” much faster.
timeFilterstringweekhour, day, week, month, year, all. Applies to top and rising; ignored for hot and new.
proxyConfigurationobjectoffOptional. 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 and maxPosts: 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.

FieldTypeDescription
post_idstringReddit post ID.
titlestringPost title.
bodystringSelf-text body.
authorstringPoster's Reddit username.
subredditstringSubreddit the post belongs to.
scorenumberNet upvotes.
num_commentsnumberTotal comments Reddit reports.
permalinkstringReddit permalink path.
image_urlstringExternal / media URL the post points to.
thumbnail_urlstringThumbnail image URL.
created_utcnumberCreation timestamp (Unix, UTC).
commentsarray{ author, body, score, created_utc, replies[] }, nested recursively.
successbooleanWhether the post was scraped successfully.
error_messagestringFailure reason when success is false.
processing_timenumberSeconds 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 ApifyClient
client = 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

  • maxPosts is a run-wide total (max 10,000), unlike per-source limits in other scrapers. Plan your source list accordingly.
  • timeFilter only applies to top and rising β€” Reddit ignores it for hot and new.
  • Comments cost time, not rows. Very high maxComments values 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: false include a precise error_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.


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.