# Reddit Posts & Comments Scraper (`scrapers_lat/reddit-scraper`) Actor

Extract Reddit posts and comments from subreddits and search results using the public Reddit feeds.

- **URL**: https://apify.com/scrapers\_lat/reddit-scraper.md
- **Developed by:** [Michael Flores](https://apify.com/scrapers_lat) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

> Extract Reddit posts and comments from any subreddit or search query, across all of Reddit's public communities

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-All%20Reddit-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>20+ fields</strong><br>per record</td>
<td align="center"><strong>All Reddit</strong><br>coverage</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
<td align="center"><strong>Updated<br>2026-06-23</td>
</tr></table>

<br>

### What you get

Each record is either one Reddit post or one comment, pulled from a subreddit feed or a search query, useful for social listening, trend tracking, sentiment analysis and content research. A run returns one post record per post and, when comments are enabled, one record per comment linked back to its post.

**Post records**

- **recordType**: whether the record is a post or a comment
- **id**: the Reddit id of the post
- **subreddit** / **subredditId**: the community the post belongs to, and its fullname
- **title**: the post title
- **author** / **authorId**: the Reddit username that submitted the post, and its fullname
- **selftext**: the body text of a self/text post, when the post has one
- **url**: the external link a post points to, or the post permalink for text posts
- **permalink**: the canonical Reddit URL of the post
- **domain**: the source domain of the post (for example finance.yahoo.com, or self.technology for text posts)
- **score**: the post's net upvote score
- **numComments**: the number of comments on the post
- **numCrossposts**: how many times the post has been crossposted
- **totalAwards**: the number of awards the post received
- **rank**: the position of the post in the feed it was read from
- **linkFlair**: the post's flair label, when set
- **over18** / **spoiler** / **isOriginalContent**: post flags
- **mediaUrl**: preview image URL of the post, when one is available
- **createdAt**: when the post was published
- **observedAt**: when this record was last seen by the scraper

**Comment records** (only produced when Include Comments is enabled)

- **postId**: the id of the post the comment belongs to
- **author** / **authorId**: the commenter's username and fullname
- **body**: the comment text
- **score**: the comment's net upvote score
- **totalAwards**: the number of awards the comment received
- **permalink**: the canonical Reddit URL of the comment
- **createdAt**: when the comment was published

### Who is it for

| Use case | Who benefits |
|---|---|
| Social listening and brand monitoring | Marketing and PR teams |
| Tracking discussion around a product or topic | Product and research teams |
| Building sentiment and trend datasets | Data scientists and analysts |
| Sourcing community questions and pain points | Content and SEO teams |
| Monitoring a niche subreddit for new posts | Community managers |

### Frequently Asked Questions

**Can I scrape both posts and their comments?**  
Yes. Keep Include Comments enabled and each collected post is followed by one record per comment, with the postId field linking every comment back to its parent post. You can cap how many comments to pull per post.

**Can I search across all of Reddit or just one subreddit?**  
Both. Set the mode to search and provide a search query to look across all of Reddit, or add a single subreddit to restrict the search to that community. The subreddit mode reads a community's hot, new, top or rising feed directly.

**How fresh is the data?**  
It is live. Every run reads Reddit's current public feeds at the moment it runs, so new posts appear as soon as Reddit lists them in the feed.

**Does it capture vote scores and comment counts?**  
Yes. Every post record carries its net score, comment count, crosspost count and award count, and every comment record carries its own score and award count. Fields that a given post genuinely does not have (a missing flair, no media) are returned empty rather than guessed.

**Do I need a proxy to run this?**  
Yes. Reddit blocks datacenter connections, so the actor uses the Apify Residential proxy by default, which is already set for you. Residential data transfer per run is small, around a hundredth of a gigabyte for a hundred records.

<!-- scrapers-lat-cta -->
### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for Latin American and US public platforms: real estate, jobs, e-commerce, company registries and government data. Browse the full catalog, see live sample output for each one, or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

---

> This actor is an independent tool and has no affiliation with Reddit, Inc. It only accesses data that is publicly available on Reddit's public feeds. Use it in accordance with Reddit's terms of service.

# Actor input Schema

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

Maximum number of posts to collect across all sources. Optional.
## `includeComments` (type: `boolean`):

When enabled, the scraper also fetches the comments of each collected post and emits one record per comment.
## `mode` (type: `string`):

Choose whether to read posts from subreddits or from a search query.
## `subreddits` (type: `array`):

Subreddit names to scrape when mode is 'subreddit'. Enter names without the r/ prefix, for example: technology, worldnews.
## `searchQuery` (type: `string`):

Search terms to query when mode is 'search'. For example: artificial intelligence.
## `searchSubreddit` (type: `string`):

Optional. When mode is 'search', restrict the search to this single subreddit (name without r/). Leave empty to search all of Reddit.
## `sort` (type: `string`):

Sort order. For subreddit mode: hot, new, top, rising. For search mode: relevance, new, top, comments.
## `time` (type: `string`):

Time window for the 'top' sort (and search). Ignored for hot, new and rising.
## `commentsLimit` (type: `integer`):

Maximum number of comments to collect per post when Include Comments is enabled.
## `proxyConfiguration` (type: `object`):

Proxy settings. Reddit blocks datacenter ranges, so the Apify Residential proxy is required and set as the default.

## Actor input object example

```json
{
  "maxItems": 10,
  "includeComments": true,
  "mode": "subreddit",
  "subreddits": [
    "technology"
  ],
  "sort": "hot",
  "time": "day",
  "commentsLimit": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
````

# 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 = {
    "maxItems": 10,
    "subreddits": [
        "technology"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/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 = {
    "maxItems": 10,
    "subreddits": ["technology"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "subreddits": [
    "technology"
  ]
}' |
apify call scrapers_lat/reddit-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/reddit-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Posts & Comments Scraper",
        "description": "Extract Reddit posts and comments from subreddits and search results using the public Reddit feeds.",
        "version": "0.1",
        "x-build-id": "rQH3vUcY198T541JZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapers_lat~reddit-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapers_lat-reddit-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapers_lat~reddit-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapers_lat-reddit-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapers_lat~reddit-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapers_lat-reddit-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "proxyConfiguration"
                ],
                "properties": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Maximum number of posts to collect across all sources. Optional."
                    },
                    "includeComments": {
                        "title": "Include Comments",
                        "type": "boolean",
                        "description": "When enabled, the scraper also fetches the comments of each collected post and emits one record per comment.",
                        "default": true
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "subreddit",
                            "search"
                        ],
                        "type": "string",
                        "description": "Choose whether to read posts from subreddits or from a search query.",
                        "default": "subreddit"
                    },
                    "subreddits": {
                        "title": "Subreddits",
                        "type": "array",
                        "description": "Subreddit names to scrape when mode is 'subreddit'. Enter names without the r/ prefix, for example: technology, worldnews.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search terms to query when mode is 'search'. For example: artificial intelligence."
                    },
                    "searchSubreddit": {
                        "title": "Restrict Search To Subreddit",
                        "type": "string",
                        "description": "Optional. When mode is 'search', restrict the search to this single subreddit (name without r/). Leave empty to search all of Reddit."
                    },
                    "sort": {
                        "title": "Sort",
                        "enum": [
                            "hot",
                            "new",
                            "top",
                            "rising",
                            "relevance",
                            "comments"
                        ],
                        "type": "string",
                        "description": "Sort order. For subreddit mode: hot, new, top, rising. For search mode: relevance, new, top, comments.",
                        "default": "hot"
                    },
                    "time": {
                        "title": "Time Range",
                        "enum": [
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window for the 'top' sort (and search). Ignored for hot, new and rising.",
                        "default": "day"
                    },
                    "commentsLimit": {
                        "title": "Comments Per Post",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of comments to collect per post when Include Comments is enabled.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Reddit blocks datacenter ranges, so the Apify Residential proxy is required and set as the default.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
