# Reddit Scraper — Posts, Comments, Communities & Users (`arpitgandhi1934/reddit-scraper`) Actor

Scrape Reddit without an account. Posts, full comment threads, community details, user profiles and keyword search — pure HTTP, no browser, no login.

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

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 👽 Reddit Scraper — Posts, Comments, Communities & Users

**Extract public Reddit data at scale. No account, no API keys, no rate-limit paperwork.**

Reddit is the internet's biggest archive of unfiltered opinion — real people saying what they
actually think about your product, your competitors, and your market. This scraper turns any
subreddit, post, profile, or search term into clean structured data you can analyse, feed to
an LLM, or drop straight into a spreadsheet.

Built on Reddit's own mobile API. **No browser, no scrolling, no login.**

***

### 🎯 What can you do with Reddit data?

- **Monitor your brand** — catch every mention of your product across posts *and* deep inside
  comment threads, where the honest opinions live
- **Feed AI & LLMs** — clean, deduplicated threads make excellent input for sentiment analysis,
  RAG pipelines, fine-tuning sets, and summarisation
- **Research any market** — find out what a niche community complains about, recommends, and
  refuses to buy
- **Track competitors** — watch their subreddit, their mentions, and the comparison threads
- **Generate leads** — find people asking for exactly what you sell, then reach the community
  where they asked
- **Spot trends early** — Reddit surfaces things weeks before they hit mainstream press
- **Support due diligence** — sentiment on a stock, a token, a game, a launch
- **Power academic research** — public discourse at scale, with timestamps and scores intact

***

### 📊 What data can you extract?

| | |
|---|---|
| 📝 Post title & body | 👍 Upvotes |
| 💬 Full comment threads | 🗓 Timestamps (ISO 8601) |
| 👤 Usernames & user IDs | 🔗 Post & comment permalinks |
| 📷 Images & galleries | 🎥 Video URLs |
| 🏷 Flair | 🔞 NSFW flag |
| 👥 Community name & members | 📈 Weekly active users |
| 🏆 Post & comment karma | ✅ Verified / employee badges |
| 📌 Stickied, locked, OP flags | ✏️ Edited timestamps |
| 🔎 Search results | 🌐 Outbound links |

***

### ⚡ Why this scraper

Most Reddit scrapers drive a headless browser — load the page, scroll, wait, hope. That's slow,
it truncates long comment threads, and it's why many of them make you pick between *fast* and
*complete*.

This one calls Reddit's API directly.

| | Browser-based scrapers | **This scraper** |
|---|---|---|
| **Comment threads** | scroll & wait; deep replies get cut off | **whole thread in one request** |
| **Speed** | seconds per page of scrolling | **no page to render at all** |
| **Setup** | timeouts and scroll delays to tune | **paste a URL, press Start** |
| **Login** | some require cookies or an account | **never** |
| **Cost** | browser time is expensive | **plain HTTP — pay for data, not for Chrome** |

**Benchmark:** a post with 113 comments returns **111 comments in a single request.**

***

### 🚀 Get started in 30 seconds

1. Create a free Apify account
2. Open the Reddit Scraper
3. Paste a Reddit URL — or type a keyword
4. Press **Start**
5. Download as **JSON, CSV, Excel, XML or HTML**

No code required. If you can copy a link, you can run this.

***

### 📥 Input examples

**Scrape a subreddit, with comments on every post**

```json
{
  "startUrls": [{ "url": "https://www.reddit.com/r/pasta/" }],
  "maxPostCount": 25,
  "maxComments": 20
}
```

**Top posts of the month for a keyword**

```json
{
  "searches": ["pasta recipe"],
  "maxPostCount": 50,
  "sort": "top",
  "time": "month"
}
```

**One post, the entire discussion**

```json
{
  "startUrls": [{ "url": "https://www.reddit.com/r/recipes/comments/4f45c5/..." }],
  "maxComments": 500
}
```

**Find communities and people instead of posts**

```json
{
  "searches": ["pasta"],
  "searchPosts": false,
  "searchCommunities": true,
  "searchUsers": true
}
```

**Brand monitoring inside one community**

```json
{
  "searches": ["your brand name"],
  "searchCommunityName": "BuyItForLife",
  "sort": "new",
  "maxComments": 50
}
```

#### Every URL type works

| What | Example |
|---|---|
| Community | `https://www.reddit.com/r/worldnews/` |
| Community, sorted | `https://www.reddit.com/r/worldnews/top` |
| Post + comments | `https://www.reddit.com/r/learnprogramming/comments/lp1hi4/...` |
| User profile | `https://www.reddit.com/user/spez/` |
| User's comments only | `https://www.reddit.com/user/spez/comments/` |
| Search results | `https://www.reddit.com/search/?q=news` |

Shorthand works too: `r/pasta`, `u/spez`, or just `pasta`.

***

### ⚙️ Input parameters

