# Reddit Scraper (`mikolabs/reddit-scraper`) Actor

Scrape Reddit posts, comments, communities & users without authentication. Search or use direct URLs. Includes residential proxies. $15/month unlimited access.

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

## Pricing

$15.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## 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

## What does Reddit Scraper do?

Lightning fast Reddit Scraper lets you **scrape Reddit posts, comments, users, and communities** — all without login, API keys, or authentication. Extract data from any subreddit, user profile, or search query with no rate limits.

⭐⭐⭐ **Love this actor? [Please leave a review here!](https://console.apify.com/actors/vanfdeHG30EcOIeJ5/reviews)** ⭐⭐⭐

> 💡 **Get 1,000+ results for less than $4** — fully covered by the free $5 monthly credits on every Apify account.

***

### ✨ Reddit Scraper allows you to

- 📝 **Scrape subreddits** — extract all top, hot, new, and rising posts from any community
- 💬 **Get Reddit comments** — timestamps, points, usernames, URLs, and full reply threads
- 👤 **Scrape user profiles** — karma scores, account age, and recent activity
- 🔍 **Search by keyword** — across posts, comments, communities, users, and media
- 📊 **Sort & filter** — by Relevance, Hot, Top, New, Rising, Controversial, or Comments
- 📅 **Filter by date** — last hour, day, week, month, year, or custom date ranges
- 🔗 **Scrape by URL or keyword** — or combine both approaches

***

### 📋 What data can I extract from Reddit?

| 📝 **Reddit Posts** | 💬 **Reddit Comments** |
|:---|:---|
| Title and body text | Comment text and HTML |
| Author username | Commenter username |
| Upvotes and vote ratio | Points / score |
| Number of comments | Timestamps |
| Image and video URLs | Permalink and parent URL |
| Flair and NSFW flag | Thread hierarchy |

| 👥 **Reddit Communities** | 👤 **Reddit Users** |
|:---|:---|
| Subreddit name and title | Username |
| Number of members | Post and comment karma |
| Description and category | Recent posts and comments |
| Community URL | User icon / avatar |
| NSFW flag | Account creation date |

***

### 💵 How much will it cost to scrape Reddit?

| Plan | Monthly Credits | Ideal For |
|:---|:---|:---|
| 🆓 **Free Plan** | $5 free credits | Up to ~1,000 results |
| 💰 **Personal** ($15/mo) | Higher limits | Regular scraping needs |
| 🚀 **Starter** ($49/mo) | 10,000+ results/month | Professional data collection |
| 🏢 **Scale plans** | Unlimited | Large-scale enterprise scraping |

***

### 🛠️ How to scrape Reddit

No coding required — just 5 steps:

1. **Create a free Apify account** using your email
2. **Open Reddit Scraper** on the Apify platform
3. **Add Reddit URLs** or enter **search keywords**
4. **Click "Start"** and wait for the data extraction
5. **Download your data** in JSON, CSV, XML, Excel, or HTML

***

### 🧠 Popular use cases

| Use Case | How It Helps |
|:---|:---|
| 🏷️ **Brand Monitoring** | Track customer sentiment and product discussions |
| 📈 **Market Research** | Discover user needs, pain points, and trends |
| 🏆 **Competitive Analysis** | Monitor competitor mentions across subreddits |
| 🔥 **Trend Tracking** | Spot emerging trends and viral topics early |
| ✍️ **Content Ideation** | Find popular discussions for content inspiration |
| 🎓 **Academic Research** | Analyze public debates, opinions, and discourse |
| 🔔 **Automated Alerts** | Track any keyword, brand, or topic automatically |
| 📊 **Sentiment Analysis** | Feed Reddit comments into NLP pipelines |

***

### 🧩 Input parameters

To run this Actor, provide at least one of:

- **🔗 Start URLs** (`startUrls`) — Reddit URLs to scrape directly (e.g., `[{"url": "https://www.reddit.com/r/news/"}]`)
- **🔍 Search Term** (`searches`) — Keywords to search (e.g., `["artificial intelligence"]`)

> ⚠️ **Important:** When Start URLs are provided, all Search parameters are ignored. Clear the Start URLs field to use keyword search, or perform a filtered search on Reddit and paste that URL into Start URLs.

#### How to scrape Reddit by URL

Almost any Reddit URL works. Here are examples:

| Type | Example URL |
|:---|:---|
| 🏘️ Community | `https://www.reddit.com/r/worldnews/` |
| 🔥 Community channel | `https://www.reddit.com/r/worldnews/hot` |
| 📝 Post with comments | `https://www.reddit.com/r/learnprogramming/comments/lp1hi4/...` |
| 👤 User profile | `https://www.reddit.com/user/lukaskrivka` |
| 💬 User comments | `https://www.reddit.com/user/lukaskrivka/comments/` |
| 🏆 Popular posts | `https://www.reddit.com/r/popular/` |
| 🔍 Search results | `https://www.reddit.com/search/?q=news` |

#### How to scrape Reddit by search term

- **🔍 Search Term** (`searches`) — keywords to search via Reddit's search engine
- **🏘️ Community** (`searchCommunityName`) — restrict search to a specific subreddit (e.g., `"programming"`)

#### Advanced parameters

| Parameter | Description |
|:---|:---|
| 📝 `searchPosts` | Search for posts matching the keyword (default: ✅) |
| 💬 `searchComments` | Search for comments matching the keyword |
| 👥 `searchCommunities` | Search for communities matching the keyword |
| 👤 `searchUsers` | Search for users matching the keyword |
| 🖼️ `searchMedia` | Filter to posts with images/videos only |
| 🔞 `includeNSFW` | Include or exclude NSFW content |
| 📷 `includeMediaLinks` | Extract upVotes, imageUrls, videoUrls, numberOfComments |
| 🚫 `skipComments` | Skip extracting comments (faster scraping) |
| 🚫 `skipUserPosts` | Skip user posts (only get metadata) |
| 🚫 `skipCommunity` | Skip community details (only get posts) |
| 📊 `sort` | Sort by: Relevance, Hot, Top, New, Rising, Controversial, Comments |
| 📅 `time` | Filter by: hour, day, week, month, year |
| 📅 `postDateLimit` | Only get posts after this date |
| 📅 `commentDateLimit` | Only get comments after this date |
| 🐛 `debugMode` | Enable detailed debug logs |

***

### 📌 Input examples

#### Using Search with Media Links

```json
{
  "searches": ["parrots"],
  "includeMediaLinks": true,
  "maxPostCount": 10,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Using Keyword Search

```json
{
  "searches": ["artificial intelligence"],
  "searchPosts": true,
  "searchCommunities": true,
  "sort": "top",
  "time": "week",
  "maxItems": 50,
  "maxComments": 20,
  "includeNSFW": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Using Start URLs

```json
{
  "maxItems": 10,
  "maxPostCount": 10,
  "maxComments": 10,
  "scrollTimeout": 40,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  },
  "startUrls": [
    { "url": "https://www.reddit.com/r/pasta/" },
    { "url": "https://www.reddit.com/r/pasta/comments/vwi6jx/pasta_peperoni_and_ricotta_cheese_how_to_make/" }
  ]
}
```

#### Limiting results

```json
{
  "maxItems": 100,
  "maxPostCount": 50,
  "maxComments": 10,
  "maxCommunitiesCount": 5,
  "maxUserCount": 5
}
```

***

### 📤 Output examples

The output is stored in the dataset. Each post, comment, user, or community is a separate item. Download in **JSON, CSV, XML, RSS, or HTML Table**.

> 📝 **Note:** Detailed fields like `upVotes`, `upVoteRatio`, `numberOfComments`, `imageUrls`, `videoUrls` are only extracted when `includeMediaLinks` is `true`.

#### 📝 Example Reddit Post

```json
{
  "id": "t3_144w7sn",
  "parsedId": "144w7sn",
  "url": "https://www.reddit.com/r/HonkaiStarRail/comments/144w7sn/my_luckiest_10x_pull_yet/",
  "username": "YourKingLives",
  "title": "My Luckiest 10x Pull Yet",
  "communityName": "r/HonkaiStarRail",
  "parsedCommunityName": "HonkaiStarRail",
  "body": "...",
  "html": "...",
  "numberOfComments": 42,
  "upVotes": 1500,
  "upVoteRatio": 0.98,
  "isVideo": false,
  "over18": false,
  "imageUrls": ["https://preview.redd.it/yod3okjkgx4b1.jpg?auto=webp&s=..."],
  "videoUrls": [],
  "createdAt": "2023-06-09T05:23:15.000Z",
  "scrapedAt": "2023-06-09T05:23:28.409Z",
  "dataType": "post"
}
```

#### 💬 Example Reddit Comment

```json
{
  "id": "t1_jnhqrgg",
  "parsedId": "jnhqrgg",
  "url": "https://www.reddit.com/r/NewsWithJingjing/comments/144v5c3/.../jnhqrgg/",
  "parentId": "t3_144v5c3",
  "username": "smokecat20",
  "communityName": "r/NewsWithJingjing",
  "body": "A true patriot.",
  "html": "<div class=\"md\"><p>A true patriot.</p>\n</div>",
  "upVotes": 3,
  "numberOfReplies": 0,
  "createdAt": "2023-06-09T05:00:00.000Z",
  "scrapedAt": "2023-06-09T05:23:32.025Z",
  "dataType": "comment"
}
```

#### 👥 Example Reddit Community

```json
{
  "id": "2qlhq",
  "name": "t5_2qlhq",
  "title": "Pizza",
  "description": "The home of pizza on reddit. An educational community devoted to the art of pizza making.",
  "over18": false,
  "numberOfMembers": 569724,
  "url": "https://www.reddit.com/r/Pizza/",
  "createdAt": "2008-08-26T00:03:48.000Z",
  "scrapedAt": "2023-06-09T05:16:55.443Z",
  "dataType": "community"
}
```

#### 👤 Example Reddit User

```json
{
  "id": "c3h2qmv",
  "url": "https://www.reddit.com/user/jancurn/",
  "username": "jancurn",
  "postKarma": 4,
  "commentKarma": 10,
  "over18": false,
  "createdAt": "2018-09-10T15:13:39.000Z",
  "scrapedAt": "2023-06-09T05:21:14.409Z",
  "dataType": "user"
}
```

***

### 🔧 Notes for developers

#### Reddit's 1,000 items limit

Any Reddit list (subreddit posts, search results) caps at ~1,000 items. This is a Reddit platform limit, not a scraper limitation.

> ✅ **Comments are NOT affected** — the scraper extracts all available comments from any single post URL, even thousands.

**Strategies to get more than 1,000 results:**

| Strategy | How |
|:---|:---|
| 🔀 **Combine sorts** | Scrape "New" first, then "Top", "Hot", "Controversial" |
| 🔍 **Use Search** | Keywords surface older posts not visible in main lists |
| 📅 **Time Filters** | Filter by "last year", "last month" to reveal different data |
| 🔄 **Date Limits** | Use `postDateLimit` for daily incremental scraping |

***

### ❓ FAQ

**Is Reddit scraping legal?**

> Scraping publicly available Reddit data is generally allowed. Use the scraper responsibly and comply with Reddit's terms of service and applicable laws.

**Can I use Reddit API to scrape Reddit?**

> Reddit's API is paid and requires authentication. This scraper works without API keys, tokens, or special authorization — just enter a URL or keyword and go.

**How can I scrape Reddit comments?**

> Enable comment scraping in your input (it's on by default). The scraper extracts comment text, author, score, timestamps, and HTML — from any post URL.

**Do I need proxies for scraping Reddit?**

> Highly recommended. Residential proxies are built-in with Apify Proxy. Datacenter proxies may work for small runs but get blocked more often.

**Can I scrape without login?**

> Yes — 100% public data scraping, no authentication needed.

**Can I export data via API?**

> Yes! Use the [Apify API](https://docs.apify.com/api/v2) with REST endpoints, `apify-client` for Node.js, or `apify-client` for Python. Also works with Zapier, Make, and other integrations.

**Why can't I get more than 1,000 posts?**

> This is a Reddit platform limitation, not a scraper issue. See the "Notes for developers" section above for strategies to work around it.

***

### 📦 Export formats

| Format | Best For |
|:---|:---|
| **JSON** | APIs and programmatic access |
| **CSV** | Excel, Google Sheets, analytics tools |
| **XML** | Structured imports and data pipelines |
| **RSS** | Feed readers and automated workflows |
| **HTML Table** | Quick previews and sharing |

***

### 🆘 Support

- 📖 [Apify Documentation](https://docs.apify.com)
- 🐛 [GitHub Issues](https://github.com) — report bugs or request features
- 💬 [Apify Discord](https://discord.com/invite/jyEM2PRvMU) — community support
- 📧 [Apify Support](https://apify.com/contact) — direct assistance

# Actor input Schema

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

Add one or more Reddit URLs to scrape directly. Supports subreddit pages, individual posts, user profiles, and search result URLs.

⚠️ When Start URLs are provided, all Search parameters below are ignored. Remove all URLs here if you want to use the Search Term field instead.

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

Enter one or more keywords to search Reddit. The scraper will search across posts, comments, communities, and users based on the toggles below.

💡 Leave empty if using Start URLs above.

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

Restrict the search to a specific subreddit. Enter the community name without 'r/' — e.g. 'programming', 'news', 'AskReddit'.

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

Search for posts matching your keyword. Returns post titles, body text, author, votes, and timestamps.

## `searchComments` (type: `boolean`):

Search for comments matching your keyword. Returns comment text, author, score, and timestamps.

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

Search for subreddits matching your keyword. Returns community name, description, member count, and creation date.

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

Search for Reddit users matching your keyword. Returns username, karma, account age, and profile details.

## `searchMedia` (type: `boolean`):

Filter search results to only include posts containing images or videos.

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

Choose how results are sorted:
• New — most recent first
• Top — highest-voted
• Hot — currently trending
• Relevance — best keyword matches
• Rising — gaining momentum
• Controversial — most debated

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

Filter search results by time window. Only applies to post searches.
• Use 'Last 24 hours' for fresh content
• Use 'Last week' for weekly roundups
• Use 'All time' for comprehensive results

## `includeNSFW` (type: `boolean`):

Include or exclude NSFW (Not Safe For Work / 18+) content from search results and scraped pages.

## `includeMediaLinks` (type: `boolean`):

Extract additional details for each post: upVotes, upVoteRatio, imageUrls, videoUrls, and numberOfComments.

⚠️ Uses a more detailed extraction method — may slightly increase run time.

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

Don't extract comments from posts. Enable this to speed up scraping when you only need post data.

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

Don't extract posts from user profiles. Enable this if you only need user metadata (karma, account age, etc.).

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

Skip extracting community/subreddit metadata (description, member count, etc.) — posts within the community will still be scraped.

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

Total number of items (posts + comments + communities + users) to save. The scraper stops once this limit is reached.

💡 Set higher for comprehensive scraping, lower for quick samples.

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

Maximum number of posts to scrape from each subreddit or search result page.

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

Maximum number of comments to extract from each post. Set to 0 to skip comments entirely.

⚠️ Higher values increase run time.

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

Maximum number of community search result pages to scrape.

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

Maximum number of user search result pages to scrape.

## `postDateLimit` (type: `string`):

Only scrape posts published after this date. Sort is automatically set to 'New' for chronological consistency.

💡 Great for incremental daily scraping runs.

## `commentDateLimit` (type: `string`):

Only scrape comments published after this date. Useful for filtering out old comments in active threads.

## `scrollTimeout` (type: `integer`):

Max time in seconds to wait for new content to load when scrolling. Increase if pages load slowly on your proxy.

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed request before giving up. Higher = more reliable but slower if Reddit is blocking.

## `ignoreStartUrls` (type: `boolean`):

Ignore the Start URLs field and only use Search Terms. Mainly a fix for integrations like Zapier where URLs can't be cleared.

## `debugMode` (type: `boolean`):

Show detailed logs for troubleshooting — full request/response details and internal processing steps. Only enable when debugging.

## `proxy` (type: `object`):

Configure proxy settings. Residential proxies are recommended for Reddit to avoid blocks and rate limits. Use Apify's built-in proxy or provide your own.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/Cooking/comments/1k3fzq6/is_there_really_any_ice_cream_recipe_worth_making/"
    }
  ],
  "searchPosts": true,
  "searchComments": false,
  "searchCommunities": false,
  "searchUsers": false,
  "searchMedia": false,
  "sort": "new",
  "includeNSFW": true,
  "includeMediaLinks": false,
  "skipComments": false,
  "skipUserPosts": false,
  "skipCommunity": false,
  "maxItems": 10,
  "maxPostCount": 10,
  "maxComments": 10,
  "maxCommunitiesCount": 2,
  "maxUserCount": 2,
  "scrollTimeout": 40,
  "maxRequestRetries": 6,
  "ignoreStartUrls": false,
  "debugMode": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.reddit.com/r/Cooking/comments/1k3fzq6/is_there_really_any_ice_cream_recipe_worth_making/"
        }
    ],
    "sort": "new",
    "maxItems": 10,
    "maxPostCount": 10,
    "maxComments": 10,
    "maxCommunitiesCount": 2,
    "maxUserCount": 2,
    "scrollTimeout": 40,
    "maxRequestRetries": 6,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mikolabs/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/Cooking/comments/1k3fzq6/is_there_really_any_ice_cream_recipe_worth_making/" }],
    "sort": "new",
    "maxItems": 10,
    "maxPostCount": 10,
    "maxComments": 10,
    "maxCommunitiesCount": 2,
    "maxUserCount": 2,
    "scrollTimeout": 40,
    "maxRequestRetries": 6,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mikolabs/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 '{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/Cooking/comments/1k3fzq6/is_there_really_any_ice_cream_recipe_worth_making/"
    }
  ],
  "sort": "new",
  "maxItems": 10,
  "maxPostCount": 10,
  "maxComments": 10,
  "maxCommunitiesCount": 2,
  "maxUserCount": 2,
  "scrollTimeout": 40,
  "maxRequestRetries": 6,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mikolabs/reddit-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/vanfdeHG30EcOIeJ5/builds/4UO5Y0yBhLR2lWBaI/openapi.json
