Reddit Scraper With Full Comment Threads
Pricing
from $5.99 / 1,000 results
Reddit Scraper With Full Comment Threads
Reddit Scraper — Scrape Reddit posts with full comment threads, including nested replies, authors, scores, timestamps, post details, and engagement metrics. Extract structured conversation data for audience research, sentiment analysis, trend discovery, and community insights.
Pricing
from $5.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Reddit Scraper — Extract Posts, Users and Full Comment Threads
Reddit Scraper With Full Comment Threads pulls posts, complete nested comment trees, standalone comment search results, subreddits, and user activity from Reddit URLs, subreddits, or keywords — no Reddit login required. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. Comment trees are reconstructed to their real depth and breadth, with honest "more replies" markers instead of a flat, top-level-only page. Configure how deep to go, then run it once or schedule it to track a thread over time.
What is Reddit Scraper With Full Comment Threads?
It is a multi-mode Reddit data actor: give it a post, subreddit, or user URL, a search keyword, or a comment-search scope, and it returns typed JSON rows for whichever result types you enable. Its defining feature — and the one most Reddit scrapers skip — is full nested comment tree extraction: instead of returning only the first page of top-level comments, it walks the real reply hierarchy to a depth and breadth you set, and represents anything beyond that limit as a genuine "more replies" collapse marker with the real remaining count, never a fabricated one. No Reddit account, login, or OAuth app registration is required to run it.
Key capabilities:
- 🌳 Full nested comment trees for any post URL, with configurable max depth and max replies per comment
- 🔎 Standalone comment search by keyword, subreddit, and/or author — independent of any specific post
- 🔍 Keyword post search across all of Reddit or scoped to one subreddit, with sort order and date/time filters
- 📰 Subreddit listings (new or top, with an honestly-labeled "hot" approximation) and subreddit metadata
- 👤 User activity — profile, submitted posts, and comments, with a combined overview summary
- 🤖 Optional AI sentiment/topic tagging on comment text, off by default, using your own AI provider key
What data can you get with Reddit Scraper With Full Comment Threads?
The Actor returns one flat, typed JSON row per item — posts, comments, collapse markers, search results, subreddit records, and user rows all land in the same dataset, distinguished by a type field.
Result Type (type) | Extracted Fields | Primary Use Case |
|---|---|---|
post | id, title, body/selftext, author, subreddit, score, numComments, upvoteRatio, createdAt, createdUtc, url, permalink, linkUrl, isSelf, over18, linkFlairText, spoiler/isSpoiler, postHint, thumbnail, domain, stickied/isStickied, edited/isEdited, numCrossposts, totalAwards, gilded, isVideo, isOriginalContent, subredditSubscribers, sentiment, topics, scrapedAt | Single-post lookup, content analysis |
comment (in a comment tree) | id, parentId, linkId, postId, depth, isChild, body, author, subreddit, score, createdAt, createdUtc, url, permalink, distinguished, isSubmitter, sentiment, topics, scrapedAt | Full discussion analysis, reply-chain reconstruction |
more_comments (collapse marker) | parentId, linkId, postId, depth, moreCount, moreChildIds | Honest disclosure of what was cut off by depth/breadth limits |
comment_search_result | Same fields as comment, plus searchKeyword, searchSubreddit, searchAuthor, and (fallback path only) coverageNote | Keyword or author-scoped comment mining, no post URL needed |
search (keyword post search) | Same fields as post, plus searchQuery, searchCommunity | Topic tracking, brand mention monitoring |
subreddit_post (subreddit listing) | Same fields as post, plus sourceSubreddit, listingSort | Subreddit content monitoring |
subreddit_info / top_subreddit | name, subreddit, title, description, subscribers, activeUsers, totalPosts, totalComments, subredditType, over18, createdAt, createdUtc, url | Community sizing and discovery |
user (profile) | author, username, numComments, numCommentsTotal, userSubmittedCount, userCommentsCount, postKarma, commentKarma, totalKarma, numPosts, earliestPostAt, lastPostAt, coverageNote, url, scrapedAt | Author profiling |
user_post (user's submitted posts) | Same fields as post, plus userSubmittedPostType, username | Per-author content history |
user_comment (user's comments) | Same fields as comment, plus username | Per-author comment history |
user_overview | author, totalItems, postsCount, commentsCount, url, scrapedAt | Quick per-user activity summary |
🌳 Full nested comment trees
This is the section where this Actor earns its name. For every post URL you supply, it walks the archive's dedicated comment-tree endpoint and reconstructs the real parent → child hierarchy — merging two different shapes the source data can arrive in (flat sibling lists and Reddit-API-style nested replies) so no genuine reply is dropped. depth on each comment row tells you how deep it sits; parentId and postId let you rebuild the exact thread. When a branch has more real replies than your commentTreeMaxDepth or maxRepliesPerComment allows, it emits a more_comments row with a real moreCount and up to 50 real moreChildIds — never a fabricated "and more" placeholder.
{"type": "comment","isChild": true,"id": "kx7f2a1","parentId": "t1_kx7e991","linkId": "t3_1abcxyz","postId": "1abcxyz","depth": 2,"body": "This is the actual nested reply text.","author": "some_redditor","score": 14,"createdAt": "2026-06-01T14:22:03Z","sentiment": null,"topics": null}
🔎 Standalone comment search
Search comment text directly, without a post URL. Scope by subreddit and/or author (an unscoped full-text keyword search across all of Reddit is not offered by the primary data source and would time out, so at least one subreddit or author is required whenever a keyword is set — leaving both empty falls back to a secondary keyword-only source, and that fallback path is disclosed on the row via coverageNote). Rows arrive with searchKeyword, searchSubreddit, and searchAuthor recorded, so you know exactly which target produced each match.
Why not build this yourself?
Reddit's own unauthenticated .json endpoints return HTTP 403 on every request regardless of proxy tier — building a resilient direct scraper against Reddit today means either standing up an OAuth application (with its own rate limits and terms) or reverse-engineering a workaround that breaks the moment Reddit changes its blocking rules. This Actor already does that engineering work for you:
- A three-tier connection ladder (direct → datacenter proxy → residential proxy) that escalates automatically on a block or rate limit, and stays on the higher tier once it escalates
- Retry-with-backoff logic that distinguishes a hard block from a transient "under load" response and only retries the latter
- A dual-source fallback for unscoped keyword search, with the fallback path always disclosed on the row rather than presented as live data
- Full comment-tree reconstruction across two different reply-nesting shapes, with genuine (never fabricated) collapse counts
- A pluggable, multi-provider AI layer for optional sentiment/topic tagging that degrades to
nullrather than failing the run when no key is configured
None of that has to be built, maintained, or re-broken every time an upstream endpoint changes shape.
What is the difference between flat comment scraping and full comment tree extraction?
Flat comment scraping returns only the first page of top-level comments a post's listing view shows by default — typically a few dozen comments, with every reply chain beneath them collapsed and invisible. Full comment tree extraction walks the actual reply hierarchy: comment → reply → reply-to-reply, however deep the discussion goes, up to the limits you set.
The distinction matters because most of the substance in an active Reddit thread lives in the replies, not the top-level comments — sentiment shifts, corrections, follow-up questions, and the most-upvoted rebuttal are all nested. A tool that only returns top-level comments can't reconstruct who was replying to whom, can't measure how deep a disagreement went, and can't be used for reply-chain sentiment analysis.
This Actor returns both: a post row for the thread itself, and a flat list of comment rows carrying real depth and parentId values you can use to rebuild the tree, plus more_comments rows wherever a branch was capped. commentTreeMaxDepth (1–20) and maxRepliesPerComment (1–200) control how much of that tree you pull per run.
How to scrape Reddit with Reddit Scraper With Full Comment Threads?
- Open the Actor's page in the Apify Console (or call it via the Apify API/client)
- Add one or more Reddit URLs to
redditTargetUrls— a post URL (contains/comments/) for full comment-tree extraction, a subreddit URL, or a user profile URL — or leave it empty and setkeywordSearchTerms/commentSearchQueriesinstead - Set the real query controls that apply to your mode:
commentTreeMaxDepth,maxRepliesPerComment, andmaxCommentsPerThreadfor comment trees;sortSearch,dateFilter, andtimeFilterfor search and listings - Click Start (or trigger the run via the API)
- Download results as JSON or CSV from the run's dataset, or stream them via the Apify API as they're written
{"redditTargetUrls": ["https://www.reddit.com/r/AskReddit/comments/1abcxyz/some_title/"],"commentTreeMaxDepth": 4,"maxRepliesPerComment": 20,"maxCommentsPerThread": 200}
How to run multiple queries in one job
redditTargetUrls, keywordSearchTerms, and commentSearchQueries are all arrays — add multiple post/subreddit/user URLs or multiple search phrases in the Console's "+ Add"/"Bulk edit"/"Text file" input, or pass a JSON array via the API. Each URL and each keyword is processed in its own pass within the same run, sharing the single maxTotalItems budget across all of them.
⬇️ Input
All fields are optional — the input schema has no required parameters. Fields fall into six sections in the Apify Console: Reddit URLs, Full Comment Tree, Standalone Comment Search, AI Sentiment & Topic Tagging, Keyword Post Search (this section also groups most of the per-mode enable/disable toggles), and Limits & Pagination / Proxy Settings.
🔗 Reddit URLs
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
redditTargetUrls | No | array | editor: stringList | Post, subreddit, or user profile URLs. Wins over startUrls if both are set. Leave empty for keyword/comment-search-only mode. |
startUrls | No | array | editor: stringList | Legacy alias of redditTargetUrls, kept for backward compatibility with existing input JSON. |
🌳 Full Comment Tree
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
commentTreeMaxDepth | No | integer | min 1, max 20, UI prefill 4 | Levels of nested replies per top-level comment (1 = top-level only). Legacy alias: maxCommentDepth. |
maxCommentDepth | No | integer | min 1, max 20 | Legacy alias of commentTreeMaxDepth. |
maxRepliesPerComment | No | integer | min 1, max 200, UI prefill 20 | Max direct child replies kept per comment. Extra real replies become a more_comments marker, not a silent drop. |
maxCommentsPerThread | No | integer | min 1, max 5000, UI prefill 200 | Total comment nodes fetched per post before the tree is built. Legacy alias: limitCommentsPerPage. |
limitCommentsPerPage | No | integer | min 1 | Legacy alias of maxCommentsPerThread. |
skipComments | No | boolean | default false | If true, post URLs return post metadata only — comment fetch is skipped. |
🔎 Standalone Comment Search
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
commentSearchQueries | No | array | editor: stringList | Keywords/phrases searched inside comment bodies. Requires at least one subreddit or author scope below. |
commentSearchSubreddits | No | array | editor: stringList | Restrict comment search (or list recent comments with no keyword) to these subreddits (no r/). |
commentSearchAuthors | No | array | editor: stringList | Restrict comment search to these usernames (no u/). |
commentSearchMaxResults | No | integer | default 50, min 1, max 2000 | Max comments collected per keyword/scope combination. |
🤖 AI Sentiment & Topic Tagging (optional, off by default)
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
enableSentimentAnalysis | No | boolean | default false | Sends every collected comment to the selected AI model for sentiment, emotion, and topic-keyword tagging. |
aiModel | No | string | default "claude-haiku-4-5"; enum: claude-haiku-4-5, claude-sonnet-5, gpt-4o-mini, gpt-4o, gemini-2.0-flash-lite, gemini-2.0-flash, grok-3-mini, deepseek-chat, sonar, mistral-small-latest | Provider auto-detected from the model name prefix. |
aiApiKey | No | string | editor: textfield, secret | API key for the selected provider. If empty, the matching environment variable is checked (e.g. ANTHROPIC_API_KEY). If no key is found, sentiment/topics stay null and the run still completes. |
🔍 Keyword Post Search (this schema section also holds most per-mode toggles)
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
keywordSearchTerms | No | array | editor: stringList, UI prefill [] | Search phrases run against Reddit posts. Legacy alias: searchTerms. |
searchTerms | No | array | editor: stringList | Legacy alias of keywordSearchTerms. |
keywordSearchSubreddit | No | string | editor: textfield, UI prefill "" | Restrict keyword post search to one subreddit (no r/). Legacy alias: searchCommunity. |
searchCommunity | No | string | editor: textfield | Legacy alias of keywordSearchSubreddit. |
ignoreStartUrls | No | boolean | default false | When true, redditTargetUrls/startUrls are not scraped — only keyword post search and/or standalone comment search run. |
sortSearch | No | string | default "new"; enum: relevance, new, top, comments | Keyword post search order. "Hot"/trending is not offered — it can't be honestly reproduced without a live ranking signal. |
dateFilter | No | string | editor: datepicker, absolute-or-relative | e.g. "2025-01-15" or "2 weeks". Applies to keyword search, comment search, and subreddit listings. Legacy aliases: filterByDate, postDateLimit. |
filterByDate | No | string | editor: datepicker, absolute-or-relative | Legacy alias of dateFilter. |
postDateLimit | No | string | editor: datepicker, absolute | Legacy alias of dateFilter. |
timeFilter | No | string | default "all"; enum: hour, day, week, month, year, all | Relative time window, additive to dateFilter — whichever cutoff is more restrictive wins. |
searchForPosts | No | boolean | default true | Include posts in keyword search results; the only search scope this Actor supports. |
enableSearch | No | boolean | default true | Master switch for keyword post search. |
enableSubreddit | No | boolean | default true | Scrape subreddit URLs among redditTargetUrls for a post listing. |
sortSubreddit | No | string | default "new"; enum: new ("New (newest first)"), top ("Top (highest score)"), hot_approx ("Hot (approximated — recency-weighted score, not Reddit's live ranking)") | Order for subreddit post listings. |
enablePost | No | boolean | default true | Scrape post URLs among redditTargetUrls for the post and its comment tree. |
enableUser | No | boolean | default true | Scrape user profile URLs among redditTargetUrls. |
enableSubredditInfo | No | boolean | default true | Fetch subreddit metadata for subreddits found in URLs or search scope. |
skipUserPosts | No | boolean | default false | If true, user profile URLs are ignored entirely. |
skipCommunity | No | boolean | default false | If true, subreddit metadata is not fetched (post listings still run). |
⚙️ Limits & Pagination
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
maxTotalItems | No | integer | min 1, UI prefill 100 | Cross-source running total — once this many rows are saved across every enabled mode, the run stops. Legacy alias: maxItemsToSave. |
maxItemsToSave | No | integer | min 1 | Legacy alias of maxTotalItems. |
limitPostsPerPage | No | integer | default 25, min 1 | Max posts fetched per subreddit-listing or keyword-search page. |
limitCommunityPages | No | integer | default 3, min 1 | Max listing pages paginated per subreddit URL. |
limitUserPages | No | integer | default 3, min 1 | Max pages fetched per user for submitted posts and comments. |
maxItemsPerUser | No | integer | default 20, min 1 | Max submitted posts and max comments fetched per user. |
fetchUserProfile | No | boolean | default true | Fetch each user's aggregate profile (karma, post/comment counts). |
fetchUserSubmitted | No | boolean | default true | Fetch posts submitted by each user. |
fetchUserComments | No | boolean | default true | Fetch comments made by each user. |
fetchUserOverview | No | boolean | default false | Add a combined summary row (user_overview) per user. |
fetchPopularSubreddits | No | boolean | default false | Fetch subreddits ranked by subscriber count. Turning on either this or fetchTopSubreddits enables the feature. |
fetchTopSubreddits | No | boolean | default false | Legacy alias (base actor's field name) — either it or fetchPopularSubreddits being on enables the feature. |
fetchNewSubreddits | No | boolean | default false | Fetch recently created subreddits, sorted by creation date. |
subredditNamePrefix | No | string | editor: textfield, UI prefill "" | Optional prefix to scope the top/newest subreddit lists (e.g. "ask"). |
maxSubredditsInfo | No | integer | default 25, min 1, max 100 | Max subreddits returned for the top/newest lists. |
requestDelaySeconds | No | integer | default 1, min 0 | Seconds to wait between consecutive requests to the data source. |
🌐 Proxy Settings
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
proxyConfiguration | No | object | editor: proxy, prefill {"useApifyProxy": false} | Apify Proxy configuration. By default the Actor connects directly and automatically escalates to datacenter, then residential proxy, on a block or rate limit. |
Common pitfalls
- Keyword post search silently doesn't run if you also set a URL.
keywordSearchTermsonly fires whenenableSearchandsearchForPostsare both true, keywords are set, and eitherignoreStartUrlsis true orredditTargetUrls/startUrlsis empty.ignoreStartUrls: truemakes keyword search run but skips your URLs entirely — there is no single input that scrapes URLs and runs keyword search together; use two separate runs instead. - New field names always win over legacy ones when both are set (
redditTargetUrlsoverstartUrls,commentTreeMaxDepthovermaxCommentDepth,maxTotalItemsovermaxItemsToSave,dateFilter/filterByDate/postDateLimitfall back in that order). Don't mix values you expect to both apply. - Comment full-text search needs a scope.
commentSearchQueriesalone, with nocommentSearchSubredditsorcommentSearchAuthors, falls back to a secondary source that is disclosed as possibly not fully current viacoverageNoteon the row.
⬆️ Output
Every row is pushed to the dataset the moment its source finishes fetching — results stream in during the run rather than arriving in one bulk dump at the end. All rows share a type field that tells you which shape you're looking at (see the data coverage table above), plus common bookkeeping fields (sentiment, topics, scrapedAt) that are null/timestamped even on row types where AI tagging doesn't apply. Results can be downloaded from the dataset in JSON, CSV, Excel, or XML through the Apify Console or API — no actor-specific export step required.
Scraped results
Example of a post row followed by two nested comment rows and a collapse marker for the same thread — this is what one comment-tree pass looks like in the dataset:
[{"type": "post","isChild": false,"id": "1abcxyz","title": "What's a small kindness you never forgot?","body": "","selftext": "","author": "original_poster","subreddit": "AskReddit","score": 4821,"numComments": 612,"upvoteRatio": 0.94,"createdAt": "2026-05-28T09:12:44Z","createdUtc": 1780132364,"url": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/","permalink": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/","linkUrl": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/","isSelf": true,"over18": false,"linkFlairText": "","isSpoiler": false,"postHint": "","thumbnail": "self","domain": "self.AskReddit","isStickied": false,"isEdited": false,"numCrossposts": 2,"totalAwards": 3,"gilded": 0,"isVideo": false,"isOriginalContent": false,"subredditSubscribers": 45200000,"sentiment": null,"topics": null,"scrapedAt": "2026-08-15T10:03:11Z"},{"type": "comment","isChild": true,"id": "kx7e991","parentId": "t3_1abcxyz","linkId": "t3_1abcxyz","postId": "1abcxyz","depth": 0,"title": "","body": "A stranger paid for my groceries when my card declined.","author": "grateful_stranger","subreddit": "AskReddit","score": 312,"numComments": null,"createdAt": "2026-05-28T09:20:07Z","createdUtc": 1780132807,"url": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/kx7e991/","permalink": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/kx7e991/","distinguished": null,"isSubmitter": false,"sentiment": "positive","topics": "kindness, strangers, groceries","scrapedAt": "2026-08-15T10:03:12Z"},{"type": "comment","isChild": true,"id": "kx7f2a1","parentId": "t1_kx7e991","linkId": "t3_1abcxyz","postId": "1abcxyz","depth": 1,"title": "","body": "That happened to me too, restored my faith in people.","author": "some_redditor","subreddit": "AskReddit","score": 48,"numComments": null,"createdAt": "2026-05-28T09:31:55Z","createdUtc": 1780133515,"url": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/kx7f2a1/","permalink": "https://www.reddit.com/r/AskReddit/comments/1abcxyz/whats_a_small_kindness/kx7f2a1/","distinguished": null,"isSubmitter": false,"sentiment": "positive","topics": "gratitude, faith in people","scrapedAt": "2026-08-15T10:03:12Z"},{"type": "more_comments","isChild": true,"id": "","parentId": "t1_kx7e991","linkId": "t3_1abcxyz","postId": "1abcxyz","depth": 2,"title": "","body": "","moreCount": 37,"moreChildIds": ["kx7g003", "kx7g014", "kx7g02c"],"author": "","subreddit": "","score": null,"createdAt": "","url": "","scrapedAt": "2026-08-15T10:03:13Z"}]
How can I use the data extracted with Reddit Scraper With Full Comment Threads?
- 🧵 Community managers and moderators: pull a subreddit's or thread's full
commentrows, filter ondepthandscore, and spot the reply chains that are actually driving discussion instead of just the top-level comments. - 🤖 AI engineers and LLM developers: an agent issues a query against
keywordSearchTermsorcommentSearchQueries, receives structuredpost/commentJSON back, and passes it to the model as grounded context — no scraping code in the agent itself. - 📊 Market and social researchers: run
commentSearchQueriesscoped to a subreddit or brand-relevant keyword, tracksentiment/topics(when AI tagging is on) andscoreacross repeated runs to watch opinion shift over time. - 🛠 Product teams: mine
user_commentandcommentrows from a support-adjacent subreddit for recurringtopics, turning raw discussion into a feature-request or bug backlog.
How do you monitor a Reddit thread or subreddit over time?
Monitoring here means running the same post, subreddit, or keyword target on a schedule and diffing the results between runs rather than treating each run as a one-off snapshot. Because every row carries scrapedAt and createdAt, and comment rows carry stable id/parentId values, you can align two runs on id and compute what changed between them.
The fields worth diffing: score (upvote movement on a post or comment), numComments (post-level activity growth), moreCount on more_comments markers (whether a capped branch grew), and new comment rows that didn't appear in the previous run (new replies). If AI tagging is on, sentiment and topics let you watch whether the tone of a thread shifts as it grows, not just its size.
A typical workflow: schedule a run across a fixed set of post or subreddit URLs (or a keyword set) using an Apify Schedule, store each run's dataset, and compare the current run's rows against the previous run's on id — alert on new top-scoring comments, a jump in numComments, or a more_comments.moreCount that grew past a threshold you care about.
Integrate Reddit Scraper With Full Comment Threads and automate your workflow
Reddit Scraper With Full Comment Threads works with any language or tool that can send an HTTP request, through the Apify API.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"redditTargetUrls": ["https://www.reddit.com/r/AskReddit/comments/1abcxyz/some_title/"],"commentTreeMaxDepth": 4,"maxRepliesPerComment": 20,}run = client.actor("<store-username>/reddit-scraper-with-full-comment-threads").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["type"], item.get("id"), item.get("body", "")[:80])
Scheduled monitoring and delivery
The Actor itself has no built-in webhook or scheduling feature in its code — use the Apify platform's own mechanisms: an Apify Schedule to trigger repeated runs on a cron-style interval, and an Apify webhook (e.g. on ACTOR.RUN.SUCCEEDED) to notify your own endpoint or pipeline when a scheduled run's dataset is ready to pull.
⚖️ Is it legal to scrape Reddit results?
Yes — scraping publicly accessible Reddit content is generally lawful; this Actor only returns what any visitor can already see on Reddit's public post, comment, subreddit, and profile pages, without logging in. In hiQ Labs v. LinkedIn (9th Cir. 2019), the court held that scraping publicly accessible web data does not violate the Computer Fraud and Abuse Act — a precedent frequently cited for public-data scraping generally, not specific to Reddit. Because posts, comments, and user profiles are tied to (often pseudonymous) individual Reddit accounts, this crosses into personal-data territory, so GDPR and CCPA principles apply when you collect or store EU or California residents' data — minimize what you retain and honor deletion/access requests. Scraping for AI training and scraping for operational monitoring carry different risk profiles and different platform-terms exposure. Consult your legal team for commercial use cases involving bulk data storage.
❓ Frequently asked questions
Can I restrict a search or scrape to a specific subreddit or author?
Yes. keywordSearchSubreddit scopes keyword post search to one subreddit; commentSearchSubreddits and commentSearchAuthors scope standalone comment search to one or more subreddits and/or usernames (comment full-text search requires at least one of these).
How do I control the order or freshness of results?
sortSearch orders keyword post search (relevance, new, top, comments); sortSubreddit orders subreddit listings (new, top, hot_approx); dateFilter (absolute date or relative like "2 weeks") and timeFilter (hour through year, or all) both filter by recency and combine additively — whichever cutoff is more restrictive wins.
How does the Actor handle blocking and rate limits?
It starts on a direct connection and automatically escalates to a datacenter proxy, then a residential proxy, if it hits a block or rate limit — staying on the higher tier once escalated. Requests that come back with a transient "under load" response are retried with backoff; hard blocks trigger escalation instead of endless retries.
Does the Actor extract full comment threads, not just top-level comments?
Yes. Set commentTreeMaxDepth (1–20) and maxRepliesPerComment (1–200) and the Actor walks the real nested reply structure for each post, returning comment rows with genuine depth and parentId values. Where a branch has more real replies than your limits allow, a more_comments row reports the true remaining count via moreCount, never a fabricated one.
How many results does the Actor return per run?
It stops once maxTotalItems rows (default 100, no maximum) have been saved across every enabled source combined. Within that budget, maxCommentsPerThread (max 5000) caps comment fetch per post, commentSearchMaxResults (max 2000) caps standalone comment search per target, and limitPostsPerPage × limitCommunityPages bounds each subreddit listing.
Do the legacy field names from the base actor still work?
Yes — startUrls, maxCommentDepth, limitCommentsPerPage, searchTerms, searchCommunity, filterByDate, postDateLimit, maxItemsToSave, and fetchTopSubreddits are all still accepted for backward compatibility with existing input JSON. Where both a new and legacy key are set, the new key wins (except fetchPopularSubreddits/fetchTopSubreddits, where either being on enables the feature).
Why didn't keyword search run even though I set keywords?
Keyword post search only fires when enableSearch and searchForPosts are both true, keywordSearchTerms is set, and either ignoreStartUrls is true or redditTargetUrls/startUrls is empty. If you supply URLs without ignoreStartUrls, the keyword search is skipped for that run.
How do I monitor a thread or subreddit over time?
Schedule repeated runs of the same target using an Apify Schedule, then diff consecutive runs' rows on id, comparing score, numComments, and more_comments.moreCount to see what grew or shifted between runs.
Does this work with Claude, ChatGPT, and other AI agent frameworks?
There's no dedicated MCP server for this Actor. It's callable as a standard HTTP endpoint via the Apify API from any agent framework that can make an HTTP request — an agent issues a run with a query or URL, waits for the dataset, and uses the returned JSON as grounded context for its answer.
Can I use this without managing proxies or a Reddit account?
Yes. No Reddit login, OAuth app, or API key is required to run it — the Actor's own proxy escalation ladder handles blocking, and by default it starts on a direct connection with Apify Proxy as an automatic fallback. The only optional credential is your own AI provider key, and only if you turn on sentiment/topic tagging.
💬 Your feedback
Found a bug, or is a field missing that you need? Let us know through the Actor's page on the Apify Store (Issues tab) or the Scrapier support channel — it helps prioritize fixes and shows the Actor is actively maintained.