Reddit Search and Thread Scraper
Last updated October 30, 2026
Search Reddit by keyword and subreddit, read subreddits, or read threads with comments. One row per post and comment: title, text, author, subreddit, date, link, and the search term it matched. No login, no Reddit API key. CSV or Clay ready.
Features
- Keyword search across Reddit or inside the subreddits you list.
- A result is kept only when your term is in the title or text, and dropped results aren't charged.
- Threads with their top comments, at the reply depth you pick.
- Only new results on a schedule, plus one free summary row per query.
- Pay per event: Post row at $0.0015.
- Pay per event: Comment row at $0.0015.
Input
search_termsarrayoptionalKeywords to search Reddit for, one per line. With subreddits, each term is searched inside each subreddit; without, across all of Reddit. Up to 50 searches per run (terms times subreddits).
subredditsarrayoptionalSubreddit names (sales, r/sales, or a subreddit URL), one per line. With search terms, the search runs inside these subreddits. Without search terms, the newest posts of each subreddit are read (see Subreddit sort).
thread_urlsarrayoptionalReddit thread URLs, for example https://www.reddit.com/r/sales/comments/1abc23/title/. Each thread returns its post and its comments, up to Max comments per thread. Up to 200 per run.
sortstringoptionalHow Reddit orders search results: new (default, newest first), relevance, top, comments (most commented), or hot.
subreddit_sortstringoptionalUsed when subreddits are given without search terms: new (default), hot, top, or rising.
time_windowstringoptionalReddit's own time filter for searches and for the top subreddit sort: hour, day, week, month (default), year, or all.
since_daysstringoptionalOptional. Drop posts older than this many days, by the date the post was published. 0 or empty: no date limit beyond the time window.
max_posts_per_querystringoptionalAt most this many posts per search or subreddit, up to 1,000. Search results without the search term do not count; the actor reads up to 10 pages of 100 results to fill the count.
require_term_matchstringoptionalOn (default): a search result is kept only when the search term is in the post's title or text, its words next to each other and in order (case and punctuation ignored, so cold email matches Cold-email and cold emails). Results Reddit returns for other reasons are dropped and not charged. Off: every result Reddit returns is kept.
include_commentsstringoptionalOn: each post found by a search or a subreddit read also returns its comments as rows, up to Max comments per thread, one extra page read per post. Off (default): posts only. Thread URLs always return their comments.
max_comments_per_threadstringoptionalAt most this many comments per thread, top comments first, up to 500.
comment_depthstringoptionalHow many reply levels to read under each top level comment, 1 to 10. Default 3.
only_newstringoptionalOn: a post or comment an earlier run already returned for the same query is skipped and not charged, so a scheduled run returns only new posts. The ids are kept in a key-value store in your own Apify account. Off (default): every result is returned.
state_keystringoptionalOptional. A name for the only new results memory, so two schedules keep separate memories.
max_charge_usdstringoptionalOptional. The run stops before a charge that would pass this amount. Summary rows are always returned.
proxy_modestringoptionalauto (default): requests go through the Apify proxy pool, and a request the pool cannot get through is retried on residential addresses. residential: every request uses residential addresses. A reliability setting only; it does not change what you pay.
Output schema
{
"row_type": "string",
"query_type": "string",
"query": "string",
"subreddit": "string",
"post_id": "string",
"comment_id": "string",
"title": "string",
"body": "string",
"author": "string",
"author_url": "string",
"post_url": "string",
"comment_url": "string",
"link_url": "string",
"published_at": "string",
"updated_at": "string",
"matched_terms": "array",
"comments_read": "integer",
"is_new": "boolean",
"posts_found": "integer",
"rows_delivered": "integer",
"skipped_seen": "integer",
"skipped_unmatched": "integer",
"row_status": "string",
"error_reason": "string",
"billable_events_json": "string",
"scraped_at": "string"
}Pricing
| Event | Free plan price |
|---|---|
| Post row | $0.0015 |
| Comment row | $0.0015 |
| Actor Start | $0.003144 |
Pay per event on the Apify platform. Paid Apify plans pay less per event. No subscription, no seat license.
On the Apify free plan the actor stops at $1.50 of charges a month, about 1,000 post or comment rows. Any paid Apify plan removes the cap.
Limits
- Upvote scores, comment counts, awards, and flair are not in Reddit's public feeds, so the rows do not carry them.
- The actor reads at most 10 pages of 100 results per query. A narrow term with a strict match can return fewer posts than Max posts per query; the summary row says how many results were read and how many were dropped.
- Posts in private subreddits are not in Reddit's public feeds, so they are not returned.
- A deleted author reads [deleted], and a removed post's text is empty.
- Comments come top first. Very long threads return the top comments up to Max comments per thread, not every reply.