# Reddit Posts Scraper: Subreddits, Search & URLs (`deepmine/reddit-posts-scraper`) Actor

Scrape Reddit posts from any subreddit, search, user or post URL, no login: title, full text, score, upvote ratio, comment count, flair, author, images, video and links, plus each post's comments if you want them. First posts in seconds; you pay per post.

- **URL**: https://apify.com/deepmine/reddit-posts-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Social media, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/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

### What does Reddit Posts Scraper do?

Reddit Posts Scraper gets Reddit posts from any subreddit, search, user or post URL: title, full text, score, upvote ratio, comment count, author, flair, images, video and links, one row per post. Paste Reddit links or type search terms; the first posts land in seconds. No login, no browser, no cookies.

These are real rows from the prefilled run (r/technology top posts of the week and r/startups top posts of the month, 50 posts each):

| Post | Community | Score | Comments | Posted |
|---|---|---:|---:|---|
| [NYC is now the first city in America that bans sketchy subscriptions](https://www.reddit.com/r/technology/comments/1wv1j68/nyc_is_now_the_first_city_in_america_that_bans/) | r/technology | 22715 | 452 | 2026-10-01 |
| [Retailers are pulling back from self-checkout after years of theft, e...](https://www.reddit.com/r/technology/comments/1wz12j6/retailers_are_pulling_back_from_selfcheckout/) | r/technology | 11493 | 2500 | 2026-10-06 |
| [The Netherlands is building its own Linux OS to break free from Micro...](https://www.reddit.com/r/technology/comments/1wwjq2t/the_netherlands_is_building_its_own_linux_os_to/) | r/technology | 4555 | 354 | 2026-10-03 |
| [Literally no reason to use Supabase in 2026. I will not promote.](https://www.reddit.com/r/startups/comments/1w9w9dw/literally_no_reason_to_use_supabase_in_2026_i/) | r/startups | 288 | 239 | 2026-09-07 |
| [How do new startups actually find their first clients? "I will not promote"](https://www.reddit.com/r/startups/comments/1wmyn43/how_do_new_startups_actually_find_their_first/) | r/startups | 112 | 161 | 2026-09-22 |

<sub>$0.99 per 1,000 results on Starter ($1.09 Free, $0.89 Scale, $0.79 Business). The prefilled run (100 posts) costs about $0.10. No start fee. Collected 2026-10-06.</sub>

### What Reddit posts can you scrape?

- **Subreddit posts**: hot, new, top, rising or controversial, any period (paste r/technology/top/?t=week, or type names under **Subreddits and users**).
- **Search results**: posts for any words across all of Reddit or inside one subreddit, sorted by relevance, new, top, most comments or hot.
- **User posts**: everything a user has posted (u/spez or a profile link).
- **Single posts by URL**: the full post, with its comments if you switch them on.
- **Any Reddit link**: subreddit, search, user, post and front-page URLs in one list.

Filters: posted after or before a date (or "7 days"), minimum score, NSFW on or off. Filtered-out posts aren't charged.

### Use cases

- **Trend and content research**: what's rising or top in a subreddit this week, with scores and comment counts to see what resonates.
- **Lead generation**: posts where people ask for a tool like yours ("alternative to X", "recommend a CRM").
- **Brand and topic monitoring**: run a search or a subreddit on a schedule with **Posted after** set to "1 day" to get only new posts.
- **Datasets for AI and analysis**: titles, full text and engagement numbers for thousands of posts, ready for sentiment or topic models.

### How much does it cost to scrape Reddit posts?

You pay per result in your dataset: each post (and each comment, if you turn comments on) is one result.

| Apify plan | Price per 1,000 results |
|---|---:|
| Free | $1.09 |
| Starter | $0.99 |
| Scale | $0.89 |
| Business | $0.79 |

Each post is charged once per run, even when several of your inputs find it. There's no start fee, and the run stops at your spending limit.

### Input

The prefill reads the top 50 posts of the week in r/technology and the top 50 of the month in r/startups. To change it:

- **Reddit URLs**: any subreddit, search, user or post link.
- **Search terms**: words to search all of Reddit's posts for, one per line (sort, period and one-subreddit search are under **Search options**).
- **Max posts per source**: per URL, search term, subreddit or user. Reddit lists about 1,000 posts per subreddit sort and about 250 per search sort; **Maximize coverage** reads a search in more sorts and periods and merges them without duplicates.
- **Max results (total)**: a cap for the whole run. Leave it empty for no total cap.
- Below the first screen: **Subreddits and users** (names instead of URLs, sort and period), **Search options**, **Filters** (dates, minimum score, NSFW), **Comments** (off by default: turn on to add each post's comments) and **Advanced** (proxy).

```json
{
  "startUrls": [{ "url": "https://www.reddit.com/r/technology/top/?t=week" }],
  "searches": ["best crm for startups"],
  "maxItemsPerSource": 200,
  "postedAfter": "30 days"
}
```

### Output

One row per post. The Output tab shows a posts table (with a stats view), and a comments table when **Include comments** is on. Download as JSON, CSV, Excel or HTML, or read it through the Apify API.

A post row (prefilled run, shortened):

```json
{
  "dataType": "post",
  "id": "t3_1wx2mo8",
  "title": "Google cofounder Sergey Brin has spent $102 million to fight California's proposed billionaire tax...",
  "communityName": "r/technology",
  "upVotes": 34313,
  "upvoteRatio": 0.97,
  "commentsCount": 2381,
  "createdAt": "2026-10-04T00:50:39Z",
  "flair": "Society",
  "domain": "fortune.com",
  "contentUrl": "https://fortune.com/article/how-much-has-google-cofounder-sergey-brin-spent-to-oppose-california-billionaire-tax-102-million-owe-13-billion-if-loses/"
}
```

**Post fields** (101): `id`, `url`, `title`, `body`, `communityName`, `username`, `upVotes`, `upvoteRatio`, `commentsCount`, `createdAt`, `flair`, `postType`, `contentUrl`, `domain`, `imageUrls`, `videoUrl`, `thumbnail`, `over18`, `ageHours`, `scorePerHour`, `commentsPerHour`, `engagementTotal`, `wordCount`, `bodyHtml`, `subredditSubscribers`, `authorId`, `authorFlairText`, `editedAt`, `isSelf`, `isVideo`, `isGallery`, `isDeletedOrRemoved`, `spoiler`, `locked`, `stickied`, `isAd`, `numCrossposts`, `crosspostParentUrl`, `galleryImages`, `galleryCaptions`, `mediaAssets`, `embed`, `media`, `preview`, `permalink`, `oldRedditUrl`, `shortUrl` and more.

**Comment fields** (with **Include comments** on): `id`, `url`, `body`, `username`, `upVotes`, `createdAt`, `depth`, `parentId`, `rootCommentId`, `postId`, `postTitle`, `numberOfReplies` and more.

Every row also has `input` (which of your inputs found it) and `scrapedAt` (when its page was read). Run totals, per-input counts and anything not found are in the run's OUTPUT record.

### Is it legal to scrape Reddit?

This Actor reads only public Reddit content that anyone can see without logging in. It doesn't log in and doesn't touch private or quarantined communities. If your results include personal data, you're responsible for handling it lawfully (for example under GDPR).

### FAQ

**Why fewer posts than I asked for?** Reddit itself stops a subreddit sort at about 1,000 posts and a search sort at about 250. Use other sorts and periods, or **Maximize coverage** for searches.

**Is it fast?** Posts arrive page by page as Reddit answers. The prefilled run (100 posts) took 6 and 8 seconds on Apify in two runs, the first row 1.1 and 1.8 seconds after the start (256 MB, datacenter proxy, October 20, 2026). A big subreddit is mostly Reddit's own answer time: one 100-post page at a time, about 3 seconds each (r/Python, 951 posts, October 20, 2026).

**Can I get the comments too?** Yes: switch **Include comments** on under **Comments** and set **Max comments per post**. Each comment is one result, at the same price as a post.

**Does my Apify plan matter?** Only for very large runs. Reddit allows 100 requests per IP every 10 minutes, and the run uses your plan's datacenter proxy IPs: 5 on the Free plan (about 50,000 posts per 10 minutes), more on paid plans. When every IP has used its 100, the run pauses until Reddit's window resets and says so in its status. If the pause would run past your run's timeout, it stops just before it and keeps every row it collected.

### Feedback

Found a bug or need a field? Open an issue on the Actor's Issues tab; we read every one. If the posts were useful, a short review on the Store page helps others find it.

# Actor input Schema

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

Any Reddit link, one per row: a subreddit (r/technology/top/?t=week), a search (reddit.com/search/?q=...), a user (u/spez) or a post. You get their posts.

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

Words to search all of Reddit's posts for, one per line, e.g. chatgpt alternative. Sort, period and one-subreddit search are under Search options.

## `maxItemsPerSource` (type: `integer`):

Most posts per URL, search term, subreddit or user. Reddit lists about 1,000 posts per subreddit sort and about 250 per search sort; 'Maximize coverage' gets more from a search.

## `maxResults` (type: `integer`):

Most rows for the whole run, every source counted together (comments too, if you turn them on). Empty = no total cap.

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

Subreddit names (Python or r/Python), one per line. Their posts are read in the order set by 'Subreddit sort'.

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

Order of subreddit posts, as on Reddit.

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

Period for the Top and Controversial sorts.

## `users` (type: `array`):

Reddit usernames (spez or u/spez), one per line. You get their posts, newest first.

## `searchSort` (type: `string`):

Order of search results.

## `searchTime` (type: `string`):

How far back a search looks.

## `withinSubreddit` (type: `string`):

Optional subreddit name (e.g. technology) to limit search terms to.

## `maximizeCoverage` (type: `boolean`):

Reddit stops a search at about 250 posts per sort. On: each search is also read in other sorts and periods (new, top by year, month, week...) and merged without duplicates.

## `postedAfter` (type: `string`):

Only posts from after this date: 2026-09-01, 2026-09-01T12:00:00Z, or a period like '7 days' or '12 hours'.

## `postedBefore` (type: `string`):

Only posts from before this date (same formats).

## `minScore` (type: `integer`):

Skip posts with a lower score (upvotes minus downvotes), e.g. 10. Empty = no minimum.

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

Keep posts and communities marked 18+.

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

Add each post's comments, replies included, right after the post. Each comment is one result.

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

Most comments to read per post, replies included, in Reddit's thread order (e.g. 4 for a quick look, 500 for whole threads).

## `commentDepth` (type: `integer`):

How deep in reply chains to go: 1 = top-level comments only, 10 = Reddit's maximum.

## `commentSort` (type: `string`):

Order of comments, as on Reddit.

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

Leave as is: Reddit answers Apify's datacenter proxy, the cheapest option. If you pick Residential, the run still reads through datacenter and uses your residential IPs only to retry a call Reddit refuses there.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/technology/top/?t=week"
    },
    {
      "url": "https://www.reddit.com/r/startups/top/?t=month"
    }
  ],
  "maxItemsPerSource": 50,
  "sort": "hot",
  "time": "day",
  "searchSort": "relevance",
  "searchTime": "all",
  "maximizeCoverage": false,
  "includeNSFW": true,
  "includeComments": false,
  "maxCommentsPerPost": 100,
  "commentDepth": 10,
  "commentSort": "confidence",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `posts` (type: `string`):

No description

## `comments` (type: `string`):

No description

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

No description

## `summary` (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/technology/top/?t=week"
        },
        {
            "url": "https://www.reddit.com/r/startups/top/?t=month"
        }
    ],
    "maxItemsPerSource": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/reddit-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 = {
    "startUrls": [
        { "url": "https://www.reddit.com/r/technology/top/?t=week" },
        { "url": "https://www.reddit.com/r/startups/top/?t=month" },
    ],
    "maxItemsPerSource": 50,
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/technology/top/?t=week"
    },
    {
      "url": "https://www.reddit.com/r/startups/top/?t=month"
    }
  ],
  "maxItemsPerSource": 50
}' |
apify call deepmine/reddit-posts-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rod7MoxFDegqUiQyI/builds/xkmr7VkT4mXxR91bU/openapi.json
