Reddit Scraper With Full Comment Threads avatar

Reddit Scraper With Full Comment Threads

Pricing

from $5.99 / 1,000 results

Go to Apify Store
Reddit Scraper With Full Comment Threads

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

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

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 FieldsPrimary Use Case
postid, 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, scrapedAtSingle-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, scrapedAtFull discussion analysis, reply-chain reconstruction
more_comments (collapse marker)parentId, linkId, postId, depth, moreCount, moreChildIdsHonest disclosure of what was cut off by depth/breadth limits
comment_search_resultSame fields as comment, plus searchKeyword, searchSubreddit, searchAuthor, and (fallback path only) coverageNoteKeyword or author-scoped comment mining, no post URL needed
search (keyword post search)Same fields as post, plus searchQuery, searchCommunityTopic tracking, brand mention monitoring
subreddit_post (subreddit listing)Same fields as post, plus sourceSubreddit, listingSortSubreddit content monitoring
subreddit_info / top_subredditname, subreddit, title, description, subscribers, activeUsers, totalPosts, totalComments, subredditType, over18, createdAt, createdUtc, urlCommunity sizing and discovery
user (profile)author, username, numComments, numCommentsTotal, userSubmittedCount, userCommentsCount, postKarma, commentKarma, totalKarma, numPosts, earliestPostAt, lastPostAt, coverageNote, url, scrapedAtAuthor profiling
user_post (user's submitted posts)Same fields as post, plus userSubmittedPostType, usernamePer-author content history
user_comment (user's comments)Same fields as comment, plus usernamePer-author comment history
user_overviewauthor, totalItems, postsCount, commentsCount, url, scrapedAtQuick 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
}

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 null rather 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?

  1. Open the Actor's page in the Apify Console (or call it via the Apify API/client)
  2. 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 set keywordSearchTerms / commentSearchQueries instead
  3. Set the real query controls that apply to your mode: commentTreeMaxDepth, maxRepliesPerComment, and maxCommentsPerThread for comment trees; sortSearch, dateFilter, and timeFilter for search and listings
  4. Click Start (or trigger the run via the API)
  5. 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

ParameterRequiredTypeConstraintsDescription
redditTargetUrlsNoarrayeditor: stringListPost, subreddit, or user profile URLs. Wins over startUrls if both are set. Leave empty for keyword/comment-search-only mode.
startUrlsNoarrayeditor: stringListLegacy alias of redditTargetUrls, kept for backward compatibility with existing input JSON.

🌳 Full Comment Tree

ParameterRequiredTypeConstraintsDescription
commentTreeMaxDepthNointegermin 1, max 20, UI prefill 4Levels of nested replies per top-level comment (1 = top-level only). Legacy alias: maxCommentDepth.
maxCommentDepthNointegermin 1, max 20Legacy alias of commentTreeMaxDepth.
maxRepliesPerCommentNointegermin 1, max 200, UI prefill 20Max direct child replies kept per comment. Extra real replies become a more_comments marker, not a silent drop.
maxCommentsPerThreadNointegermin 1, max 5000, UI prefill 200Total comment nodes fetched per post before the tree is built. Legacy alias: limitCommentsPerPage.
limitCommentsPerPageNointegermin 1Legacy alias of maxCommentsPerThread.
skipCommentsNobooleandefault falseIf true, post URLs return post metadata only — comment fetch is skipped.

🔎 Standalone Comment Search

ParameterRequiredTypeConstraintsDescription
commentSearchQueriesNoarrayeditor: stringListKeywords/phrases searched inside comment bodies. Requires at least one subreddit or author scope below.
commentSearchSubredditsNoarrayeditor: stringListRestrict comment search (or list recent comments with no keyword) to these subreddits (no r/).
commentSearchAuthorsNoarrayeditor: stringListRestrict comment search to these usernames (no u/).
commentSearchMaxResultsNointegerdefault 50, min 1, max 2000Max comments collected per keyword/scope combination.

🤖 AI Sentiment & Topic Tagging (optional, off by default)

ParameterRequiredTypeConstraintsDescription
enableSentimentAnalysisNobooleandefault falseSends every collected comment to the selected AI model for sentiment, emotion, and topic-keyword tagging.
aiModelNostringdefault "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-latestProvider auto-detected from the model name prefix.
aiApiKeyNostringeditor: textfield, secretAPI 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)

