# Reddit Subreddit Scraper API — New Posts From Any Community (`quarry/subreddit-monitor`) Actor

Scrape new posts from any list of subreddits. Scheduled runs return only posts you have not seen — a change feed, not a re-dump. Unofficial — not affiliated with Reddit.

- **URL**: https://apify.com/quarry/subreddit-monitor.md
- **Developed by:** [Quarry](https://apify.com/quarry) (community)
- **Categories:** Social media, News, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 post founds

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 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 Subreddit Scraper API — New Posts From Any Community

Scrape new posts from any list of subreddits. Scheduled runs return only posts you have not seen — a change feed, not a re-dump. Unofficial — not affiliated with Reddit.

### Sample output

```json
{
  "source": "new",
  "query": "SaaS",
  "id": "new:12345",
  "title": "Example item title",
  "url": "https://example.com/item",
  "body": "Excerpt of the item body…",
  "publishedAt": "2026-08-03T09:00:00.000Z"
}
```

### Why this one

- **It is a monitor, not a search.** State persists between runs, so a scheduled run returns only genuinely new items — and **you are not charged for anything you have already been shown.**
- **One schema across every source** in this actor, so downstream code is written once.
- **Drift is reported, not hidden.** If a source changes format you get a `drift` status rather than a silently empty dataset.

### Input

| Field | What it does |
|---|---|
| `targets` | **Required.** Names without r/, e.g. SaaS. Reddit serves roughly two requests per run from Apify addresses, so 1-2 subreddits per run is the reliable range; more will be reported as PARTIAL COVERAGE in the log. |
| `keywords` | Keep only matching items. Applied **before** billing. |
| `onlyNew` | Suppress already-reported items. On by default. |
| `maxAgeHours` | Ignore older items. 0 = no limit. |

```json
{ "targets": ["SaaS"] }
```

### Who this is for

community managers, social listening and marketing teams.

### Reliability

Every run writes `RUN_STATS` with `ok`, `empty`, `drift`, `transport` and `rate_limited` counts, plus how many items were suppressed as already seen.

A run that finds nothing new writes a single summary row instead of an empty dataset, so your schedule can tell "checked and quiet" apart from "broken" — and alert on either:

```json
{ "type": "no_changes", "feedsChecked": 1, "itemsSuppressed": 100, "checkedAt": "2026-08-04T12:00:00.000Z" }
```

Item rows never carry a `type` field, so filtering the summary out downstream is one comparison. The summary row is never billed.

### Pricing

A small charge when a run starts, plus a charge per **new** item. Items you have already been shown are never billed again — a run that finds nothing new costs only the start charge.

The start charge is billed once per gigabyte of run memory, minimum once. At this Actor's default 512 MB that is exactly one charge per run; raising memory above 1 GB multiplies it.

***

*Unofficial. This Actor is not affiliated with, endorsed or sponsored by Reddit.*

# Actor input Schema

## `targets` (type: `array`):

Names without r/, e.g. SaaS. Reddit serves roughly two requests per run from Apify addresses, so 1-2 subreddits per run is the reliable range; more will be reported as PARTIAL COVERAGE in the log.

## `keywords` (type: `array`):

Keep only items matching any term. Applied before billing.

## `onlyNew` (type: `boolean`):

Suppress anything returned in a previous run. Leave on for scheduled monitoring.

## `monitorId` (type: `string`):

Names the history this run remembers. Leave empty and each distinct target list gets its own, so separate monitors never suppress each other. Set it to keep one history across a changing target list, or change it to start clean.

## `maxAgeHours` (type: `integer`):

0 = no limit.

## `maxPerFeed` (type: `integer`):

Cap on items taken from each feed, per target. Bounds cost when a feed floods.

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

Hard ceiling on billable items for the whole run. 0 = no limit.

## `concurrency` (type: `integer`):

How many feeds to fetch in parallel. Raise for speed, lower if a source rate-limits you.

## Actor input object example

```json
{
  "targets": [
    "SaaS"
  ],
  "onlyNew": true,
  "maxAgeHours": 0,
  "maxPerFeed": 100,
  "maxItems": 0,
  "concurrency": 3
}
```

# 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 = {
    "targets": [
        "SaaS"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarry/subreddit-monitor").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 = { "targets": ["SaaS"] }

# Run the Actor and wait for it to finish
run = client.actor("quarry/subreddit-monitor").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 '{
  "targets": [
    "SaaS"
  ]
}' |
apify call quarry/subreddit-monitor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/K8nGAZSUeQstQHVfd/builds/5m5W95Spdni8NyyFI/openapi.json
