# Reddit Comments Scraper - Threads & Replies, No Login (`benthepythondev/reddit-comments-scraper`) Actor

Returns the comments and replies of Reddit posts given by link or id: text, author, score, depth, parent and the post they belong to, one row per comment with each reply after its parent. Expands hidden replies, takes a date limit and has an only-new mode for watching threads. No login.

- **URL**: https://apify.com/benthepythondev/reddit-comments-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Social media, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 comments

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 💬 Reddit Comments Scraper

Returns the comments and replies of Reddit posts without a Reddit login or API key. Paste post links and get one row per comment: text, author, score, time, depth and the comment it answers, with every reply directly after its parent. It opens the replies Reddit hides behind "load more", takes a date limit, and has an only-new mode for watching threads.

**Price:** until October 18, 2026 $2.00 per 1,000 comments on the Apify Free plan ($1.70 from Gold up); from October 19 $0.80 ($0.60 from Gold up). A reply is a row like a comment. A post that was deleted or is private costs nothing. Export to JSON, CSV or Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the Reddit Comments Scraper?

It reads a post's thread through Reddit's API, so no browser runs and 512 MB of memory is enough. 500 comments of one post took 11 seconds.

The thread arrives as a tree and leaves as a flat table: `depth` 0 is a comment on the post, 1 a reply to it, and so on, and `parent_id` names what each row answers. A spreadsheet can read it top to bottom, and code can rebuild the tree.

#### What data does it extract?

- **Comment:** id, permalink, text (plain and Markdown), time, edited flag
- **Author**, and whether the author is the post's author
- **Engagement:** score, number of direct replies, awards
- **Thread:** `depth`, `parent_id`, `post_id`
- **Post:** title, link and subreddit on every row
- **For AI use:** word count and estimated token count

#### What users of Reddit scrapers ask for, and what this Actor does

The issue pages of the four most used Reddit Actors on Apify were read on October 4, 2026:

| Asked for there | Here |
|---|---|
| "I was charged $127 for 1,738 comments", bills beyond the limit | A reply costs the same as a comment. A limit is exact, and a run stops at its maximum charge with what it has saved |
| Order of the comments | Each parent is followed by its replies, in Reddit's "best" order |
| Runs blocked by Reddit (403), empty runs | Reads Reddit's API instead of its web pages; a deleted or private post is named in the status message and the run still succeeds |
| The same post collected twice | A post given as a link, a short link and an id is read once |

### ⬇️ Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `postUrls` | array | | Post links, short links (`redd.it/…`) or bare post ids |
| `maxCommentsPerPost` | integer | 100 | Rows per post, up to 10,000; replies count as rows |
| `expandMoreComments` | boolean | true | Opens "load more comments" and "continue this thread" |
| `commentedAfter` | string | | A day (YYYY-MM-DD) or a period back from now (`12 hours`, `7 days`) |
| `onlyNew` | boolean | false | Skip every comment an earlier run with the same monitor name delivered |
| `monitorId` | string | | Name of that memory |

#### Example input

The threads of two posts:

```json
{
  "postUrls": [
    "https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/",
    "https://redd.it/1wi5ego"
  ],
  "maxCommentsPerPost": 500
}
```

Only what was written in the last day:

```json
{
  "postUrls": ["https://www.reddit.com/r/AI_Agents/comments/1wi5ego/what_web_scraping_tools_are_you_using_right_now/"],
  "commentedAfter": "1 day",
  "maxCommentsPerPost": 1000
}
```

A watch on a thread for a schedule:

```json
{
  "postUrls": ["https://www.reddit.com/r/AI_Agents/comments/1wi5ego/what_web_scraping_tools_are_you_using_right_now/"],
  "maxCommentsPerPost": 1000,
  "onlyNew": true,
  "monitorId": "launch-thread"
}
```

Input names of other Reddit Actors are read as well: `startUrls`, `urls`, `maxComments`, `commentDateLimit` and `commentDateFrom`.

### ⬆️ Output

One row per comment or reply (the Markdown text is shortened here):

```json
{
  "id": "c60q4ga",
  "post_id": "z1c9z",
  "parent_id": "t1_c60o0iw",
  "permalink": "https://reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/c60q4ga/",
  "body": "> By the way, if you want to know what I think about this whole reddit experience - NOT BAD! http://i.imgur.com/VKN34.jpg HE KNOWS",
  "body_markdown": "> \n\nBy the way, if you want to know what I think about this whole reddit experience - NOT …",
  "author": "aleowk",
  "score": 2022,
  "ups": 2022,
  "downs": 0,
  "created_utc": "2012-08-30T00:21:33",
  "edited": false,
  "is_submitter": false,
  "stickied": false,
  "locked": false,
  "score_hidden": false,
  "total_awards_received": 0,
  "depth": 1,
  "word_count": 23,
  "token_count": 35,
  "reply_count": 5,
  "post_title": "I am Barack Obama, President of the United States -- AMA",
  "post_url": "https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/",
  "subreddit": "IAmA",
  "scraped_at": "2026-10-04T15:08:34.095336+00:00"
}
```

`parent_id` starts with `t1_` when the row answers a comment and with `t3_` when it answers the post. The status message says how many comments Reddit counts for a post when your limit ended the read. The run also writes a `SUMMARY` record.

### 💰 What a run costs

