# Reddit Scraper (`crucial_binoculars/reddit-scraper-1`) Actor

- **URL**: https://apify.com/crucial_binoculars/reddit-scraper-1.md
- **Developed by:** [Iliya Musa](https://apify.com/crucial_binoculars) (community)
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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?

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 Scraper — Posts, Comments, Subreddits, Search & Video Transcripts

**The all-in-one Reddit scraper for Apify.** Extract Reddit posts, comments, subreddit communities, site-wide search results, and video/audio transcripts into clean, structured JSON, CSV, Excel, or XML — ready for research, monitoring, analytics, and automation.

Use this Actor to **scrape Reddit** without writing crawlers, managing sessions, or handling pagination yourself. Choose a mode, enter a subreddit name, post URL, or keyword, set how many items you want, and download the dataset.

Ideal if you are looking for a **Reddit post scraper**, **Reddit comments scraper**, **subreddit scraper**, **Reddit search scraper**, or a **Reddit video transcript extractor** in one Actor.

***

### Why this Reddit scraper

- **Seven scraping modes in one Actor** — community info, subreddit feeds, in-community search, a single post, comment threads, video transcripts, and Reddit-wide search.
- **Structured output** — every run writes a dataset you can export as JSON, CSV, Excel, XML, or RSS, or pull from the Apify API, Google Sheets, Make, Zapier, n8n, and custom webhooks.
- **Pagination handled for you** — list modes keep collecting until they reach your **Max items** cap or until Reddit has no more matching results.
- **Sort and timeframe controls** — pull hot, new, top, rising, or controversial content for hour, day, week, month, year, or all time.
- **Trim option** — return a lighter payload when you only need the essentials (faster exports, smaller files).
- **Simple input** — pick a mode, fill only that mode’s section, start the run.

***

### What you can scrape

| Mode | What you extract | Input you provide | Typical volume |
|---|---|---|---|
| **Subreddit details** | Community metadata: name, title, public description, subscriber count, active users, creation date, rules, and related fields | Subreddit name *or* subreddit URL | 1 item |
| **Subreddit posts** | The subreddit feed: titles, bodies, scores, comment counts, authors, flair, media, permalinks | Subreddit name | Up to **Max items** |
| **Subreddit search** | Posts *inside one community* that match a keyword | Subreddit name + search query | Up to **Max items** |
| **Post** | Full details of one Reddit submission | Post URL | 1 item |
| **Post comments** | Comment thread: body, author, score, awards, parent relationships, timestamps | Post URL | Up to **Max items** |
| **Post transcript** | Spoken text from a Reddit video or audio post | Post URL (+ optional language) | 1 item |
| **Search (site-wide)** | Reddit-wide results filtered to posts, comments, communities, or people | Search query | Up to **Max items** |

***

### How the Actor works

1. **You choose a scraping mode.** Only the numbered section that matches that mode is used. Fields in the other sections are ignored, so you never have to clear them.
2. **You set the target.** That is a subreddit name (without `r/`), a full Reddit post URL, or a search phrase — depending on the mode.
3. **You set Max items** (list modes only). This is the hard stop: the Actor collects results page by page and **stops as soon as that count is reached**, so you control run time and usage.
4. **The Actor fetches and normalizes.** It requests the matching Reddit data, follows pagination tokens automatically on list modes, and writes each result as its own dataset row with a `scrapedAt` timestamp.
5. **You export or integrate.** Open the dataset preview, download a file, or stream items into your stack via the Apify API and integrations.

Single-result modes (**Subreddit details**, **Post**, **Post transcript**) make one fetch and push one dataset item. List modes (**Subreddit posts**, **Subreddit search**, **Post comments**, **Search**) page forward until `maxItems` is hit or there is nothing left to collect.

If a run returns fewer rows than `maxItems`, the community, thread, or query simply does not have more matching results.

***

### Input

Required: **Scraping mode**. Everything else depends on the mode you picked.

| Field | Used when | Notes |
|---|---|---|
| `mode` | Always | One of the seven modes below |
| `maxItems` | List modes | Default `50`. Ignored for single-result modes |
| Subreddit name / URL | Subreddit details / posts / search | Name without `r/` (e.g. `AskReddit`) |
| Post URL | Post / comments / transcript | Full `reddit.com/.../comments/...` link |
| Search query | Subreddit search / site-wide search | Plain keywords or phrases |
| Sort / timeframe / filter / trim | Optional per mode | Refine ranking, recency, result type, and payload size |

#### Example inputs

**Top posts in a subreddit this month**

```json
{
  "mode": "SUBREDDIT_POSTS",
  "subredditPosts_subreddit": "Entrepreneur",
  "subredditPosts_sort": "top",
  "subredditPosts_timeframe": "month",
  "maxItems": 50
}
```

**Keyword search inside one community**

```json
{
  "mode": "SUBREDDIT_SEARCH",
  "subredditSearch_subreddit": "fitness",
  "subredditSearch_query": "home workout",
  "subredditSearch_sort": "top",
  "subredditSearch_timeframe": "year",
  "maxItems": 40
}
```

**All comments on a post**

```json
{
  "mode": "POST_COMMENTS",
  "postComments_url": "https://www.reddit.com/r/AskReddit/comments/1abc2de/example_post_title/",
  "maxItems": 200
}
```

**Reddit-wide search for brand mentions**

```json
{
  "mode": "SEARCH",
  "search_query": "\"acme crm\" OR \"acme software\"",
  "search_filter": "posts",
  "search_sort": "new",
  "search_timeframe": "week",
  "maxItems": 100
}
```

**Community profile**

```json
{
  "mode": "SUBREDDIT_DETAILS",
  "subredditDetails_subreddit": "AskReddit"
}
```

**Single post**

```json
{
  "mode": "POST",
  "post_url": "https://www.reddit.com/r/webscraping/comments/1abc2de/example_post_title/"
}
```

**Video / audio transcript**

```json
{
  "mode": "POST_TRANSCRIPT",
  "postTranscript_url": "https://www.reddit.com/r/youseeingthisshit/comments/1abc2de/example_video_post/",
  "postTranscript_language": "en"
}
```

***

### Output

Every successful run writes to the default **dataset**. Each row is one result (one post, one comment, one community, one search hit, or one transcript), plus:

| Field | Description |
|---|---|
| `scrapedAt` | ISO-8601 timestamp of when the item was collected |

The remaining fields come from the Reddit item itself (title, body, author, score, permalink, and so on). Exact keys can vary slightly by mode and by content type (text post vs. link vs. video). Use **Trim** when you want a smaller, flatter object.

Export from the run page (**JSON / CSV / Excel / XML / RSS**) or fetch programmatically:

```
https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json
```

#### Output example — subreddit posts / search posts

```json
{
  "scrapedAt": "2026-10-28T12:04:11.000Z",
  "id": "1abc2de",
  "subreddit": "AskReddit",
  "title": "What's the most underrated productivity tip you've ever gotten?",
  "author": "example_user",
  "score": 4213,
  "upvote_ratio": 0.94,
  "num_comments": 812,
  "created_utc": 1757268131,
  "permalink": "/r/AskReddit/comments/1abc2de/whats_the_most_underrated_productivity_tip/",
  "url": "https://www.reddit.com/r/AskReddit/comments/1abc2de/whats_the_most_underrated_productivity_tip/",
  "selftext": "",
  "link_flair_text": null,
  "over_18": false,
  "is_video": false
}
```

#### Output example — post comments

```json
{
  "scrapedAt": "2026-10-28T12:06:40.000Z",
  "id": "kxy1234",
  "author": "helpful_commenter",
  "body": "Time-blocking the first 90 minutes of the day before opening email.",
  "score": 186,
  "created_utc": 1757270400,
  "parent_id": "t3_1abc2de",
  "link_id": "t3_1abc2de",
  "permalink": "/r/AskReddit/comments/1abc2de/whats_the_most_underrated_productivity_tip/kxy1234/",
  "is_submitter": false
}
```

#### Output example — subreddit details

```json
{
  "scrapedAt": "2026-10-28T12:01:02.000Z",
  "display_name": "AskReddit",
  "title": "Ask Reddit...",
  "public_description": "AskReddit is the place to ask and answer thought-provoking questions.",
  "subscribers": 48000000,
  "active_user_count": 42000,
  "created_utc": 1201232640,
  "over18": false,
  "url": "/r/AskReddit/"
}
```

#### Output example — video transcript

```json
{
  "scrapedAt": "2026-10-28T12:08:19.000Z",
  "url": "https://www.reddit.com/r/youseeingthisshit/comments/1abc2de/example_video_post/",
  "language": "en",
  "transcript": "Okay so you're not going to believe what happens next..."
}
```

Field names in live data may include additional Reddit attributes (media, awards, flair, thumbnails, `preview`, `gallery_data`, and similar). Open the dataset preview after the first run to see the full shape for the mode you chose.

***

### Popular use cases

- **Brand and product monitoring** — scrape Reddit search and comments for your company, product, or competitors and track sentiment over time.
- **Market and audience research** — read what a niche subreddit is asking, recommending, and complaining about before you build or write.
- **Content ideation** — pull top posts for the week or month to find proven headlines and angles.
- **SEO and social listening** — mine threads for phrases, objections, and questions people actually type.
- **Lead and community research** — find active subreddits, high-karma contributors, and threads where buyers already describe the problem you solve.
- **Customer support intelligence** — collect comments under product posts to surface bugs, feature requests, and workarounds.
- **Academic and dataset building** — assemble posts and comments on a topic for analysis, reporting, or model evaluation.
- **Video research** — extract transcripts from Reddit video posts so spoken content is searchable and quotable.

***

### Tips for high-quality runs

- Subreddit names go **without** `r/` — use `AskReddit`, not `r/AskReddit`.
- Post URLs must be the **full post link**, not the subreddit homepage.
- Pair `sort: top` with a **timeframe** (`day`, `week`, `month`, `year`, `all`) to get the best posts from a period instead of mixing eras.
- Start with **20–50 Max items**, confirm the dataset looks right, then raise the cap.
- Turn **Trim** on when you are piping results into spreadsheets and only need core fields.
- Site-wide **Search** + `filter` lets you restrict to posts, comments, communities, or people so the dataset stays consistent.
- If you need both a post and its comments, run **Post** and **Post comments** as two runs (or two Actor tasks) on the same URL.

***

### Integrations

Results are a standard Apify dataset, so you can:

- Download JSON, CSV, Excel, XML, or RSS from the run
- Schedule the Actor (hourly / daily / weekly) for ongoing Reddit monitoring
- Connect **Make**, **Zapier**, **n8n**, **Google Sheets**, or webhooks
- Call the Actor and dataset from any language via the [Apify API](https://docs.apify.com/api/v2)

***

### FAQ

**Is this a Reddit post scraper and a comments scraper?**\
Yes. Use **Subreddit posts**, **Post**, or **Search** for submissions, and **Post comments** for thread replies.

**Can I scrape a whole subreddit?**\
Use **Subreddit posts** with your chosen sort (hot, new, top, rising, controversial) and raise **Max items** to the volume you need. The Actor pages automatically and stops at your cap.

**Can I search Reddit by keyword?**\
Yes — **Search** is site-wide (with optional filters). **Subreddit search** limits the same idea to one community.

**Does it extract Reddit video transcripts?**\
Yes. Point **Post transcript** at a video or audio post URL and optionally set a language code such as `en`.

**What format are the results?**\
Dataset items (JSON objects). Export to CSV or Excel for spreadsheets, or keep JSON for pipelines.

**Why did I get fewer items than Max items?**\
There were not enough matching posts, comments, or search hits. That is expected on small communities, new threads, or narrow queries.

**Do I need a Reddit account?**\
No. Provide the public subreddit name, post URL, or search query in the input form.

***

### Keywords

Reddit scraper, scrape Reddit, Reddit data extractor, Reddit crawler, Reddit posts scraper, Reddit comments scraper, subreddit scraper, Reddit search scraper, Reddit thread scraper, Reddit community scraper, extract Reddit comments, Reddit JSON CSV Excel, Reddit video transcript, Reddit monitoring, social listening Reddit, Apify Reddit Actor.

# Actor input Schema

## `mode` (type: `string`):

What you want to scrape. Only the matching numbered section below is used.

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

The most results you want back. Runs stop as soon as this many items are collected, so a smaller number finishes faster and uses less. Not used for the single-result modes (Subreddit details, Post, Post transcript).

## `subredditDetails_subreddit` (type: `string`):

e.g. AskReddit (without r/). Leave empty if you provide a URL instead.

## `subredditDetails_url` (type: `string`):

Full subreddit URL. Alternative to Subreddit name above — fill in only one of the two.

## `subredditDetails_cacheMaxAge` (type: `integer`):

Optional. Leave empty for the default.

## `subredditPosts_subreddit` (type: `string`):

e.g. webscraping (without r/).

## `subredditPosts_sort` (type: `string`):

Optional. Listing sort order.

## `subredditPosts_timeframe` (type: `string`):

Optional. Only meaningful with sort = top or controversial.

## `subredditPosts_trim` (type: `boolean`):

Optional. Return a lighter version of each post object.

## `subredditPosts_cacheMaxAge` (type: `integer`):

Optional. Leave empty for the default.

## `subredditSearch_subreddit` (type: `string`):

e.g. fitness (without r/).

## `subredditSearch_query` (type: `string`):

e.g. push ups

## `subredditSearch_sort` (type: `string`):

Optional.

## `subredditSearch_timeframe` (type: `string`):

Optional.

## `post_url` (type: `string`):

Full URL of the Reddit post.

## `postComments_url` (type: `string`):

Full URL of the Reddit post whose comments you want.

## `postComments_trim` (type: `boolean`):

Optional. Return a lighter version of each comment object.

## `postTranscript_url` (type: `string`):

Full URL of the Reddit video/audio post.

## `postTranscript_language` (type: `string`):

Optional. Transcript language code.

## `postTranscript_cacheMaxAge` (type: `integer`):

Optional. Leave empty for the default.

## `search_query` (type: `string`):

e.g. web scraping

## `search_filter` (type: `string`):

Optional. What kind of results to return.

## `search_sort` (type: `string`):

Optional.

## `search_timeframe` (type: `string`):

Optional.

## `search_trim` (type: `boolean`):

Optional. Return a lighter version of each result object.

## Actor input object example

```json
{
  "mode": "SUBREDDIT_POSTS",
  "maxItems": 50,
  "subredditDetails_subreddit": "AskReddit",
  "subredditPosts_subreddit": "webscraping",
  "subredditPosts_trim": false,
  "subredditSearch_subreddit": "fitness",
  "subredditSearch_query": "push ups",
  "post_url": "https://www.reddit.com/r/webscraping/comments/1abc2de/example_post_title/",
  "postComments_url": "https://www.reddit.com/r/AskReddit/comments/1abc2de/example_post_title/",
  "postComments_trim": false,
  "postTranscript_url": "https://www.reddit.com/r/youseeingthisshit/comments/1abc2de/example_video_post/",
  "postTranscript_language": "en",
  "search_query": "web scraping",
  "search_trim": false
}
```

# Actor output Schema

## `overview` (type: `string`):

Dataset of scraped Reddit items. Open in Console to switch between Overview and All fields.

# 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 = {
    "subredditDetails_subreddit": "AskReddit",
    "subredditPosts_subreddit": "webscraping",
    "subredditSearch_subreddit": "fitness",
    "subredditSearch_query": "push ups",
    "post_url": "https://www.reddit.com/r/webscraping/comments/1abc2de/example_post_title/",
    "postComments_url": "https://www.reddit.com/r/AskReddit/comments/1abc2de/example_post_title/",
    "postTranscript_url": "https://www.reddit.com/r/youseeingthisshit/comments/1abc2de/example_video_post/",
    "postTranscript_language": "en",
    "search_query": "web scraping"
};

// Run the Actor and wait for it to finish
const run = await client.actor("crucial_binoculars/reddit-scraper-1").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 = {
    "subredditDetails_subreddit": "AskReddit",
    "subredditPosts_subreddit": "webscraping",
    "subredditSearch_subreddit": "fitness",
    "subredditSearch_query": "push ups",
    "post_url": "https://www.reddit.com/r/webscraping/comments/1abc2de/example_post_title/",
    "postComments_url": "https://www.reddit.com/r/AskReddit/comments/1abc2de/example_post_title/",
    "postTranscript_url": "https://www.reddit.com/r/youseeingthisshit/comments/1abc2de/example_video_post/",
    "postTranscript_language": "en",
    "search_query": "web scraping",
}

# Run the Actor and wait for it to finish
run = client.actor("crucial_binoculars/reddit-scraper-1").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 '{
  "subredditDetails_subreddit": "AskReddit",
  "subredditPosts_subreddit": "webscraping",
  "subredditSearch_subreddit": "fitness",
  "subredditSearch_query": "push ups",
  "post_url": "https://www.reddit.com/r/webscraping/comments/1abc2de/example_post_title/",
  "postComments_url": "https://www.reddit.com/r/AskReddit/comments/1abc2de/example_post_title/",
  "postTranscript_url": "https://www.reddit.com/r/youseeingthisshit/comments/1abc2de/example_video_post/",
  "postTranscript_language": "en",
  "search_query": "web scraping"
}' |
apify call crucial_binoculars/reddit-scraper-1 --silent --output-dataset

```

## MCP server setup

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

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/TyiJiiAjb22WhLzgC/builds/k25DdQIga2oN63MsK/openapi.json
