Reddit Post Comments Scraper
Pricing
from $2.00 / 1,000 results
Reddit Post Comments Scraper
Scrape every comment and nested reply from any Reddit post or subreddit, no API key or login needed. Get a transparent coverage report showing exactly how complete each thread scrape is, plus filters by score, date, and keyword.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Data Minds
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
16 hours ago
Last modified
Categories
Security
Limited permissionsShare
What is Reddit Post Comments Scraper?
Reddit Post Comments Scraper is a Reddit comments scraper that collects every comment and nested reply from Reddit posts. Paste post links, or let it find posts through subreddits, a keyword search or usernames, and get one dataset row per comment with author, score, depth, timestamps and permalink. Results cost $0.003 per result on the Free plan and $0.002 on Gold, plus platform usage.
Just enter your post links and click Start. No coding needed, and the input has no field for a Reddit login or API key. Use it for:
- Reddit sentiment analysis: collect all comments under product, brand or topic threads and run your own sentiment analysis on the plain-text bodies.
- Reddit market research: see how people talk about a niche across subreddits and spot pain points, then narrow the comments by keyword, author, date range or minimum score.
- Customer feedback research: voice of customer research from complaints and feature requests in threads of your category, with the parent post's title and text on every row.
- Reddit brand monitoring and competitor research: run the same searches on a schedule and compare what people say about you and your competitors over time.
- Reddit comments dataset for AI and LLM pipelines: Reddit data for LLM work and AI training, with clean text, Markdown bodies and an optional ancestor chain per comment. Choose a Reddit comment tree JSON with one nested tree per post, or turn a thread into Markdown text.
Because it runs on the Apify platform, you can also call it through the API, schedule runs, connect it to other apps with integrations, and export datasets as JSON, CSV, Excel, XML or HTML.
What can Reddit Post Comments Scraper do?
- ๐ Scrape comments from post links in the usual Reddit link formats, including short links and share links.
- ๐ Find posts for you from subreddits, a keyword search (optionally inside one subreddit) or usernames, with sort order and time filter.
- ๐ฒ Collect full threads with this Reddit comments scraper: nested replies, hidden "load more comments" sections and an optional completeness pass.
- ๐ฏ Filter Reddit comments by keywords, authors, minimum score, date range and reply depth, and skip deleted or removed comments.
- ๐ฆ Shape the output as flat rows, with post info on every row, a separate post row, an ancestor chain or a nested tree.
- โ Check coverage with a per-post report that compares the comments collected with the comment count Reddit shows.
What data can Reddit Post Comments Scraper extract?
Every dataset row is one comment. These are the fields saved for each comment, named exactly as in the dataset.
Comment
| Label | Field | What it holds |
|---|---|---|
| ๐ Comment ID | comment_id, comment_fullname | Comment identifiers |
| ๐ฌ Text | body, body_plain | Markdown text and plain text without formatting or quoted lines |
| ๐ HTML | body_html | Rendered HTML, only when Include raw comment HTML is on |
| โญ Score | score, is_score_hidden | Upvote score, empty when Reddit hides it |
| ๐ Link | permalink | Link to the comment |
| ๐ Subreddit | subreddit, post_id | Where the comment was posted and its post |
Author and position
| Label | Field | What it holds |
|---|---|---|
| ๐ค Author | author, author_fullname, author_flair | Username, account identifier and flair text |
| โ Role | is_op, distinguished, is_stickied | Whether the author is the post author, moderator or admin marks, pinned status |
| ๐ฒ Thread position | parent_fullname, parent_id, depth | Parent comment and nesting level, 0 for top-level |
| ๐ถ Reply counts | num_direct_replies, num_children | Direct replies and all descendants collected |
| ๐ช Ancestor chain | thread_path | Parent chain with comment_id, author and body_plain, only when Include the ancestor chain is on |
| ๐ Author karma | author_post_karma, author_comment_karma | Only when Look up author karma is on |
Time and status
| Label | Field | What it holds |
|---|---|---|
| ๐ Posted | created_utc, created_at | Unix time and ISO time |
| ๐ Edits | is_edited, edited_at | Whether and when the comment was edited |
| ๐ State | is_deleted, is_removed | Deleted or removed flags |
| ๐ Scrape time | scraped_at | When the row was saved |
| ๐งญ Origin | data_source | Where the row was read from |
Parent post (repeated on every comment row when Attach post info to every comment is on, which is the default)
| Label | Field | What it holds |
|---|---|---|
| ๐ฐ Title and text | post_title, post_selftext, post_fullname | Post title, body text and identifier |
| ๐ Links | post_url, post_link | Post link and the link the post points to |
| ๐ค Author | post_author, post_author_fullname | Post author |
| โญ Engagement | post_score, post_num_comments, post_num_crossposts | Score, Reddit's comment count and crossposts |
| ๐ท Labels | post_flair, post_domain, post_is_nsfw, post_is_spoiler, post_is_oc | Flair, domain and content flags |
| ๐ Dates | post_created_utc, post_created_at | Post time as Unix time and ISO time |
Separate post row (only when Emit the post as its own row is on)
| Label | Field | What it holds |
|---|---|---|
| ๐ฐ Post fields | post_id, post_title, post_selftext_plain and the other post_* fields | The post itself |
| ๐ท Row type | record_type | Always post |
| โ Coverage report | _meta | Comments reported by Reddit, comments collected, coverage_pct, comments kept after filters, completeness flags |
Note: Fields can be empty or missing.
body_html,thread_path, the karma fields and thepost_*fields appear only when the matching input is on.scoreis empty when Reddit hides it, andauthor_flair,distinguishedandedited_atare empty when they do not apply.
What data can't Reddit Post Comments Scraper extract?
- Comment awards, images and other media attached to comments are not saved.
- Private, removed or unavailable posts return no comments.
- Author profile data beyond post and comment karma is not saved.
For other Reddit data, try the scrapers in the Other Reddit scrapers section.
How to scrape Reddit comments
Reddit Post Comments Scraper is built for an easy start, even if you have never extracted data from the web.
- Create a free Apify account with your email.
- Open Reddit Post Comments Scraper.
- Paste one or more Reddit post links into Reddit post URLs (
urls). To discover posts instead, addsubreddits,searchQueryorusernames. - Choose your comment settings, such as
commentSort,maxCommentsPerPostand any filters. - Click Start and follow the status message, which shows how many rows are saved.
- Open the Output tab to view the comments. The
run-summaryrecord holds the coverage report for each post. - Download the dataset as JSON, CSV, Excel, XML or HTML.
How much does it cost to scrape Reddit comments?
Reddit Post Comments Scraper uses a pay-per-event model: you pay for each saved result, and platform usage is billed in addition. A result is one saved dataset row. A separate post row or a nested tree row also counts as one result.
| Plan | Price per result | Price per 1,000 results |
|---|---|---|
| Free | $0.003 | $3.00 |
| Bronze | $0.0027 | $2.70 |
| Silver | $0.0024 | $2.40 |
| Gold | $0.002 | $2.00 |
Each run also charges a start event of $0.00005 per GB of memory, with a minimum of one event. The default memory is 1 GB (1024 MB), so a run starts with one event, which is $0.00005.
For example, scraping 5,000 comments on the Silver plan costs 5,000 x $0.0024 = $12.00 for results, plus platform usage and the start event. See the pricing tab for all events.
Is scraping Reddit comments free?
You can start for free. The $5 monthly credit on the Apify Free plan covers about 1,666 results at the Free price of $0.003, before platform usage. Higher plans pay less per result, down to $0.002 on Gold. You can also set a maximum spend per run, and the Actor stops cleanly and keeps the rows already saved.
Input
The only required field is Reddit post URLs (urls). Set the input in the Actor's interface or send it as JSON through the API. This example scrapes one post:
{"urls": ["https://www.reddit.com/r/Python/comments/1v7tfx9/python_automations_are_so_much_better_than_ai/"],"maxPostsPerSource": 10,"proxyConfiguration": {"useApifyProxy": false}}
See the input tab for the full description of every field.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | array | Yes | none | Reddit post links to scrape. Direct links always scrape in full. |
subreddits | array | No | [] | Subreddits to pull posts from. |
searchQuery | string | No | empty | Find posts matching this text. |
searchInSubreddit | string | No | empty | Limit the search to one subreddit. |
usernames | array | No | [] | Scrape the posts these users commented in. |
subredditSort | string | No | hot | Post order for subreddits: hot, new, top, rising, controversial. |
searchSort | string | No | relevance | Search order: relevance, hot, top, new, comments. |
subredditTimeFilter | string | No | week | Time window for top, controversial and search: hour, day, week, month, year, all. |
maxPostsPerSource | integer | No | 10 | Posts to pull from each subreddit, search or username. Direct links ignore it. |
commentSort | string | No | top | Comment order: top, best, new, controversial, old, qa. |
maxCommentsPerPost | integer | No | 0 | Maximum comments saved per post. 0 means unlimited. |
maxDepth | integer | No | 0 | Reply levels to keep. 1 keeps top-level comments only. 0 means unlimited. |
includeReplies | boolean | No | true | Keep nested replies, not only top-level comments. |
expandAll | boolean | No | true | Reveal collapsed "load more comments" sections. |
completenessPass | boolean | No | true | Extra pass that fills in comments still missing after the first expansion. |
maxMoreRequestsPerPost | integer | No | 0 | Limit on "load more" requests per post. 0 means unlimited. |
maxBackfillRequests | integer | No | 0 | Limit on completeness-pass requests per post. 0 means unlimited. |
maxBackfillRounds | integer | No | 6 | Rounds the completeness pass may run (1 to 50). |
backfillBatch | integer | No | 60 | Spots rechecked per completeness-pass round (1 to 1000). |
minScore | integer | No | empty | Keep comments with at least this many upvotes. |
dateFrom | string | No | empty | Keep comments posted on or after this date. |
dateTo | string | No | empty | Keep comments posted on or before this date. |
keywords | array | No | [] | Keep comments containing at least one of these words. |
keywordsMatchAll | boolean | No | false | Require every keyword in a comment. |
authors | array | No | [] | Keep comments written by these usernames only. |
skipDeleted | boolean | No | true | Drop deleted or removed comments. |
includePostInfo | boolean | No | true | Repeat the parent post's details on every comment row. |
includePostRecord | boolean | No | false | Also save the post as its own row. |
includeThreadPath | boolean | No | false | Add each comment's parent chain. |
includeBodyHtml | boolean | No | false | Keep the rendered HTML of each comment. |
outputTree | boolean | No | false | Save one row per post with comments nested as replies. |
authorKarma | boolean | No | false | Look up post and comment karma for each commenter. Runs take longer. |
proxyConfiguration | object | No | {"useApifyProxy": false} | Optional network settings. Leave unchanged unless you need your own. |
browserFallback | boolean | No | true | Kept for compatibility. It has no effect on the run. |
concurrency | integer | No | 4 | Posts or comment batches processed at the same time (1 to 32). |
requestDelay | number | No | 0.7 | Pause between requests in seconds (0 to 10). |
maxRetries | integer | No | 6 | Attempts before a request gives up (1 to 15). |
Reddit post URLs
Paste links to posts, one per line. The www, old, new, np and m versions of Reddit, short redd.it links and share links all work, and duplicates are removed. A link to a single comment is trimmed back to its whole post.
- โ
Good:
https://www.reddit.com/r/Python/comments/1v7tfx9/python_automations_are_so_much_better_than_ai/ - โ Bad:
https://www.reddit.com/r/Python/(a subreddit page is not a post)
Warning: Links that are not post links are skipped with a log message. Put subreddit names in
subredditsinstead.
Subreddits, search and usernames
Use these to discover posts instead of pasting links. Everything combines in one run, and maxPostsPerSource applies to each source separately.
- โ
Good:
Pythonorr/Pythoninsubreddits, andspezoru/spezinusernames - โ Bad:
https://www.reddit.com/r/Python/insubreddits
Warning:
usernamesfinds the posts those users commented in, then scrapes all comments of those posts, not only the user's own comments. Add the name toauthorsto keep only that user's comments.
Filters and caps
Filters run after the full thread is collected, so the coverage report always describes the whole post. Dates use the format YYYY-MM-DD, and dateTo includes the whole day.
- โ
Good:
"dateFrom": "2026-01-01" - โ Bad:
"dateFrom": "01/01/2026"(invalid dates are ignored with a log message)
Warning:
maxCommentsPerPostlimits the rows saved and billed, but the run still collects the full thread first, so it does not shorten the run.
Output as a nested tree
With outputTree on, each post becomes one row and comments are nested under comments.
Warning:
authorKarmais not applied whenoutputTreeis on.
Output
Results appear in the Output and Storage tabs of the run, as a table or JSON. Pick the fields you need and download them as JSON, CSV, Excel, XML or HTML. The dataset has ready-made views: Comment Overview, Content, Author Info, Thread and Position, Timestamps and Status, Post Info and Coverage Report. A run summary is saved to the key-value store under run-summary.
JSON example
Results for the input example above, one comment row:
{"comment_id": "k1x2y3z","comment_fullname": "t1_k1x2y3z","parent_fullname": "t3_1v7tfx9","parent_id": "1v7tfx9","depth": 0,"author": "example_user","author_fullname": "t2_example1","author_flair": null,"is_op": false,"distinguished": null,"is_stickied": false,"body": "Great write-up. I automated my weekly report the same way.","body_plain": "Great write-up. I automated my weekly report the same way.","score": 42,"is_score_hidden": false,"num_direct_replies": 1,"num_children": 1,"created_utc": 1767225600,"created_at": "2026-01-01T00:00:00Z","is_edited": false,"edited_at": null,"is_deleted": false,"is_removed": false,"permalink": "https://example.com/r/Python/comments/1v7tfx9/_/k1x2y3z/","subreddit": "Python","post_id": "1v7tfx9","data_source": "live","post_fullname": "t3_1v7tfx9","post_title": "Example post title","post_url": "https://example.com/r/Python/comments/1v7tfx9/","post_link": "https://example.com/r/Python/comments/1v7tfx9/","post_author": "example_poster","post_author_fullname": "t2_example2","post_flair": null,"post_score": 512,"post_num_comments": 88,"post_created_utc": 1767222000,"post_created_at": "2025-12-31T23:00:00Z","post_domain": "self.Python","post_is_nsfw": false,"post_is_spoiler": false,"post_is_oc": false,"post_num_crossposts": 0,"post_selftext": "Example post text.","scraped_at": "2026-10-26T12:00:00Z"}
With Emit the post as its own row on, the dataset also holds one post row like this:
{"post_id": "1v7tfx9","post_fullname": "t3_1v7tfx9","post_title": "Example post title","post_url": "https://example.com/r/Python/comments/1v7tfx9/","post_link": "https://example.com/r/Python/comments/1v7tfx9/","post_author": "example_poster","post_author_fullname": "t2_example2","post_flair": null,"post_score": 512,"post_num_comments": 88,"post_created_utc": 1767222000,"post_created_at": "2025-12-31T23:00:00Z","post_domain": "self.Python","post_is_nsfw": false,"post_is_spoiler": false,"post_is_oc": false,"post_num_crossposts": 0,"subreddit": "Python","post_selftext": "Example post text.","post_selftext_plain": "Example post text.","data_source": "live","record_type": "post","_meta": {"comments_reported_by_reddit": 88,"comments_scraped": 86,"coverage_pct": 97.7,"backfill_requests": 2,"unresolved_stub_ids": 0,"truncated_subtrees_remaining": 0,"completeness_pass_converged": true,"expansion_complete": true,"data_source": "live","comments_after_filters": 80}}
Notes and limitations
- Scores and comment counts can be older on some rows. The
data_sourcefield shows where each row was read from. coverage_pctcompares the comments collected with the count Reddit reports for the post, so it can stay below 100.- Deleted and removed comments are skipped by default. Turn off
skipDeletedto keep them. - Rows over 8 MB have their long text fields shortened to 5,000 characters.
- If Reddit limits requests and nothing can be retrieved, the run ends as failed with a plain message instead of an empty success.
Tips and advanced usage
How many comments can the Reddit comments scraper collect?
By default there is no cap per post, so the number depends on the thread size, your filters and how much of the thread Reddit shows. Run a small test on one post first and check the coverage report before a large run.
How to get faster or cheaper results
- Lower
maxCommentsPerPost, setmaxDepthor turn offincludeRepliesto save fewer rows and pay for fewer results. - Raise
concurrency(up to 32) or lowerrequestDelayfor speed. Gentler settings are safer on busy threads. - Turn off
completenessPassandauthorKarmafor shorter runs, at the cost of less complete threads and no karma. - Set a maximum spend per run on Apify. The Actor stops cleanly and keeps the rows already saved.
Known issues
- Very large threads can finish with partial coverage. Check
expansion_completeandcoverage_pctin the coverage report, which sits in eachperPostentry ofrun-summaryand in the post row.
Integrations and API
Can I use Reddit Post Comments Scraper as an API?
Yes. The Apify API lets you start runs, schedule them and fetch results programmatically. Use the apify-client package for Node.js or Python, and see the API tab for ready-to-use code.
How to scrape Reddit comments with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("data_minds/reddit-post-comments-scraper").call(run_input={"urls": ["https://www.reddit.com/r/Python/comments/1v7tfx9/python_automations_are_so_much_better_than_ai/"],"maxPostsPerSource": 10,"proxyConfiguration": {"useApifyProxy": False},})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Can I integrate Reddit Post Comments Scraper with other apps?
Yes. Connect it to Make, Zapier, Google Sheets, Slack and more through Apify integrations, or use webhooks to trigger an action when a run finishes. Schedule Reddit comment scraping runs to keep your data fresh.
Can I use Reddit Post Comments Scraper with AI agents (MCP)?
Yes. Connect it to Claude and other MCP clients through the Apify MCP server. Open the MCP tab for the setup steps.
Other Reddit scrapers
| Scraper | What it does |
|---|---|
| ๐ฝ Reddit Post & Subreddit Extractor | Reddit posts, comments, communities and user profiles by keyword, URL or full subreddit. |
| ๐ฝ Reddit Scraper - Posts, Comments, Search & Subreddits | Bulk Reddit scraping of post, subreddit, user or search URLs, with nested comment threads. |
| ๐ X (Twitter) Scraper Unlimited โ No Limits | Scrape X (Twitter) posts, profiles, articles, threads and analytics from links, handles or search terms. |
| ๐ Google Trends : Trending Search Scraper | Scrape real-time Google Trends trending searches โ search volume, growth %, categories, related queries and related news โ one clean row per... |
| ๐ X (Twitter) Profile Posts Scraper | Scrapes posts from public X (Twitter) profiles without login. |
FAQ
Is it legal to scrape Reddit comments?
Web scraping is generally legal when you collect publicly available data, but you must respect personal data rules such as GDPR, Reddit's terms and copyright. Only collect personal data for a legitimate reason. Read Is web scraping legal? for background. This is not legal advice.
How does the Reddit comments scraper work?
You give it Reddit post links, or a subreddit, search query or username, plus optional filters. It reads each post with its comments and replies, applies your filters, and saves one row per comment to the dataset. It also reports how complete each thread is, so you can see what was collected.
Why scrape Reddit comments?
Reddit threads hold unfiltered opinions, questions and complaints. Teams scrape comments for sentiment analysis, market research, customer feedback and brand monitoring, and to build text datasets for AI work. Structured rows with scores, authors and timestamps are easier to count, filter and analyze than copying threads by hand.
Why does the Reddit comments scraper return fewer comments than expected?
Filters, deleted or removed comments, and reply depth limits all reduce the rows saved. Check skipDeleted, minScore, maxDepth, keywords and maxCommentsPerPost first. Then open the coverage report in run-summary and compare comments_scraped with comments_reported_by_reddit to see how complete the thread was.
Do I need a Reddit account to use the Reddit comments scraper?
No. You do not need a Reddit account to scrape comments. The input has no field for a Reddit login, cookies or API key, and you only need an Apify account to run it. Enter post links or search sources, start the run, and download the dataset when it finishes.
Can I scrape all replies in a Reddit thread?
Yes. Replies are included by default (includeReplies), and collapsed "load more comments" sections are revealed (expandAll). A completeness pass then rechecks the thread for missing comments. The coverage report shows how close each post came to the comment count Reddit shows.
Can I export Reddit comments to CSV or Excel?
Yes. Every run stores comments in a dataset that you can download as JSON, CSV, Excel, XML or HTML from the Output tab or the API. Turn on includePostInfo, which is the default, to repeat post details on each row for flat spreadsheet exports.
Reddit comments scraper not working?
Start with the run log, which explains most problems in plain words. Check that your links are post links and that the post is public. If a run still fails or looks wrong, open the Issues tab with your run link and we will look into it.
Support and feedback
Found a bug or have a feature request? Please create an issue on the Issues tab.
Need a custom solution or more data? Contact us at hello.dataminds@gmail.com.
Built and maintained by the data_minds team on Apify.
Reddit Post Comments Scraper is an independent tool and is not affiliated with or endorsed by Reddit. You are responsible for using the data in line with Reddit's terms and applicable laws.