| Apify plan | Per 1,000 comments until October 18, 2026 | From October 19, 2026 |
|---|---|---|
| Free | $2.00 | $0.80 |
| Bronze | $1.90 | $0.70 |
| Silver | $1.80 | $0.65 |
| Gold, Platinum, Diamond | $1.70 | $0.60 |

Apify's standard start event ($0.00005) is the only other charge; proxies are included. Not charged: a post that was deleted or is private, a comment from before your date limit, and a comment already delivered in only-new mode.

### ⏱️ Measured on Apify (October 4, 2026)

| Run | Comments | Time |
|---|---|---|
| Sample input (one post) | 20 | 8 s |
| 500 comments of one post, given twice (link and short link) plus an unusable entry | 500 | 11 s |

All at 512 MB.

### 🔔 Watching threads

Turn on `onlyNew`, give the watch a `monitorId` and put the run on a schedule. Each run reads the thread and saves the comments that earlier runs did not deliver. Comments from before the oldest comment of the first run stay outside the watch. The memory is a key-value store named `reddit-comments-monitor` in your own account; delete a record there to start over.

### 🤖 For AI agents

Smallest useful call:

```json
{"postUrls": ["https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"], "maxCommentsPerPost": 50}
```

Each row is one comment with `body`, `author`, `score`, `created_utc`, `depth`, `parent_id` and `permalink`. `postUrls` takes several posts. A post that is not available returns no rows; the status message and the `SUMMARY` record name it. No credentials are needed.

### 💡 Use cases

- 🧪 **Sentiment and opinion analysis:** whole threads about a product or a launch.
- 🧠 **Data for models:** real question-and-answer threads with the tree kept.
- 🛟 **Support and community care:** new comments on your announcement posts, on a schedule.
- 🔬 **Research:** how a discussion developed, with times and scores.

### ⚠️ Limits, stated plainly

- **Very large threads take many requests.** Reddit hands out hidden replies in batches; a post with tens of thousands of comments was read up to your limit, not to its end, in the tests here.
- **The count on the post can be higher than the rows.** It includes deleted and removed comments, which Reddit does not return.
- **A watch reads the thread again on every run.** Use a limit that fits the thread.
- **Comments of posts you name, not a comment search.** To find posts by keyword first, use the Reddit Search Scraper and pass its `url` values here.
- **Scores are the values at the time of the run.**

### ❓ FAQ

**Do I need a Reddit account or API key?** No.

**Does it return replies to replies?** Yes, every level, each directly after its parent.

**How do I rebuild the tree?** Group rows by `parent_id`: `t3_…` is the post, `t1_<id>` the comment with that id.

**Can I give many posts?** Yes. Each post gets its own limit.

**Can I get only new comments?** Yes, with `commentedAfter` for a date limit or `onlyNew` on a schedule.

**How do I call it from code?** With the Apify API or the Python and JavaScript clients; every run returns a dataset you can fetch as JSON or CSV. It also works as a tool through Apify's MCP server.

**Is it legal?** The Actor reads public Reddit comments. They carry usernames and can contain personal data: GDPR, CCPA and similar rules apply to how you store and use them, and Reddit's terms apply to you as well.

### 🔗 You might also like

- [Reddit Search Scraper](https://apify.com/benthepythondev/reddit-search-scraper): posts by keyword across Reddit
- [Subreddit Scraper](https://apify.com/benthepythondev/subreddit-posts-scraper): the posts of whole subreddits
- [Reddit Scraper](https://apify.com/benthepythondev/reddit-scraper): posts with nested comment trees, users and search in one Actor
- [Reddit Archive Scraper](https://apify.com/benthepythondev/reddit-archive-scraper): historical posts and comments by exact date range

**Keywords:** reddit comments scraper, reddit comment export, scrape reddit comments, reddit thread scraper, reddit replies, reddit comments api, reddit comments csv, reddit thread monitoring, reddit sentiment data, reddit comments for ai, no api key reddit scraper

# Actor input Schema

## `postUrls` (type: `array`):

Links of posts, one per line. Short links (redd.it/…) and bare post ids work too. A post that was deleted or is private is reported and costs nothing.

## `maxCommentsPerPost` (type: `integer`):

Rows to save for each post; replies count as rows.

## `expandMoreComments` (type: `boolean`):

Follows Reddit's "load more comments" and "continue this thread" links. Turn it off for only the comments Reddit shows first, which is faster.

## `commentedAfter` (type: `string`):

A day (YYYY-MM-DD) or a period back from now (12 hours, 7 days, 2 months). Comments from before are not saved and not charged.

## `onlyNew` (type: `boolean`):

For scheduled runs: reads newest first and skips everything an earlier run with the same monitor name delivered, so you pay only for what is new. The memory is a key-value store in your own account.

## `monitorId` (type: `string`):

Name of the memory used by the option above. Give each watch its own name; without a name the list of inputs is the name.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"
  ],
  "maxCommentsPerPost": 20,
  "expandMoreComments": true,
  "onlyNew": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postUrls": [
        "https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"
    ],
    "maxCommentsPerPost": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/reddit-comments-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "postUrls": ["https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"],
    "maxCommentsPerPost": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/reddit-comments-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postUrls": [
    "https://www.reddit.com/r/IAmA/comments/z1c9z/i_am_barack_obama_president_of_the_united_states/"
  ],
  "maxCommentsPerPost": 20
}' |
apify call benthepythondev/reddit-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,benthepythondev/reddit-comments-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NGKa5Vn4HCzDNzOxy/builds/qwf438OCP2pcrauC5/openapi.json
