# Reddit Community Scraper — Subscribers & Hot Posts (`jurassic_jove/reddit-community-scraper`) Actor

Read any subreddit: subscribers, weekly active users, and the hot posts with score, comments, author and date. No login, no API key, no OAuth.

- **URL**: https://apify.com/jurassic\_jove/reddit-community-scraper.md
- **Developed by:** [Data Runner](https://apify.com/jurassic_jove) (community)
- **Categories:** Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

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

## Reddit Community Scraper — Subscribers & Hot Posts, No API Key 👥

**Read any subreddit and get how big it is and what it is talking about right
now** — subscribers, weekly active users, and each hot post with its score,
comments, author and date.

No login. No API key. No OAuth app. No captcha solving.

> **Why this exists.** Reddit's JSON endpoints return **403 — even from a real
> browser**, and its RSS feed serves roughly one read per minute and carries
> neither subscriber counts nor votes. A tool that wanted to know how big a
> community is had to say *"proposed, not measured"*. This measures it.

***

### What you get — one row per community

```jsonc
{
  "subreddit": "trains",          // exactly as you typed it
  "prefixedName": "r/trains",
  "subscribers": 29614,
  "subscribersText": "29,614",    // what the page displayed — see below
  "weeklyActiveUsers": 288362,    // WEEKLY, not "online now" — see below
  "weeklyContributions": 3370,
  "description": "The Home for all things \"Iron Horse\".",
  "posts": [
    {
      "title": "Darjeeling steam train struggling to climb! [India]",
      "score": 1734,              // null if Reddit hides it — never 0
      "comments": 61,
      "author": "someuser",
      "createdAt": "2026-09-05T18:00:00.000Z",
      "url": "https://www.reddit.com/r/trains/comments/…"
    }
  ],
  "scrapedAt": "2026-09-06T16:00:00.000Z",
  "sourceUrl": "https://www.reddit.com/r/trains/"
}
```

### Who uses this

- **Marketers and community teams** — how big is this niche, and is it awake?
- **Print-on-demand and merch sellers** — a community's hot posts are what its
  members find funny this week, which is the design brief.
- **Researchers and trend tools** — post titles at volume, with score, comments
  and dates attached.
- **Anyone sizing an audience** — subscriber counts across many communities in
  one run.

### Input

```json
{ "subreddits": ["trains", "r/birding", "https://www.reddit.com/r/chess/"], "postsPerSub": 25 }
```

| Field | Default | Notes |
|---|---|---|
| `subreddits` | — | Required. Accepts `trains`, `r/trains` or the full URL. Up to 40 per run. |
| `postsPerSub` | `25` | The front page loads about 25 and pages from there. Max 100. |
| `proxyConfiguration` | **RESIDENTIAL** | Required in practice — see FAQ. |

### Pricing

**$0.002 per community** — $2.00 per 1,000, posts included.

A community that came back blocked or empty produces no row and **costs
nothing**. You pay for communities read, not for attempts.

***

### What it does NOT do, on purpose

- **It never invents a zero.** A score Reddit did not publish comes back
  `null`, not `0` — and Reddit deliberately obscures the score on new posts, so
  a zero would be a lie about a post that may be doing fine.
- **It reports `weeklyActiveUsers`, not "active users".** Reddit publishes a
  *weekly* figure; the old "830 here now" counter is not on the page at all. A
  weekly number under a name that reads as instantaneous is a factor of a
  thousand presented as the same data. The field name says what it is.
- **It keeps the subscriber count as displayed, too.** Large communities render
  `1.2M`, which is 1,200,000 **rounded** — somewhere between 1.15 and 1.25
  million. `subscribersText` carries what the page actually said, so nobody
  reads a rounded number as an exact one.
- **It never truncates a title.** On Reddit the title *is* the post.
- **It never normalizes your input.** `r/AskHistorians` comes back as
  `AskHistorians`, capitals intact.
- **It tells "private" apart from "blocked".** One is a fact about the
  community; the other is a fact about us. The run summary names which.
- **It never returns a short list when it was blocked.** If Reddit turned away
  every community, the run ends **red** with nothing pushed.

***

### FAQ

#### Do I need a Reddit account, API key or OAuth app?

**No.** And an account would not help: measured 6 Sep 2026, the JSON endpoints
return 403 **from a real browser too**.

| surface | signed out |
|---|---|
| `www.reddit.com/r/trains/hot.json` | 🔴 403 "blocked by network security" |
| `www.reddit.com/r/trains/about.json` | 🔴 403 |
| `old.reddit.com/r/trains/` | 302 |
| `www.reddit.com/r/trains/.rss` | 200, but ~one read per minute, and no subscribers or votes |
| `www.reddit.com/r/trains/` | ✅ **renders, 49 posts after scrolling** |

The community page publishes everything in **attributes** on its own web
components — `post-title`, `score`, `comment-count`, `created-timestamp`,
`weekly-active-users` — so nothing is parsed out of rendered text except the
subscriber count, which Reddit only draws.

#### Do I need a proxy?

**Yes, and this is the one place where it is not optional.** Measured 6 Sep
2026:

| from | result |
|---|---|
| Apify's datacenter IP, no proxy | 🔴 **403 on every request** |
| RESIDENTIAL proxy | ✅ both communities read |

Reddit blocks datacenter ranges outright — the same posture that has its JSON
endpoints returning 403 to a real browser. It is on by default; leave it on
unless you are running from an address you know Reddit accepts.

#### Why only one community at a time?

Reddit's RSS serves about one read per minute. The page tolerates more, but
running in parallel against a site that already blocks is the fastest way to
make it block this too.

#### What if a community is private or does not exist?

It produces **no row**, and the run summary names it with the reason —
`private`, `not-found`, `no-posts` or `blocked`. A community you could not read
is not a community with nothing in it.

***

### Output

- **Dataset** — one row per community, with its posts nested.
- **Key-value store `OUTPUT`** — the run summary, including which communities
  produced nothing and **why**, named rather than merely counted.

***

*Keywords: reddit scraper, reddit api, subreddit scraper, reddit posts scraper,
reddit subscribers, subreddit size, reddit data, scrape reddit, reddit without
api key, reddit no login, community research, audience research, social
listening, reddit trends, subreddit analytics, reddit marketing research.*

# Actor input Schema

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

The communities to read. Accepts «trains», «r/trains» or the full URL. Sent EXACTLY as you type them — capitals are preserved, because normalising is the consumer's job, not the scraper's.

## `postsPerSub` (type: `integer`):

The front page loads about 25 and pages from there. The cap is 100, not «all»: what characterises a community is its first posts.

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

🔴 REQUIRED IN PRACTICE, and that is measured — unlike the sibling TikTok Actors, where a proxy buys nothing. Measured 6 Sep 2026: from Apify's datacenter IP, Reddit returned **403 on every request**; from a residential IP the same run read both communities. Reddit blocks datacenter ranges outright, which is the same posture that has its JSON endpoints returning 403 to a real browser. Leave RESIDENTIAL on unless you are running from an address you know Reddit accepts.

## Actor input object example

```json
{
  "subreddits": [
    "trains",
    "birding"
  ],
  "postsPerSub": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `communities` (type: `string`):

One row per community, with its size and hot posts.

## `runSummary` (type: `string`):

How many reads were requested, how many succeeded, and — named, not just counted — which communities produced nothing and why. «Private» is a fact about the community; «blocked» is a fact about us.

# 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 = {
    "subreddits": [
        "trains",
        "birding"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jurassic_jove/reddit-community-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 = {
    "subreddits": [
        "trains",
        "birding",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("jurassic_jove/reddit-community-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 '{
  "subreddits": [
    "trains",
    "birding"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call jurassic_jove/reddit-community-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jurassic_jove/reddit-community-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/we3ji85uvGEU2bROE/builds/CdddEbE2mSkwxZh06/openapi.json
