# Reddit Firehose: Every New Post in Real Time (`red_crawler/reddit-firehose`) Actor

Every new Reddit post, 10–15 seconds after it is posted. Watch all of Reddit or just your subreddits and keywords, run as long as you like, and send posts to Sheets, Slack or webhooks. Pay per hour of watching plus a tiny price per post.

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

## Pricing

from $0.02 / 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/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 Firehose: Every New Post in Real Time

![Live](https://img.shields.io/badge/feed-live%2C%2010--15%20s-orange) ![No login](https://img.shields.io/badge/Reddit%20account-not%20needed-brightgreen) ![Pricing](https://img.shields.io/badge/price-%240.10%20%2F%20hour%20%2B%20%240.015%20%2F%201%2C000%20posts-blue)

Get **every new Reddit post** 10–15 seconds after it is posted, with no gaps and no duplicates. Watch all of Reddit, or only the subreddits and keywords you care about. Run it for a few minutes, on a schedule, or nonstop, and send the posts to Google Sheets, Slack, a webhook or your own app.

**No Reddit account, login or key needed.**

### What you get

- **Every new post on Reddit:** every subreddit, plus posts made on user profiles. That is about 1,000–1,300 posts a minute.
- **Live:** posts arrive in batches, 10–15 seconds after they are posted.
- **Only what you want:** filter by subreddit (up to 100), keyword or phrase (up to 100), NSFW, profile posts and ads.
- **As long as you want:** stop after a number of posts, after a number of minutes, or never.
- **No gaps:** if Apify moves your run to another server, it picks up exactly where it stopped.

### Use cases

- **Brand and competitor monitoring:** see every new post that names your product, the moment it is posted.
- **Lead generation:** catch people asking for a tool like yours ("looking for a CRM", "alternative to …").
- **Market and trend research:** follow whole communities in real time.
- **AI and data pipelines:** feed fresh Reddit posts to your models, search index or database.
- **Community and moderation tools:** watch the communities you run, as posts come in.

### Quick start

1. Add **Subreddits** and/or **Keywords**, or leave both empty to get every new post on Reddit.
2. Set **Max posts** and **Max run time** (0 = no limit).
3. Click **Start**. Posts appear in the **Output** tab as they arrive.

**To keep it running all the time,** set both limits to 0 (about $72 a month for the time, $22 until October 30, 2026, plus the posts) and set a spending limit in **Run options** if you want a cap. **To get posts in batches,** schedule a run instead (for example 10 minutes every hour). A run only collects posts while it is running.

### Input

| Field | Default | What it does |
|---|---|---|
| Subreddits | all | Only posts from these communities, up to 100. Name, `r/name` or the community's link all work. |
| Keywords | none | Only posts whose title or text contains at least one of these words or phrases, up to 100. Not case-sensitive, whole words only: "AI" matches "AI tools", not "said". |
| Max posts | 100 | Stop after saving this many posts. 0 = no limit. |
| Max run time | 60 minutes | Stop after this many minutes. 0 = keep running until you stop it. Each started hour is charged once (see Pricing). |
| Wait time | 5 seconds | How often new posts are saved: one batch every this many seconds (1–60). Lower = posts arrive sooner. The price is the same. |
| NSFW posts | Leave out | Leave out, include, or only NSFW posts. |
| Posts on user profiles | Include | Include, leave out, or only posts made on a user's own profile. |
| Promoted posts (ads) | Leave out | Promoted posts are about 6–8% of all new posts. |

**Example**

**Input**

```json
{
  "subreddits": ["smallbusiness", "Entrepreneur", "SaaS"],
  "keywords": ["invoice", "late payment", "accounting software"],
  "maxPosts": 0,
  "maxMinutes": 0,
  "nsfw": "exclude"
}
```

**Output** *(one dataset record)*

```json
{
  "id": "t3_1x6q6pl",
  "created_at": "2026-10-15T16:22:55Z",
  "subreddit": "smallbusiness",
  "title": "How do you handle clients who pay 60+ days late?",
  "author": "example_user",
  "type": "text",
  "url": "https://www.reddit.com/r/smallbusiness/comments/1x6q6pl/how_do_you_handle_clients_who_pay_60_days_late/",
  "permalink": "https://www.reddit.com/r/smallbusiness/comments/1x6q6pl/how_do_you_handle_clients_who_pay_60_days_late/",
  "text": "Three of my clients are now two months overdue on their invoice and I'm not sure how hard to push...",
  "media": [],
  "flair": "Question",
  "nsfw": false,
  "spoiler": false,
  "profile_post": false,
  "ad": false,
  "language": "en",
  "domain": "self.smallbusiness",
  "subreddit_members": 2140000,
  "matched_keywords": ["invoice"],
  "crosspost_parent": null,
  "created_utc": 1792081375,
  "subreddit_id": "t5_2qhkq",
  "author_id": "t2_8ab3kq1z"
}
```

### Output fields

One row per post. Posts inside a batch come in no set order: sort by `created_utc` if you need them by time.

| Field | Notes |
|---|---|
| `id` | Post id (`t3_…`). |
| `created_at`, `created_utc` | When the post was created (UTC time, and Unix seconds). |
| `subreddit` | Community name. For profile posts it is `u_` plus the username. |
| `title`, `text` | Post title, and body text in markdown (empty for image, link and video posts). |
| `author`, `author_id` | Username and `t2_…` id (empty if not available). |
| `type` | `text`, `link`, `image`, `gif`, `video`, `embed`, `gallery`, `crosspost` or `poll`. |
| `url`, `permalink`, `domain` | Where the post points, the link to the post on Reddit, and its domain. |
| `media` | Image and video links (every image of a gallery). |
| `flair`, `language` | Post flair text and detected language, when there is one. |
| `nsfw`, `spoiler`, `profile_post`, `ad` | `true` / `false` |
| `subreddit_members`, `subreddit_id` | Community size and `t5_…` id. |
| `matched_keywords` | Which of your keywords the post contains (only when you set keywords). |
| `crosspost_parent` | For crossposts, the id of the original post. |
| `late` | Present (and `true`) only for posts that became visible a little later (see the FAQ). |

Download the results as JSON, CSV, Excel, XML or HTML, read them through Apify's own data endpoints, or connect them to Google Sheets, Slack, Zapier, Make, n8n or a webhook from the **Integrations** tab.

### FAQ

#### Will I miss any posts?

No. You get every new post that people can see on Reddit. In our checks, 99.7% of the posts still on Reddit a few minutes after posting had already been delivered. The rare exceptions are posts that were hidden when posted and approved by a moderator later.

#### What isn't included?

Only posts that people can't see on Reddit:

- Posts removed or deleted within seconds of being posted, by Reddit's spam filters, a moderator, a community's automatic rules or the author. That is about 1 in 7 new posts.
- Posts Reddit hides from the public, such as posts in private or quarantined communities (about 2–3%).

#### Do I get posts that are deleted later?

Yes. Posts reach you seconds after they are posted, so you keep them even if they are deleted or removed afterwards. About 1 in 12 delivered posts is gone from Reddit a few minutes later.

#### How fast do posts arrive?

Typically 10–15 seconds after they are posted. A few posts only become visible a little later; they are delivered as soon as they do, marked `late: true`, and can be up to about 5 minutes old.

#### Can I get the same post twice?

Not within a run. Each run keeps its own place in the feed, so you can run several runs with different filters at the same time.

#### What happens when a run starts or stops?

A new run starts with the posts of the last ~30 seconds, then follows the live feed. If Apify moves a run to another server, the run continues where it stopped. Posts from while no run was going aren't collected later: the feed is live.

#### Can I get older posts, comments or scores?

This actor is a live feed of new posts. For older posts, comments, users and search, use our [Reddit Scraper V2](https://apify.com/red_crawler/reddit-scrape-v2) or [Reddit Search V2](https://apify.com/red_crawler/reddit-search-v2).

### Run status reference

| Status | What it means | What to do |
|---|---|---|
| <img src="https://redcrawler.com/s/apify_pill_succeeded_v11.png" alt="Succeeded" height="22" /> | The run reached its post limit, time limit or your spending limit. The status message says which. | Open the Output tab. |
| <img src="https://redcrawler.com/s/apify_pill_failed_v11.png" alt="Failed" height="22" /> | An input was invalid, or the live feed was unavailable for 10 minutes. | Check the status message, fix the input or try again later. |
| <img src="https://redcrawler.com/s/apify_pill_timed_out_v11.png" alt="Timed out" height="22" /> | The run hit the timeout in Run options. | Set the timeout to 0, or use Max run time instead. |
| <img src="https://redcrawler.com/s/apify_pill_aborted_v11.png" alt="Aborted" height="22" /> | You stopped the run. | Posts saved before you stopped it stay in the Output tab. |

### Why this actor is fast

- **Live — posts 10–15 seconds after they are posted.** No waiting for a listing page to refresh, and no posts lost between checks.
- **Reliable — zero browser flakiness.** No headless browser, no JS-render timeouts, no captcha pages.
- **Light — under 100 MB of memory.** It runs on the smallest Apify server size, so even a nonstop run stays small.

### Pricing

**$0.10 per hour the run is on, plus $0.015 per 1,000 posts.** Until October 30, 2026 the hour is $0.03.

- **Time:** each started hour counts once: a 10-minute run is 1 hour ($0.10), a 90-minute run is 2 hours ($0.20), a run left on for a whole month is about $72.
- **Posts:** you pay only for posts saved to your dataset. Watching all of Reddit saves about 850,000 posts a day (about $13); a few quiet subreddits cost almost nothing on top of the time.

To cap a run, set a spending limit in **Run options**: the run stops once it is reached.

### More from us

- [Reddit Scraper V2](https://apify.com/red_crawler/reddit-scrape-v2): posts, comments, users and subreddits.
- [Reddit Search V2](https://apify.com/red_crawler/reddit-search-v2): search posts, communities and people.
- [Reddit Bulk Scrape V2](https://apify.com/red_crawler/reddit-bulk-scrape-v2): thousands of posts, comments, subreddits or users by id.

### Support

Questions or a feature request? Open an issue in the **Issues** tab and we'll answer quickly.

# Actor input Schema

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

Only posts from these communities (up to 100). Use the name, r/name or the community's link. Leave empty for all of Reddit.

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

Only posts whose title or text contains at least one of these words or phrases (up to 100). Not case-sensitive, whole words only: "AI" matches "AI tools", not "said". Leave empty for every post.

## `maxPosts` (type: `integer`):

Stop after saving this many posts. 0 = no limit.

## `maxMinutes` (type: `integer`):

Stop after this many minutes. 0 = keep running until you stop it (or your spending limit is reached). Each started hour of running is charged once ($0.10; $0.03 until October 30, 2026).

## `wait` (type: `integer`):

How often new posts are saved: one batch every this many seconds (1–60). Lower = posts arrive sooner. The price is the same.

## `nsfw` (type: `string`):

Keep, leave out, or only get posts marked NSFW.

## `profilePosts` (type: `string`):

Posts made on a user's own profile instead of in a community.

## `ads` (type: `string`):

Promoted posts are about 6–8% of all new posts.

## Actor input object example

```json
{
  "subreddits": [],
  "keywords": [],
  "maxPosts": 100,
  "maxMinutes": 60,
  "wait": 5,
  "nsfw": "exclude",
  "profilePosts": "include",
  "ads": "exclude"
}
```

# Actor output Schema

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

One row per new Reddit post: id, time, subreddit, title, author, type, links, text, media and flags.

# 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": [],
    "keywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-firehose").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": [],
    "keywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-firehose").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": [],
  "keywords": []
}' |
apify call red_crawler/reddit-firehose --silent --output-dataset

```

## MCP server setup

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

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/gaGiA5PAAO8TmXgbd/builds/aoaXt7MJDiHmIDsF2/openapi.json
