Reddit Post Comments Scraper avatar

Reddit Post Comments Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Reddit Post Comments Scraper

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

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

16 hours ago

Last modified

Categories

Security

Limited permissions

Share

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

LabelFieldWhat it holds
๐Ÿ†” Comment IDcomment_id, comment_fullnameComment identifiers
๐Ÿ’ฌ Textbody, body_plainMarkdown text and plain text without formatting or quoted lines
๐ŸŒ HTMLbody_htmlRendered HTML, only when Include raw comment HTML is on
โญ Scorescore, is_score_hiddenUpvote score, empty when Reddit hides it
๐Ÿ”— LinkpermalinkLink to the comment
๐Ÿ“š Subredditsubreddit, post_idWhere the comment was posted and its post

Author and position

LabelFieldWhat it holds
๐Ÿ‘ค Authorauthor, author_fullname, author_flairUsername, account identifier and flair text
โœ… Roleis_op, distinguished, is_stickiedWhether the author is the post author, moderator or admin marks, pinned status
๐ŸŒฒ Thread positionparent_fullname, parent_id, depthParent comment and nesting level, 0 for top-level
๐Ÿ‘ถ Reply countsnum_direct_replies, num_childrenDirect replies and all descendants collected
๐Ÿชœ Ancestor chainthread_pathParent chain with comment_id, author and body_plain, only when Include the ancestor chain is on
๐Ÿ… Author karmaauthor_post_karma, author_comment_karmaOnly when Look up author karma is on

Time and status

LabelFieldWhat it holds
๐Ÿ•’ Postedcreated_utc, created_atUnix time and ISO time
๐Ÿ“ Editsis_edited, edited_atWhether and when the comment was edited
๐Ÿ—‘ Stateis_deleted, is_removedDeleted or removed flags
๐Ÿ“… Scrape timescraped_atWhen the row was saved
๐Ÿงญ Origindata_sourceWhere 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)

LabelFieldWhat it holds
๐Ÿ“ฐ Title and textpost_title, post_selftext, post_fullnamePost title, body text and identifier
๐Ÿ”— Linkspost_url, post_linkPost link and the link the post points to
๐Ÿ‘ค Authorpost_author, post_author_fullnamePost author
โญ Engagementpost_score, post_num_comments, post_num_crosspostsScore, Reddit's comment count and crossposts
๐Ÿท Labelspost_flair, post_domain, post_is_nsfw, post_is_spoiler, post_is_ocFlair, domain and content flags
๐Ÿ“… Datespost_created_utc, post_created_atPost time as Unix time and ISO time

Separate post row (only when Emit the post as its own row is on)

LabelFieldWhat it holds
๐Ÿ“ฐ Post fieldspost_id, post_title, post_selftext_plain and the other post_* fieldsThe post itself
๐Ÿท Row typerecord_typeAlways post
โœ… Coverage report_metaComments 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 the post_* fields appear only when the matching input is on. score is empty when Reddit hides it, and author_flair, distinguished and edited_at are 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.

  1. Create a free Apify account with your email.
  2. Open Reddit Post Comments Scraper.
  3. Paste one or more Reddit post links into Reddit post URLs (urls). To discover posts instead, add subreddits, searchQuery or usernames.
  4. Choose your comment settings, such as commentSort, maxCommentsPerPost and any filters.
  5. Click Start and follow the status message, which shows how many rows are saved.
  6. Open the Output tab to view the comments. The run-summary record holds the coverage report for each post.
  7. 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.

PlanPrice per resultPrice 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.