ParameterRequiredTypeConstraintsDescription
keywordSearchTermsNoarrayeditor: stringList, UI prefill []Search phrases run against Reddit posts. Legacy alias: searchTerms.
searchTermsNoarrayeditor: stringListLegacy alias of keywordSearchTerms.
keywordSearchSubredditNostringeditor: textfield, UI prefill ""Restrict keyword post search to one subreddit (no r/). Legacy alias: searchCommunity.
searchCommunityNostringeditor: textfieldLegacy alias of keywordSearchSubreddit.
ignoreStartUrlsNobooleandefault falseWhen true, redditTargetUrls/startUrls are not scraped — only keyword post search and/or standalone comment search run.
sortSearchNostringdefault "new"; enum: relevance, new, top, commentsKeyword post search order. "Hot"/trending is not offered — it can't be honestly reproduced without a live ranking signal.
dateFilterNostringeditor: datepicker, absolute-or-relativee.g. "2025-01-15" or "2 weeks". Applies to keyword search, comment search, and subreddit listings. Legacy aliases: filterByDate, postDateLimit.
filterByDateNostringeditor: datepicker, absolute-or-relativeLegacy alias of dateFilter.
postDateLimitNostringeditor: datepicker, absoluteLegacy alias of dateFilter.
timeFilterNostringdefault "all"; enum: hour, day, week, month, year, allRelative time window, additive to dateFilter — whichever cutoff is more restrictive wins.
searchForPostsNobooleandefault trueInclude posts in keyword search results; the only search scope this Actor supports.
enableSearchNobooleandefault trueMaster switch for keyword post search.
enableSubredditNobooleandefault trueScrape subreddit URLs among redditTargetUrls for a post listing.
sortSubredditNostringdefault "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.
enablePostNobooleandefault trueScrape post URLs among redditTargetUrls for the post and its comment tree.
enableUserNobooleandefault trueScrape user profile URLs among redditTargetUrls.
enableSubredditInfoNobooleandefault trueFetch subreddit metadata for subreddits found in URLs or search scope.
skipUserPostsNobooleandefault falseIf true, user profile URLs are ignored entirely.
skipCommunityNobooleandefault falseIf true, subreddit metadata is not fetched (post listings still run).

⚙️ Limits & Pagination

ParameterRequiredTypeConstraintsDescription
maxTotalItemsNointegermin 1, UI prefill 100Cross-source running total — once this many rows are saved across every enabled mode, the run stops. Legacy alias: maxItemsToSave.
maxItemsToSaveNointegermin 1Legacy alias of maxTotalItems.
limitPostsPerPageNointegerdefault 25, min 1Max posts fetched per subreddit-listing or keyword-search page.
limitCommunityPagesNointegerdefault 3, min 1Max listing pages paginated per subreddit URL.
limitUserPagesNointegerdefault 3, min 1Max pages fetched per user for submitted posts and comments.
maxItemsPerUserNointegerdefault 20, min 1Max submitted posts and max comments fetched per user.
fetchUserProfileNobooleandefault trueFetch each user's aggregate profile (karma, post/comment counts).
fetchUserSubmittedNobooleandefault trueFetch posts submitted by each user.
fetchUserCommentsNobooleandefault trueFetch comments made by each user.
fetchUserOverviewNobooleandefault falseAdd a combined summary row (user_overview) per user.
fetchPopularSubredditsNobooleandefault falseFetch subreddits ranked by subscriber count. Turning on either this or fetchTopSubreddits enables the feature.
fetchTopSubredditsNobooleandefault falseLegacy alias (base actor's field name) — either it or fetchPopularSubreddits being on enables the feature.
fetchNewSubredditsNobooleandefault falseFetch recently created subreddits, sorted by creation date.
subredditNamePrefixNostringeditor: textfield, UI prefill ""Optional prefix to scope the top/newest subreddit lists (e.g. "ask").
maxSubredditsInfoNointegerdefault 25, min 1, max 100Max subreddits returned for the top/newest lists.
requestDelaySecondsNointegerdefault 1, min 0Seconds to wait between consecutive requests to the data source.

🌐 Proxy Settings

ParameterRequiredTypeConstraintsDescription
proxyConfigurationNoobjecteditor: 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. keywordSearchTerms only fires when enableSearch and searchForPosts are both true, keywords are set, and either ignoreStartUrls is true or redditTargetUrls/startUrls is empty. ignoreStartUrls: true makes 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 (redditTargetUrls over startUrls, commentTreeMaxDepth over maxCommentDepth, maxTotalItems over maxItemsToSave, dateFilter/filterByDate/postDateLimit fall back in that order). Don't mix values you expect to both apply.
  • Comment full-text search needs a scope. commentSearchQueries alone, with no commentSearchSubreddits or commentSearchAuthors, falls back to a secondary source that is disclosed as possibly not fully current via coverageNote on 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 comment rows, filter on depth and score, 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 keywordSearchTerms or commentSearchQueries, receives structured post/comment JSON back, and passes it to the model as grounded context — no scraping code in the agent itself.
  • 📊 Market and social researchers: run commentSearchQueries scoped to a subreddit or brand-relevant keyword, track sentiment/topics (when AI tagging is on) and score across repeated runs to watch opinion shift over time.
  • 🛠 Product teams: mine user_comment and comment rows from a support-adjacent subreddit for recurring topics, 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 ApifyClient
client = 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.

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.