| Field | What it does | Default |
|---|---|---|
| `startUrls` | Reddit URLs — communities, posts, users, searches | — |
| `searches` | Keywords to search Reddit | — |
| `searchCommunityName` | Restrict a keyword search to one community | — |
| `maxItems` | Hard cap on total results (`0` = unlimited) | `0` |
| `maxPostCount` | Posts per search term / community / user | `25` |
| `maxComments` | Comments per post (`0` = skip comments) | `0` |
| `maxCommunitiesCount` | Cap for community results | `10` |
| `maxUserCount` | Cap for user results | `10` |
| `sort` | `relevance`, `hot`, `top`, `new`, `comments` | `relevance` |
| `time` | `all`, `hour`, `day`, `week`, `month`, `year` | `all` |
| `searchPosts` | Keyword search returns posts | `true` |
| `searchCommunities` | Keyword search returns communities | `false` |
| `searchUsers` | Keyword search returns users | `false` |
| `skipComments` | Never fetch comments | `false` |
| `skipCommunity` | Community URL → posts only | `false` |
| `skipUserPosts` | User URL → comments only | `false` |
| `proxyConfiguration` | Apify proxy (datacenter is fine) | on |

Provide at least one of `startUrls` or `searches`.

***

### 📤 Output examples

Every row is flat and tagged with `dataType` — `post`, `comment`, `community` or `user` — so a
single run can return several kinds and you filter on the way out.

#### 📝 Post

```json
{
  "id": "t3_1vvnpda",
  "parsedId": "1vvnpda",
  "url": "https://www.reddit.com/gallery/1vvnpda",
  "username": "KatSan_2k",
  "userId": "t2_8f2k1x",
  "title": "Some of my pastas lately :D",
  "communityName": "r/pasta",
  "parsedCommunityName": "pasta",
  "body": "Been practising laminated dough all summer…",
  "upVotes": 1281,
  "numberOfComments": 54,
  "authorFlair": null,
  "isSelfPost": false,
  "isVideo": false,
  "over18": false,
  "imageUrls": ["https://i.redd.it/5qgx3gjgpzkh1.jpg"],
  "videoUrls": [],
  "createdAt": "2026-08-22T20:55:46.861Z",
  "dataType": "post"
}
```

#### 💬 Comment

```json
{
  "id": "t1_d25rm5x",
  "url": "https://www.reddit.com/r/recipes/comments/4f45c5/…/d25rm5x/",
  "postId": "t3_4f45c5",
  "username": "Hermitia",
  "body": "Sautee some garlic in olive oil in a large pot…",
  "upVotes": 134,
  "isOP": false,
  "isStickied": false,
  "distinguishedAs": null,
  "createdAt": "2016-04-16T23:49:35.005Z",
  "editedAt": "2016-04-17T05:50:07.964Z",
  "dataType": "comment"
}
```

#### 👥 Community

```json
{
  "id": "2qoor",
  "displayName": "pasta",
  "prefixedName": "r/pasta",
  "title": "Pasta",
  "description": "For lovers of pasta. Homemade pasta, pasta machines…",
  "numberOfMembers": 1278362,
  "weeklyActiveUsers": 76271,
  "over18": false,
  "createdAt": "2008-11-17T00:16:04.210Z",
  "url": "https://www.reddit.com/r/pasta/",
  "dataType": "community"
}
```

#### 👤 User

```json
{
  "id": "1w72",
  "username": "spez",
  "postKarma": 184487,
  "commentKarma": 756493,
  "totalKarma": 940980,
  "isVerified": true,
  "isEmployee": true,
  "url": "https://www.reddit.com/user/spez/",
  "dataType": "user"
}
```

***

### 🔌 Integrations & automation

Results go anywhere Apify goes — **Make, Zapier, n8n, Slack, Google Drive, Airbyte, GitHub**,
or your own stack via the Apify API, webhooks, and the Python and Node clients.

Useful patterns:

- **Scheduled brand watch** — run daily on your keyword, webhook new mentions into Slack
- **Feed an AI agent** — Apify actors work as **MCP servers**, so Claude or any MCP client can
  call this scraper as a tool
- **Straight into a sheet** — export CSV, or push to Google Sheets with a Zap
- **Into your warehouse** — Airbyte connector, or pull the dataset from the API

***

### ❓ FAQ

**Do I need a Reddit account or API key?**
No. Not a login, not a cookie, not a developer app. Nothing to register, nothing to expire.

**Could this get my Reddit account banned?**
No account is involved at any point.

**How many results can I get?**
Reddit caps *listings* at roughly 1,000 items — that's Reddit's platform limit, and it applies
to every tool. Comments inside a post are **not** capped. See *Getting more than 1,000* below.

**Are comment threads complete?**
Yes, up to your `maxComments`. A 113-comment post returns 111 comments — the two missing are
deleted ones Reddit no longer serves to anybody.

**Why do some posts show `[deleted]` as the author?**
The account was deleted or the post removed. Reddit serves no author for those.

**Can I sort by Hot / Top / New?**
Yes — set `sort`, or just paste a sorted URL like `reddit.com/r/pasta/top`.

**What formats can I export?**
JSON, CSV, Excel, XML, HTML — or pull straight from the API.

***

### 📈 Getting more than 1,000 results