FieldTypeRequiredDefaultDescription
urlsarrayYesnoneReddit post links to scrape. Direct links always scrape in full.
subredditsarrayNo[]Subreddits to pull posts from.
searchQuerystringNoemptyFind posts matching this text.
searchInSubredditstringNoemptyLimit the search to one subreddit.
usernamesarrayNo[]Scrape the posts these users commented in.
subredditSortstringNohotPost order for subreddits: hot, new, top, rising, controversial.
searchSortstringNorelevanceSearch order: relevance, hot, top, new, comments.
subredditTimeFilterstringNoweekTime window for top, controversial and search: hour, day, week, month, year, all.
maxPostsPerSourceintegerNo10Posts to pull from each subreddit, search or username. Direct links ignore it.
commentSortstringNotopComment order: top, best, new, controversial, old, qa.
maxCommentsPerPostintegerNo0Maximum comments saved per post. 0 means unlimited.
maxDepthintegerNo0Reply levels to keep. 1 keeps top-level comments only. 0 means unlimited.
includeRepliesbooleanNotrueKeep nested replies, not only top-level comments.
expandAllbooleanNotrueReveal collapsed "load more comments" sections.
completenessPassbooleanNotrueExtra pass that fills in comments still missing after the first expansion.
maxMoreRequestsPerPostintegerNo0Limit on "load more" requests per post. 0 means unlimited.
maxBackfillRequestsintegerNo0Limit on completeness-pass requests per post. 0 means unlimited.
maxBackfillRoundsintegerNo6Rounds the completeness pass may run (1 to 50).
backfillBatchintegerNo60Spots rechecked per completeness-pass round (1 to 1000).
minScoreintegerNoemptyKeep comments with at least this many upvotes.
dateFromstringNoemptyKeep comments posted on or after this date.
dateTostringNoemptyKeep comments posted on or before this date.
keywordsarrayNo[]Keep comments containing at least one of these words.
keywordsMatchAllbooleanNofalseRequire every keyword in a comment.
authorsarrayNo[]Keep comments written by these usernames only.
skipDeletedbooleanNotrueDrop deleted or removed comments.
includePostInfobooleanNotrueRepeat the parent post's details on every comment row.
includePostRecordbooleanNofalseAlso save the post as its own row.
includeThreadPathbooleanNofalseAdd each comment's parent chain.
includeBodyHtmlbooleanNofalseKeep the rendered HTML of each comment.
outputTreebooleanNofalseSave one row per post with comments nested as replies.
authorKarmabooleanNofalseLook up post and comment karma for each commenter. Runs take longer.
proxyConfigurationobjectNo{"useApifyProxy": false}Optional network settings. Leave unchanged unless you need your own.
browserFallbackbooleanNotrueKept for compatibility. It has no effect on the run.
concurrencyintegerNo4Posts or comment batches processed at the same time (1 to 32).
requestDelaynumberNo0.7Pause between requests in seconds (0 to 10).
maxRetriesintegerNo6Attempts 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 subreddits instead.

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: Python or r/Python in subreddits, and spez or u/spez in usernames
  • โŒ Bad: https://www.reddit.com/r/Python/ in subreddits

Warning: usernames finds the posts those users commented in, then scrapes all comments of those posts, not only the user's own comments. Add the name to authors to 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: maxCommentsPerPost limits 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: authorKarma is not applied when outputTree is 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_source field shows where each row was read from.
  • coverage_pct compares 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 skipDeleted to 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, set maxDepth or turn off includeReplies to save fewer rows and pay for fewer results.
  • Raise concurrency (up to 32) or lower requestDelay for speed. Gentler settings are safer on busy threads.
  • Turn off completenessPass and authorKarma for 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_complete and coverage_pct in the coverage report, which sits in each perPost entry of run-summary and 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 ApifyClient
client = 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

ScraperWhat it does
๐Ÿ‘ฝ Reddit Post & Subreddit ExtractorReddit posts, comments, communities and user profiles by keyword, URL or full subreddit.
๐Ÿ‘ฝ Reddit Scraper - Posts, Comments, Search & SubredditsBulk Reddit scraping of post, subreddit, user or search URLs, with nested comment threads.
๐Ÿ”— X (Twitter) Scraper Unlimited โ€“ No LimitsScrape X (Twitter) posts, profiles, articles, threads and analytics from links, handles or search terms.
๐Ÿ”— Google Trends : Trending Search ScraperScrape real-time Google Trends trending searches โ€” search volume, growth %, categories, related queries and related news โ€” one clean row per...
๐Ÿ”— X (Twitter) Profile Posts ScraperScrapes posts from public X (Twitter) profiles without login.

FAQ

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.