# Reddit Subreddit Posts Scraper | Fast Bulk Feed Export (`clearpath/reddit-subreddit-posts-scraper`) Actor

Scrape 1,000+ posts per subreddit in seconds. Hot, new, top, rising, controversial feeds with time filters. Optional comment fetching (up to 1,000 per post). Bulk subreddit input via names, URLs, or CSV.

- **URL**: https://apify.com/clearpath/reddit-subreddit-posts-scraper.md
- **Developed by:** [ClearPath](https://apify.com/clearpath) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 9 total users, 7 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 posts

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/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 Subreddit Posts Scraper | Export Feed Data in Bulk (2026)

<blockquote style="border-left:4px solid #FF4500;background:#FFF5F2;padding:12px 16px">
<span style="font-size:16px;font-weight:700;color:#1C1917">108 fields per post, 100 posts in ~1 second</span> <span style="font-size:15px;color:#57534E"> — scrape any subreddit feed with full metadata.</span>
</blockquote>

Pick a subreddit, choose your sort order, and get back structured data for every post. Hot, new, top, rising, controversial. Optional comments. One subreddit or hundreds at once.

<table style="width:100%">
<tr>
<td colspan="4" style="padding:10px 14px;background:#006D77;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Clearpath Reddit Suite</span>
<span style="color:#EDF6F9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Search, analyze, and monitor Reddit at scale</span>
</td>
</tr>
<tr>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;background:#EDF6F9;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="color:#006D77;font-size:12px;font-weight:600">&#10148; You are here</span><br>
<a href="https://apify.com/clearpath/reddit-subreddit-posts-scraper" style="color:#006D77;text-decoration:none;font-weight:700;font-size:14px">Subreddit Posts</a><br>
<span style="color:#78716C;font-size:12px">Feed scraper with 108 fields</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:25%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-AcNroNEs63pztgCy6-BEG4cWB3Re-reddit-user-posts-comments-scraper-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/clearpath/reddit-post-comments-bulk-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">Post & Comments</a><br>
<span style="color:#78716C;font-size:12px">Full comment tree scraper</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:25%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-LA9VzVDphD8rUCFnW-fLjTXd3OC3-reddit-profile-scraper-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/clearpath/reddit-profile-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">Profile Scraper</a><br>
<span style="color:#78716C;font-size:12px">Bulk profile & karma lookup</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:25%">
<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/DSvMCAwsufMyZeLyt-actor-REPQBdd4quAa6q7RN-exwLn5TkWz-reddit-user-posts-comments-scraper-logo.png" width="24" height="24" style="vertical-align:middle"> &nbsp;<a href="https://apify.com/clearpath/reddit-user-content-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">User Content</a><br>
<span style="color:#78716C;font-size:12px">Posts & comments history</span>
</td>
</tr>
</table>

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start building with this data.

````

Reddit Subreddit Posts Scraper (clearpath/reddit-subreddit-posts-scraper) on Apify scrapes posts from any public subreddit feed. Returns 108 fields per post including title, author, score, upvote ratio, comment count, creation date, flair, awards, media metadata, and subreddit subscriber count. 5 sort orders: hot, new, top, rising, controversial. Time filters for top/controversial: hour, day, week, month, year, all. Optional top comments per post (up to 1,000). Input: single subreddit name, array of names/URLs, or uploaded CSV/TXT file. Any format: plain name, r/name, full URL. Max 1,000 posts per subreddit per run. Output: JSON array with post rows (108 fields) and optional comment rows (18 fields). Pricing: $1.99 per 1,000 posts + $1.00 per 1,000 comments (first 100 comments per post free). Free tier: 5 lifetime runs, 100 posts per run. Apify token required.

````

### Key Features

- **108 fields per post** — score, upvote ratio, flair, awards, media URLs, crosspost data, subreddit subscriber count, and 90+ more fields from the full Reddit feed response
- **5 sort orders** — hot, new, top, rising, controversial. Add time filters (hour, day, week, month, year, all) for top and controversial sorts
- **Optional comments** — toggle on to fetch up to 1,000 top comments per post, with author, score, depth, and reply structure. First 100 comments per post are free
- **Bulk subreddit input** — paste names, add URLs, or upload a CSV/TXT file. Mix formats freely: `AskReddit`, `r/AskReddit`, `reddit.com/r/AskReddit`
- **Fast** — posts-only mode scrapes 100 posts in roughly 1 second. Multiple subreddits run in parallel

### How to Scrape Reddit Subreddit Posts

#### Single subreddit, default settings

Paste a subreddit name. The actor fetches up to 100 hot posts with all 108 fields.

```json
{
    "subreddit": "AskReddit"
}
````

All of these formats work interchangeably:

```json
{
    "subreddit": "r/AskReddit"
}
```

```json
{
    "subreddit": "https://www.reddit.com/r/AskReddit"
}
```

#### Top posts of the past week

Set `sort` to `top` and `timeFilter` to `week` to get the highest-scoring posts from the last 7 days.

```json
{
    "subreddit": "technology",
    "sort": "top",
    "timeFilter": "week",
    "maxPostsPerSubreddit": 200
}
```

#### Rising posts (catch trends early)

Rising surfaces posts that are gaining traction right now. Useful for monitoring subreddits for breaking content.

```json
{
    "subreddit": "wallstreetbets",
    "sort": "rising"
}
```

#### Posts with comments

Enable `includeComments` to fetch top comments for each post. Each post gets up to `maxCommentsPerPost` comments (default 1,000).

```json
{
    "subreddit": "AskReddit",
    "sort": "top",
    "timeFilter": "day",
    "maxPostsPerSubreddit": 50,
    "includeComments": true,
    "maxCommentsPerPost": 200
}
```

The first 100 comments per post are included free. Comments beyond 100 are charged at $1.00 per 1,000.

#### Multiple subreddits in one run

Use the `subreddits` array for small batches. Mix any input format.

```json
{
    "subreddits": [
        "AskReddit",
        "r/technology",
        "https://www.reddit.com/r/science"
    ],
    "sort": "hot",
    "maxPostsPerSubreddit": 100
}
```

Subreddits run in parallel across multiple sessions, so adding more subreddits doesn't proportionally increase run time.

#### Bulk from file

Upload a `.txt` or `.csv` file through the Apify Console, or point to a hosted file URL. TXT files expect one subreddit per line. CSV files auto-detect a `subreddit`, `sub`, or `name` column.

```json
{
    "subredditsFile": "https://example.com/my-subreddits.csv",
    "sort": "new",
    "maxPostsPerSubreddit": 500
}
```

Drag and drop a file directly into the "Subreddits file" field in the Apify Console for the fastest setup.

#### Controversial posts, all time

Find the most divisive posts ever submitted to a subreddit.

```json
{
    "subreddit": "unpopularopinion",
    "sort": "controversial",
    "timeFilter": "all",
    "maxPostsPerSubreddit": 100
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `subreddit` | string | — | A single subreddit name or URL |
| `subreddits` | string\[] | `[]` | Multiple subreddit names or URLs. Use "Bulk edit" to paste a list |
| `subredditsFile` | string | — | Upload a `.txt`/`.csv` file, or paste a URL to a hosted file |
| `sort` | enum | `hot` | Sort order: `hot`, `new`, `top`, `rising`, `controversial` |
| `timeFilter` | enum | `all` | Time range: `hour`, `day`, `week`, `month`, `year`, `all`. Only applies to `top` and `controversial` sorts |
| `maxPostsPerSubreddit` | integer | `100` | Max posts to scrape per subreddit (1-1,000). Reddit limits feeds to ~1,000 posts |
| `includeComments` | boolean | `false` | Fetch top comments for each post |
| `maxCommentsPerPost` | integer | `1000` | Max comments per post when comments are enabled (1-1,000) |

At least one of `subreddit`, `subreddits`, or `subredditsFile` is required.

#### Sort order reference

| Value | Behavior |
|-------|----------|
| `hot` | Reddit's default. Balances recency and engagement to surface currently active posts |
| `new` | Most recent posts first, regardless of score |
| `top` | Highest score (upvotes minus downvotes). Combine with `timeFilter` to control the time window |
| `rising` | Posts gaining momentum right now. The feed is smaller but catches trends before they hit the front page |
| `controversial` | Posts with roughly equal upvotes and downvotes. Combine with `timeFilter` for different windows |

#### Time filter reference

| Value | Window |
|-------|--------|
| `hour` | Past 60 minutes |
| `day` | Past 24 hours |
| `week` | Past 7 days |
| `month` | Past 30 days |
| `year` | Past 365 days |
| `all` | All time (default) |

Time filters only apply to `top` and `controversial` sort orders. They are ignored for `hot`, `new`, and `rising`.

### What Data Can You Extract from Subreddit Posts?

![Output Example](https://iili.io/BxQUuZF.gif)

The output contains two row types: **post** rows and **comment** rows (when comments are enabled). Each post row contains 108 fields from the full Reddit feed response. The `_subreddit` field on every row lets you group results when scraping multiple subreddits.

#### Post row (108 fields, key fields shown)

```json
{
    "_type": "post",
    "_subreddit": "AskReddit",
    "_status": "found",
    "title": "What horrifying statistic genuinely jarred you when you first heard it?",
    "author": "ordrius098",
    "score": 2175,
    "upvote_ratio": 0.96,
    "num_comments": 1932,
    "created_utc": 1775268248.0,
    "permalink": "/r/AskReddit/comments/1sbwqg1/...",
    "url": "https://www.reddit.com/r/AskReddit/comments/1sbwqg1/...",
    "selftext": "",
    "domain": "self.AskReddit",
    "is_self": true,
    "over_18": false,
    "spoiler": false,
    "stickied": false,
    "locked": false,
    "num_crossposts": 0,
    "subreddit_subscribers": 58102423
}
```

Every post includes the complete Reddit feed response. Beyond the key fields above, you also get:

**Content and media:**
`selftext_html`, `thumbnail`, `thumbnail_height`, `thumbnail_width`, `preview` (image resolutions), `media` (video/embed metadata), `media_embed`, `secure_media`, `secure_media_embed`, `gallery_data`, `media_metadata`, `is_gallery`, `is_video`, `is_reddit_media_domain`, `post_hint`

**Scores and engagement:**
`score`, `ups`, `downs`, `upvote_ratio`, `num_comments`, `num_crossposts`, `total_awards_received`, `gilded`, `all_awardings`, `top_awarded_type`, `awarders`

**Author and flair:**
`author`, `author_fullname`, `author_flair_text`, `author_flair_css_class`, `author_flair_type`, `author_flair_template_id`, `author_flair_richtext`, `author_flair_background_color`, `author_flair_text_color`, `author_premium`, `author_patreon_flair`

**Post flair and categorization:**
`link_flair_text`, `link_flair_css_class`, `link_flair_type`, `link_flair_template_id`, `link_flair_richtext`, `link_flair_background_color`, `link_flair_text_color`, `category`

**Subreddit metadata:**
`subreddit`, `subreddit_id`, `subreddit_subscribers`, `subreddit_name_prefixed`, `subreddit_type`

**Moderation and status:**
`stickied`, `locked`, `removed_by_category`, `banned_by`, `approved_by`, `mod_reason_by`, `mod_reason_title`, `can_mod_post`, `distinguished`

**URLs and identifiers:**
`id`, `name`, `permalink`, `url`, `url_overridden_by_dest`, `domain`, `full_link`

**Flags:**
`over_18`, `spoiler`, `is_self`, `is_video`, `is_original_content`, `is_meta`, `is_crosspostable`, `is_robot_indexable`, `hide_score`, `archived`, `contest_mode`, `pinned`, `no_follow`, `send_replies`

#### Comment row (when includeComments is enabled)

```json
{
    "_type": "comment",
    "_post_id": "t3_1sbwqg1",
    "_subreddit": "AskReddit",
    "_status": "found",
    "id": "t1_mnx5qs6",
    "author": "leninzen",
    "score": 1202,
    "depth": 0,
    "parentId": null,
    "body": "You do see it slowly build tbh...",
    "createdAt": "2026-04-04T13:03:54Z",
    "editedAt": null,
    "permalink": "/r/AskReddit/comments/1sbwqg1/.../mnx5qs6/",
    "isStickied": false,
    "isLocked": false,
    "isScoreHidden": false,
    "distinguishedAs": null,
    "authorFlair": null,
    "isDeleted": false,
    "childCount": 11
}
```

**Comment fields:**

| Field | Type | Description |
|-------|------|-------------|
| `_type` | string | Always `"comment"` |
| `_post_id` | string | Parent post ID (`t3_` prefixed), links this comment to its post |
| `_subreddit` | string | Subreddit name |
| `_status` | string | `found` |
| `id` | string | Comment ID (`t1_` prefixed) |
| `author` | string | Username, or `null` for deleted comments |
| `score` | integer | Upvotes minus downvotes |
| `createdAt` | string | ISO 8601 creation timestamp |
| `editedAt` | string/null | ISO 8601 edit timestamp, or `null` if never edited |
| `depth` | integer | Nesting level. `0` = top-level reply, `1` = reply to a top-level, etc. |
| `parentId` | string/null | Parent comment ID, or `null` for top-level comments |
| `permalink` | string | Relative URL path to the comment |
| `body` | string | Comment text in markdown |
| `isStickied` | boolean | Pinned by a moderator |
| `isLocked` | boolean | Replies disabled |
| `isScoreHidden` | boolean | Score hidden by subreddit rules |
| `distinguishedAs` | string/null | `"moderator"`, `"admin"`, or `null` |
| `authorFlair` | string/null | User's flair text in the subreddit |
| `isDeleted` | boolean | Deleted by author or removed by moderators |
| `childCount` | integer | Number of direct replies |

### Comments Add-on

Comments are optional and off by default. When you enable `includeComments`, the actor fetches the top comments for each post in a separate pass after collecting all posts.

#### How the pricing works

| Component | Cost |
|-----------|------|
| Posts | $1.99 per 1,000 posts |
| Comments (first 100 per post) | Free |
| Comments (beyond 100 per post) | $1.00 per 1,000 comments |

The free comment tier means most use cases cost nothing extra. If you scrape 50 posts with `maxCommentsPerPost` set to 100, you pay only for the posts. The comment charge only kicks in for the 101st comment and beyond on each individual post.

#### Cost examples

| Scenario | Posts | Comments | Estimated cost |
|----------|-------|----------|----------------|
| 100 posts, no comments | 100 | 0 | ~$0.20 |
| 100 posts, 100 comments each | 100 | 10,000 (all free) | ~$0.20 |
| 50 posts, 500 comments each | 50 | 25,000 (5,000 free, 20,000 charged) | ~$0.10 + $20.00 = ~$20.10 |
| 1,000 posts, no comments | 1,000 | 0 | ~$1.99 |

For large comment volumes, consider [Reddit Post & Comments Scraper](https://apify.com/clearpath/reddit-post-comments-bulk-scraper) instead. It is built specifically for deep comment extraction with full tree expansion, six sort orders, and Q\&A filtering.

### Pricing — Pay Per Event (PPE)

<table>
<tr>
<td style="padding:12px 16px;background:#FFF7ED;border:2px solid #E29578;border-radius:6px">
<span style="font-size:18px;font-weight:700;color:#E29578">$1.99 per 1,000 posts&nbsp;&nbsp;&bull;&nbsp;&nbsp;$1.00 per 1,000 comments</span>
</td>
</tr>
</table>

You pay only for what you scrape. Posts and comments are charged separately. The first 100 comments per post are always free.

**Free tier:** 5 lifetime runs with up to 100 posts per run. No credit card needed to try the actor.

**Budget controls:** Set a spending limit on any run from the Apify Console. The actor stops automatically when the budget is reached, and you keep all data scraped up to that point.

### Use Cases

**Subreddit monitoring.** Track a subreddit's front page over time. Schedule daily runs with `sort: "hot"` to capture what's trending. Compare scores, comment counts, and upvote ratios across snapshots to detect shifts in community interest. Export to Google Sheets via Apify integrations for automatic dashboards.

**Trend detection.** Use `sort: "rising"` to catch posts gaining traction before they hit the front page. Rising surfaces content early in its lifecycle, giving you a head start on breaking topics, viral content, and emerging discussions. Ideal for brand monitoring, news tracking, and competitive research.

**Content research.** Pull top posts from niche subreddits to understand what resonates with specific audiences. The `upvote_ratio` field tells you how divisive a topic is: 0.95+ means near-universal agreement, while 0.50-0.60 indicates a split community. Flair data reveals the content categories a community values most. Combine with time filters to study seasonal patterns.

**Dataset building.** Export structured subreddit data for analysis, machine learning, or data journalism. The 108 fields per post give you more metadata than most Reddit datasets, including media URLs, crosspost chains, award breakdowns, and author flair. Download as JSON, CSV, or Excel from the Apify Console, or pipe directly into your data pipeline via the Apify API.

**Competitor analysis.** Scrape brand-related subreddits to see what customers discuss, complain about, and recommend. Compare engagement metrics across multiple subreddits in a single run. The `num_comments` and `upvote_ratio` fields are strong signals for how much discussion a topic generates and whether the sentiment skews positive or negative.

**Academic research.** Study posting patterns, community dynamics, and content virality. The `created_utc` timestamp combined with score data lets you analyze how posts perform over different time windows. Crosspost fields reveal how content spreads between communities. Schedule recurring runs to build longitudinal datasets.

**Lead generation.** Monitor subreddits where your target audience asks for recommendations. Posts in subreddits like r/SaaS, r/Entrepreneur, or r/freelance often contain explicit purchase intent. Export the data and filter by flair or keywords to find high-intent threads.

**SEO and content strategy.** Analyze which topics generate the most engagement in your industry's subreddits. Use `sort: "top"` with `timeFilter: "month"` to find the highest-performing content themes. The `title` and `selftext` fields combined with engagement metrics reveal what your audience cares about most.

### FAQ

**How many fields do I get per post?**
108 fields per post. This includes everything Reddit returns in its feed response: scores, ratios, flair, awards, media metadata, crosspost data, moderation flags, and subreddit information. You get the complete raw data, not a subset.

**What's the maximum number of posts I can scrape?**
Up to 1,000 posts per subreddit per run. This is a Reddit limitation, not an actor limitation. For most subreddits, the `new` sort provides the best coverage since it returns posts chronologically. Schedule recurring runs if you need ongoing coverage beyond 1,000 posts.

**How fast is it?**
Posts-only mode scrapes 100 posts in roughly 1 second. Adding comments increases run time proportionally. Multiple subreddits run in parallel across sessions, so scraping 10 subreddits takes about the same time as scraping 2.

**What happens if a subreddit doesn't exist?**
Non-existent and private subreddits are included in the output with `"_status": "not_found"`. You are not charged for failed subreddits.

**What subreddit formats are accepted?**
Plain name (`AskReddit`), prefixed (`r/AskReddit`), full URL (`https://reddit.com/r/AskReddit`), old/new/mobile URLs, and any combination of these in the same run. The actor normalizes all inputs before processing.

**When should I use time filters?**
Time filters apply only to `top` and `controversial` sort orders. For example, `sort: "top"` with `timeFilter: "week"` returns the highest-scoring posts from the past 7 days. The filters are ignored for `hot`, `new`, and `rising`.

**How do comments work?**
When `includeComments` is enabled, the actor fetches the top comments for each scraped post. Comments are sorted by confidence (Reddit's "best" algorithm). You can set `maxCommentsPerPost` from 1 to 1,000. Comments appear as separate rows in the output, linked to their parent post by `_post_id`.

**Are the first 100 comments really free?**
Yes. For each post, the first 100 comments cost nothing. Billing only starts at the 101st comment on that specific post. If you keep `maxCommentsPerPost` at 100 or below, you pay zero for comments.

**What's the difference between this and the Post & Comments Scraper?**
This actor starts from a subreddit feed and gives you posts with optional comments. The [Post & Comments Scraper](https://apify.com/clearpath/reddit-post-comments-bulk-scraper) starts from specific post URLs and specializes in deep comment extraction: full tree expansion, six sort orders, Q\&A filtering, unlimited comments. Use this actor when you want to scrape a subreddit's feed. Use the other when you already have post URLs and need complete comment trees.

**Can I schedule recurring runs?**
Yes. Set up a schedule in the Apify Console to run the actor daily, hourly, or at any interval. Combine with `sort: "new"` to build a continuous feed archive.

**Can I use this with the Apify API or integrations?**
Yes. Call the actor via the [Apify API](https://docs.apify.com/api/v2), schedule recurring runs, or connect to integrations like webhooks, Zapier, Make, or Google Sheets. The output is standard JSON that works with any downstream pipeline.

**What output formats are available?**
The Apify Console lets you download results as JSON, CSV, Excel, XML, or RSS. You can also access the dataset directly via the Apify API in any of these formats. CSV and Excel flatten nested fields automatically, so media metadata and award arrays become readable columns.

**How do I scrape NSFW subreddits?**
NSFW subreddits work the same as any other subreddit. Posts from NSFW communities include `"over_18": true` in the output, so you can filter them in your downstream pipeline if needed.

**Does it work with private or quarantined subreddits?**
Private subreddits return a `"_status": "not_found"` row since their content is not publicly accessible. Quarantined subreddits may return partial or no results depending on their access restrictions. You are not charged for subreddits that fail to load.

### Support

- **Bugs**: Issues tab
- **Features**: Email or issues
- **Email**: max@mapa.slmail.me

### Legal Compliance

Extracts publicly available data. Users must comply with Reddit terms and data protection regulations (GDPR, CCPA).

***

*Bulk subreddit feed scraping. 108 fields per post, 5 sort orders, optional comments, from one subreddit or hundreds.*

# Actor input Schema

## `subreddit` (type: `string`):

A single subreddit name or URL.

## `maxPostsPerSubreddit` (type: `integer`):

Maximum number of posts to scrape per subreddit (Reddit limits to ~1,000).

## `subreddits` (type: `array`):

Add multiple subreddit names or URLs. Use 'Bulk edit' to paste a list, or upload a .txt/.csv file. Any format accepted.

## `subredditsFile` (type: `string`):

Upload a .txt or .csv file, or paste a URL. TXT: one subreddit per line. CSV: auto-detects 'subreddit' column.

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

How to sort posts in the feed.

## `timeFilter` (type: `string`):

Time range for 'top' and 'controversial' sort orders. Ignored for other sorts.

## `includeComments` (type: `boolean`):

Fetch top comments for each post. First 100 comments per post are included free. Comments beyond 100 are charged at $0.001 each.

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

Maximum comments to fetch per post when comments are enabled. Uses a single fast request for up to 500, two requests for 501-1000.

## Actor input object example

```json
{
  "subreddit": "AskReddit",
  "maxPostsPerSubreddit": 100,
  "subreddits": [],
  "sort": "hot",
  "timeFilter": "all",
  "includeComments": false,
  "maxCommentsPerPost": 1000
}
```

# 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 = {
    "subreddit": "AskReddit",
    "maxCommentsPerPost": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("clearpath/reddit-subreddit-posts-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 = {
    "subreddit": "AskReddit",
    "maxCommentsPerPost": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("clearpath/reddit-subreddit-posts-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 '{
  "subreddit": "AskReddit",
  "maxCommentsPerPost": 1000
}' |
apify call clearpath/reddit-subreddit-posts-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Subreddit Posts Scraper | Fast Bulk Feed Export",
        "description": "Scrape 1,000+ posts per subreddit in seconds. Hot, new, top, rising, controversial feeds with time filters. Optional comment fetching (up to 1,000 per post). Bulk subreddit input via names, URLs, or CSV.",
        "version": "0.0",
        "x-build-id": "YXL2tkouHG3dQwHdq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/clearpath~reddit-subreddit-posts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-clearpath-reddit-subreddit-posts-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/clearpath~reddit-subreddit-posts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-clearpath-reddit-subreddit-posts-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/clearpath~reddit-subreddit-posts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-clearpath-reddit-subreddit-posts-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",
                "properties": {
                    "subreddit": {
                        "title": "Subreddit",
                        "type": "string",
                        "description": "A single subreddit name or URL."
                    },
                    "maxPostsPerSubreddit": {
                        "title": "Max posts per subreddit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of posts to scrape per subreddit (Reddit limits to ~1,000).",
                        "default": 100
                    },
                    "subreddits": {
                        "title": "Multiple subreddits or file upload",
                        "type": "array",
                        "description": "Add multiple subreddit names or URLs. Use 'Bulk edit' to paste a list, or upload a .txt/.csv file. Any format accepted.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "subredditsFile": {
                        "title": "Subreddits file",
                        "type": "string",
                        "description": "Upload a .txt or .csv file, or paste a URL. TXT: one subreddit per line. CSV: auto-detects 'subreddit' column."
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "hot",
                            "new",
                            "top",
                            "rising",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "How to sort posts in the feed.",
                        "default": "hot"
                    },
                    "timeFilter": {
                        "title": "Time filter",
                        "enum": [
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time range for 'top' and 'controversial' sort orders. Ignored for other sorts.",
                        "default": "all"
                    },
                    "includeComments": {
                        "title": "Include comments",
                        "type": "boolean",
                        "description": "Fetch top comments for each post. First 100 comments per post are included free. Comments beyond 100 are charged at $0.001 each.",
                        "default": false
                    },
                    "maxCommentsPerPost": {
                        "title": "Max comments per post",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum comments to fetch per post when comments are enabled. Uses a single fast request for up to 500, two requests for 501-1000."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