Reddit's ~1,000-item listing cap is easy to work around:

1. **Rotate the sort** — scrape `new`, then `top`, then `hot`; each surfaces posts the others miss
2. **Search instead of browse** — keywords reach old posts that dropped out of listings
3. **Slice by time** — run `time: "month"` across successive windows
4. **Run on a schedule** — a daily run captures everything before it ages out

***

### 🧰 More scrapers

Building a cross-platform dataset? These pair well:

- **YouTube Scraper** — videos, channels, comments, subtitles, likes & dislikes
- **LinkedIn Jobs Search** — job listings by keyword and location, no login
- **LinkedIn Post Search** — posts by keyword, with attached jobs
- **Google Maps Scraper** / **Google Maps Reviews** — places and every review
- **Zillow**, **Realtor.com**, **Realtor.ca** — property and agent data
- **AllTrails Scraper** — hiking trail data by location

***

### 📋 Notes for developers

**Flat, join-ready output.** Comments carry `postId`; posts carry `parsedCommunityName`.
IDs keep Reddit's native prefixes (`t3_` post, `t1_` comment, `t5_` community) and `parsedId`
gives you the bare form.

**Failures are rows, not silence.** Anything that can't be scraped comes back with an `error`
field and a `note` explaining why, so a deleted post inside a batch of 500 is visible rather
than a silent gap.

| `error` | Meaning |
|---|---|
| `NO_RESULTS` | Search returned nothing |
| `POST_NOT_FOUND` | Post deleted, removed, or private |
| `COMMUNITY_NOT_FOUND` | No such community |
| `USER_NOT_FOUND` | No such user, or suspended |
| `NO_VALID_START_URLS` | URL isn't a recognisable Reddit link |
| `REQUEST_FAILED` | Upstream error — see `note` |

Filter them with `dataType != "error"`.

**Comment tree structure.** Comment rows carry full content, score, author, flags and their own
permalink, but not `depth` or `parentId` — Reddit returns thread structure separately from the
comments themselves. Threading is on the roadmap.

**Empty input** exits cleanly with a message and charges nothing.

# Actor input Schema

## `startUrls` (type: `array`):

Reddit URLs to scrape: communities (https://www.reddit.com/r/pasta/), posts, user profiles, or search URLs. Bare forms like r/pasta or u/spez also work.

## `searches` (type: `array`):

Keywords to search on Reddit. Leave Start URLs empty when using this.

## `searchCommunityName` (type: `string`):

Restrict keyword search to one community, e.g. 'pasta'. Applies to Search terms only.

## `maxItems` (type: `integer`):

Hard cap on dataset items across the whole run. 0 = no cap.

## `maxPostCount` (type: `integer`):

How many posts to pull per search term, community, or user.

## `maxComments` (type: `integer`):

Comments to pull for each post (0 = none). One request returns the thread — no scrolling.

## `maxCommunitiesCount` (type: `integer`):

Cap on community results when 'Search for communities' is on.

## `maxUserCount` (type: `integer`):

Cap on user results when 'Search for users' is on.

## `sort` (type: `string`):

Order for search results and community feeds.

## `time` (type: `string`):

Only return posts from this window.

## `searchPosts` (type: `boolean`):

Return posts matching the keyword.

## `searchCommunities` (type: `boolean`):

Return communities matching the keyword.

## `searchUsers` (type: `boolean`):

Return users matching the keyword.

## `skipComments` (type: `boolean`):

Never fetch comments, even if Max comments is set.

## `skipCommunity` (type: `boolean`):

When scraping a community URL, emit only its posts, not the community record.

## `skipUserPosts` (type: `boolean`):

When scraping a user URL, emit only their comments, not their posts.

## `proxyConfiguration` (type: `object`):

Apify proxy. Datacenter is fine for Reddit; residential is more resilient under load.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/pasta/"
    }
  ],
  "searches": [
    "pasta recipe"
  ],
  "maxItems": 0,
  "maxPostCount": 25,
  "maxComments": 0,
  "maxCommunitiesCount": 10,
  "maxUserCount": 10,
  "sort": "relevance",
  "time": "all",
  "searchPosts": true,
  "searchCommunities": false,
  "searchUsers": false,
  "skipComments": false,
  "skipCommunity": false,
  "skipUserPosts": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped posts, comments, communities and users, as dataset items.

## `run` (type: `string`):

Status and statistics for this run.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.reddit.com/r/pasta/"
        }
    ],
    "searches": [
        "pasta recipe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("arpitgandhi1934/reddit-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 = {
    "startUrls": [{ "url": "https://www.reddit.com/r/pasta/" }],
    "searches": ["pasta recipe"],
}

# Run the Actor and wait for it to finish
run = client.actor("arpitgandhi1934/reddit-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 '{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/pasta/"
    }
  ],
  "searches": [
    "pasta recipe"
  ]
}' |
apify call arpitgandhi1934/reddit-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arpitgandhi1934/reddit-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/x65w7suwIlKJ0q8NF/builds/IoSyufAOuGswQXIeg/openapi.json
