# Reddit Feeds V2 — 11 sitewide, subreddit & account feeds (`red_crawler/reddit-feeds`) Actor

Fetch any of Reddit's 11 feeds at scale: Popular, News, r/All, Watch (videos), Games, Explore, Topic, Recommended Media, any subreddit's posts feed, plus your account's Latest and Saved Posts feeds. 11 self-contained endpoints — 9 anonymous, 2 require a Reddit account.

- **URL**: https://apify.com/red\_crawler/reddit-feeds.md
- **Developed by:** [Red Crawler](https://apify.com/red_crawler) (community)
- **Categories:** Lead generation, SEO tools, Social media
- **Stats:** 8 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.99 / 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.

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 Feeds V2

![Endpoints](https://img.shields.io/badge/endpoints-11-blue) ![Auth](https://img.shields.io/badge/Reddit_account-9_no_/_2_yes-yellow) ![Proxy](https://img.shields.io/badge/proxy-only_for_bearer_endpoints-yellow) ![Pricing](https://img.shields.io/badge/pricing-pay_per_result-orange)

Pull posts from any of Reddit's eleven post feeds at scale. Nine of them — sitewide tabs (Popular, News, r/all), discovery feeds (Explore, Games, Watch, Topic, Recommended Media), and any individual subreddit's feed — work anonymously with no account required. Two of them — your account's **Latest Feed** and **Saved Posts Feed** — read your personal Reddit account and need a Token V2 (either pasted directly or stored in the **Reddit Vault** actor).

Eleven self-contained endpoints. Each call returns a paginated batch of post records, one row per post. Pick the endpoint, fill the matching section, hit Start.

***

### What you can fetch

The first nine feeds accept the same three controls — **Sort**, **Time filter**, and **Limit** — so once you learn one, you know them all. The Subreddit, Topic, and Recommended Media feeds add one extra input each (the subreddit name, topic ID, or seed IDs respectively). The two account feeds at the end add the credentials section at the bottom of the form.

#### Public endpoints (no Reddit account needed)

##### 1. Subreddit Feed — posts from one subreddit

The classic "scrape r/python" use case. Returns posts from a single subreddit.

**Inputs:**

- **Subreddit** — bare name (`python`), prefixed (`r/python`), or full URL (`https://reddit.com/r/python`)
- **Sort** — `best`, `hot`, `new`, `top`, `controversial`, `rising`
- **Time filter** — `hour`, `day`, `week`, `month`, `year`, `all` (only applies when sort is `top` or `controversial` — ignored otherwise)
- **Limit** — 1 to 500

**Use it when:** you want the standard subreddit-feed scrape — recent posts, top-of-week roundups, monitoring a niche community.

**Example**

**Input**

```json
{
  "endpoint": "subreddit",
  "subreddit_name": "wordpress",
  "subreddit_sort": "hot",
  "subreddit_time": "all",
  "subreddit_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row, flattened)*

```json
{
  "endpoint": "subreddit",
  "__typename": "CellGroup",
  "id": "1s4a4j6",
  "postTitle": "WordPress 6.6 — what broke for you?",
  "score": 412,
  "commentCount": 87,
  "createdAt": "2026-05-12T14:08:33.000000+0000",
  "url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/wordpress_66_what_broke_for_you/",
  "domain": "self.Wordpress",
  "voteState": "NONE",
  "isNsfw": false,
  "isSpoiler": false,
  "isLocked": false,
  "isStickied": false,
  "isArchived": false,
  "content": { "preview": "Post your weirdest 6.6 upgrade story..." },
  "thumbnail": "self",
  "authorInfo": { "name": "u/wpdev42", "prefixedName": "u/wpdev42" },
  "flair": { "text": "Discussion", "backgroundColor": "#0079D3" }
}
```

##### 2. Popular Feed — Reddit's sitewide Popular tab

Returns whatever Reddit currently shows on its main Popular page — the homepage of logged-out Reddit.

**Inputs:** Sort, Time filter, Limit (1–500) — same controls as Subreddit Feed.

**Use it when:** trend-watching, daily front-page snapshots, training models on what's currently going viral.

**Example**

**Input**

```json
{
  "endpoint": "popular",
  "popular_sort": "hot",
  "popular_time": "all",
  "popular_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "popular",
  "__typename": "CellGroup",
  "id": "1tclobu",
  "postTitle": "What is the worst way anyone you know has died?",
  "score": 3253,
  "commentCount": 0,
  "createdAt": "2026-05-14T08:42:31.000000+0000",
  "url": "https://www.reddit.com/r/AskReddit/comments/1tclobu/what_is_the_worst_way_anyone_you_know_has_died/",
  "domain": "self.AskReddit",
  "voteState": "NONE",
  "isNsfw": false,
  "isSpoiler": false,
  "isLocked": false,
  "isStickied": false,
  "content": { "preview": "" },
  "thumbnail": "self",
  "authorInfo": { "name": "u/[deleted]" }
}
```

##### 3. News Feed — Reddit's News tab

Reddit's curated News feed — pulls posts from news-oriented subreddits the way Reddit's News tab does.

**Inputs:** Sort (with one extra option, `awarded`), Time filter, Limit (1–500).

**Use it when:** news monitoring, link aggregation, headline scraping.

**Example**

**Input**

```json
{
  "endpoint": "news",
  "news_sort": "best",
  "news_time": "all",
  "news_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "news",
  "__typename": "CellGroup",
  "id": "1tc8x0a",
  "postTitle": "Federal Reserve holds rates steady at 5.25%",
  "score": 1842,
  "commentCount": 312,
  "createdAt": "2026-05-13T19:00:00.000000+0000",
  "url": "https://www.reuters.com/markets/us/fed-rates-may-2026/",
  "domain": "reuters.com",
  "voteState": "NONE",
  "isNsfw": false,
  "isLocked": false,
  "isStickied": false,
  "thumbnail": "https://b.thumbs.redditmedia.com/news-thumb-%E2%80%A6jpg",
  "authorInfo": { "name": "u/newsbot42", "prefixedName": "u/newsbot42" },
  "flair": { "text": "Business", "backgroundColor": "#00A6A5" }
}
```

##### 4. All Feed — r/all

Posts from r/all — the firehose of every public subreddit on Reddit (minus the few opted out).

**Inputs:** Sort, Time filter, Limit (1–500).

**Use it when:** maximum breadth — high-volume scraping across all of Reddit, training data, dataset bootstrapping.

**Example**

**Input**

```json
{
  "endpoint": "all",
  "all_sort": "hot",
  "all_time": "all",
  "all_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "all",
  "__typename": "CellGroup",
  "id": "1tcm9zv",
  "postTitle": "TIL the longest English word without a vowel is 'rhythms'",
  "score": 18432,
  "commentCount": 412,
  "createdAt": "2026-05-14T03:15:22.000000+0000",
  "url": "https://www.reddit.com/r/todayilearned/comments/1tcm9zv/til_the_longest_english_word_without_a_vowel/",
  "domain": "self.todayilearned",
  "voteState": "NONE",
  "isNsfw": false,
  "isLocked": false,
  "content": { "preview": "" },
  "thumbnail": "self",
  "authorInfo": { "name": "u/wordnerd99" }
}
```

##### 5. Explore Feed — Reddit's discovery / Communities feed

Pulls Reddit's "Explore" tab content — discovery-style posts plus surfaced communities.

**Inputs:** Sort, Time filter, Limit.

**Use it when:** finding new subreddits Reddit is recommending, mapping community discovery surfaces, market-sizing the long tail.

**Example**

**Input**

```json
{
  "endpoint": "explore",
  "explore_sort": "hot",
  "explore_time": "all",
  "explore_limit": 3
}
```

**Output** *(one dataset record per item — sample of the first row)*

```json
{
  "endpoint": "explore",
  "__typename": "RichtextRecommendationContextCell",
  "id": "1tcjpqr",
  "postTitle": "My first attempt at a sourdough starter",
  "score": 287,
  "commentCount": 41,
  "createdAt": "2026-05-13T22:48:01.000000+0000",
  "url": "https://www.reddit.com/r/Breadit/comments/1tcjpqr/my_first_attempt_at_a_sourdough_starter/",
  "domain": "i.redd.it",
  "thumbnail": "https://b.thumbs.redditmedia.com/explore-thumb-%E2%80%A6jpg",
  "authorInfo": { "name": "u/doughbeginner" },
  "groupRecommendationContext": {
    "typeIdentifier": "topic_to_post",
    "topicId": "tx1_2unn29s"
  }
}
```

##### 6. Games Feed — Reddit's Games-focused feed

A vertical feed weighted toward gaming communities and content.

**Inputs:** Sort, Time filter, Limit.

**Use it when:** gaming-niche scraping, esports / launch-day monitoring, game-marketing intelligence.

**Example**

**Input**

```json
{
  "endpoint": "games",
  "games_sort": "hot",
  "games_time": "all",
  "games_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "games",
  "__typename": "CellGroup",
  "id": "1tcgs0e",
  "postTitle": "GTA 6 leaked footage — what we know so far",
  "score": 9421,
  "commentCount": 1208,
  "createdAt": "2026-05-13T16:30:00.000000+0000",
  "url": "https://www.reddit.com/r/GTA6/comments/1tcgs0e/gta_6_leaked_footage_what_we_know_so_far/",
  "domain": "self.GTA6",
  "voteState": "NONE",
  "isNsfw": false,
  "thumbnail": "https://b.thumbs.redditmedia.com/games-thumb-%E2%80%A6jpg",
  "authorInfo": { "name": "u/rockstargamer", "prefixedName": "u/rockstargamer" },
  "flair": { "text": "Leak", "backgroundColor": "#FF4500" }
}
```

##### 7. Watch Feed — video-focused content

Reddit's video-first feed — favors posts with embedded videos / GIFs / short clips over self-text.

**Inputs:** Sort, Time filter, Limit.

**Use it when:** video / clip mining, social-media short-form content sourcing, media-asset collection.

**Example**

**Input**

```json
{
  "endpoint": "watch",
  "watch_sort": "hot",
  "watch_time": "all",
  "watch_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "watch",
  "__typename": "CellGroup",
  "id": "1tcfvw1",
  "postTitle": "Dog steals camera, films its own escape",
  "score": 21534,
  "commentCount": 612,
  "createdAt": "2026-05-13T14:02:11.000000+0000",
  "url": "https://v.redd.it/x7y8z9a0b1c2",
  "domain": "v.redd.it",
  "voteState": "NONE",
  "isNsfw": false,
  "media": {
    "__typename": "MediaVideo",
    "dashUrl": "https://v.redd.it/x7y8z9a0b1c2/DASHPlaylist.mpd",
    "duration": 42
  },
  "thumbnail": "https://external-preview.redd.it/watch-thumb-%E2%80%A6jpg",
  "authorInfo": { "name": "u/funnydoglover" }
}
```

##### 8. Topic Feed — interest-topic feed

Returns posts for a specific Reddit topic ID. Topic IDs look like `tx1_2unn29s` and you can pull them from the Explore feed (each Explore item carries its topic ID).

**Inputs:**

- **Topic ID** — the `tx1_...` ID from Explore (default `tx1_2unn29s` is a working example)
- **Scheme name (optional)** — Reddit's internal topic scheme name; usually leave blank
- **Sort, Time filter, Limit**

**Use it when:** scraping a specific interest topic at scale (e.g., a particular hobby, fandom, or category Reddit has clustered).

**Example**

**Input**

```json
{
  "endpoint": "topic",
  "topic_id": "tx1_2unn29s",
  "topic_sort": "hot",
  "topic_time": "all",
  "topic_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "topic",
  "__typename": "CellGroup",
  "id": "1tcb88p",
  "postTitle": "Best sourdough recipe for beginners",
  "score": 1834,
  "commentCount": 211,
  "createdAt": "2026-05-13T10:18:42.000000+0000",
  "url": "https://www.reddit.com/r/Sourdough/comments/1tcb88p/best_sourdough_recipe_for_beginners/",
  "domain": "self.Sourdough",
  "voteState": "NONE",
  "thumbnail": "self",
  "authorInfo": { "name": "u/bakerannie" },
  "groupRecommendationContext": { "topicId": "tx1_2unn29s" }
}
```

##### 9. Recommended Media — image / video recommendations seeded by subreddits

Reddit returns image/video posts recommended off a list of seed subreddit IDs. Useful for visual content discovery anchored to communities you care about.

**Inputs:**

- **Seed subreddit IDs** — comma-separated `t5_...` IDs (default `t5_2qh33,t5_2cneq` is r/funny + r/aww)
- **Sort, Time filter, Limit**

**Tip:** Use the **Reddit Subreddits V2** actor's `ID` endpoint to convert a subreddit name (e.g. `funny`) into its `t5_` ID.

**Use it when:** building image / meme datasets seeded by topic, content recommendation experiments, visual-trend scraping.

**Example**

**Input**

```json
{
  "endpoint": "recommended_media",
  "recommended_media_seeds": "t5_2qh33,t5_2cneq",
  "recommended_media_sort": "hot",
  "recommended_media_time": "all",
  "recommended_media_limit": 3
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "recommended_media",
  "__typename": "CellGroup",
  "id": "1tc9rks",
  "postTitle": "My puppy on her first day home",
  "score": 8421,
  "commentCount": 142,
  "createdAt": "2026-05-13T07:40:11.000000+0000",
  "url": "https://i.redd.it/abc123def456.jpg",
  "domain": "i.redd.it",
  "voteState": "NONE",
  "isNsfw": false,
  "thumbnail": "https://b.thumbs.redditmedia.com/aww-thumb-%E2%80%A6jpg",
  "media": { "__typename": "MediaImage", "width": 1920, "height": 1080 },
  "authorInfo": { "name": "u/puppylover99" }
}
```

#### Bearer-required endpoints (need a Reddit account)

These two endpoints require authentication. Fill the **Reddit credentials** section at the bottom of the input form (see [Credentials](#credentials) below).

##### 10. Latest Feed — your account's Latest feed (bearer required)

The personalised "Latest" feed your Reddit account sees — chronologically newest posts from the subreddits and users you follow, plus recommendations Reddit attaches to the account.

**Inputs:** Sort (defaults to `new`), Time filter, Limit, **plus credentials** (saved account name from the vault, or pasted Token V2 + proxy).

**Use it when:** monitoring brand-new posts in your followed communities, watching a niche-feed of accounts you've subscribed to, building a fresh-content notifier.

**Example**

**Input**

```json
{
  "endpoint": "latest",
  "latest_sort": "new",
  "latest_time": "all",
  "latest_limit": 3,
  "credentialSource": "vault",
  "accountName": "main"
}
```

**Output** *(one dataset record per post — sample of the first row)*

```json
{
  "endpoint": "latest",
  "__typename": "CellGroup",
  "id": "1tcn2qq",
  "postTitle": "Just launched my Apify actor — feedback welcome",
  "score": 18,
  "commentCount": 4,
  "createdAt": "2026-05-14T15:55:02.000000+0000",
  "url": "https://www.reddit.com/r/apify/comments/1tcn2qq/just_launched_my_apify_actor_feedback_welcome/",
  "domain": "self.apify",
  "voteState": "NONE",
  "isNsfw": false,
  "thumbnail": "self",
  "authorInfo": { "name": "u/devbuilder42" },
  "rate_limit_used": 10,
  "rate_limit_remaining": 1890,
  "rate_limit_reset_at": "2026-05-14T16:30:00Z"
}
```

##### 11. Saved Posts Feed — your account's saved posts (bearer required)

Pulls every post you've saved on your Reddit account. Useful for exporting bookmarks, building a personal archive, or auditing a moderator-account's saved review queue.

**Inputs:** Sort, Time filter, Limit, **plus credentials** (saved account name from the vault, or pasted Token V2 + proxy).

**Use it when:** exporting your saved-posts archive to JSON / CSV, syncing a personal bookmark database, auditing moderator review history.

**Example**

**Input**

```json
{
  "endpoint": "saved_posts",
  "saved_posts_sort": "hot",
  "saved_posts_time": "all",
  "saved_posts_limit": 3,
  "credentialSource": "vault",
  "accountName": "main"
}
```

**Output** *(one dataset record per saved post — sample of the first row)*

```json
{
  "endpoint": "saved_posts",
  "__typename": "CellGroup",
  "id": "1s4a4j6",
  "postTitle": "WordPress 6.6 — what broke for you?",
  "score": 412,
  "commentCount": 87,
  "createdAt": "2026-05-12T14:08:33.000000+0000",
  "url": "https://www.reddit.com/r/Wordpress/comments/1s4a4j6/wordpress_66_what_broke_for_you/",
  "domain": "self.Wordpress",
  "voteState": "NONE",
  "isSaved": true,
  "isNsfw": false,
  "thumbnail": "self",
  "authorInfo": { "name": "u/wpdev42" },
  "rate_limit_used": 11,
  "rate_limit_remaining": 1889,
  "rate_limit_reset_at": "2026-05-14T16:30:00Z"
}
```

***

### Credentials

The two bearer-required endpoints (Latest Feed, Saved Posts Feed) need a Reddit Token V2 cookie + the proxy that minted it. The first 9 endpoints ignore credentials entirely — leave the section blank for those.

#### Credential lifetime

| Credential | Lifetime | When to refresh |
|---|---|---|
| **Token V2** (`token_v2` cookie) | ~24 hours | Daily — or save a Reddit Session in the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) and let the vault auto-refresh the Token V2 from it (recommended). |
| **Reddit Session** (`reddit_session` cookie) | ~180 days | Only needed if you save an account in the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) — the vault uses it to auto-mint fresh Token V2 cookies. Refresh roughly twice a year. |

> **How to extract these from your browser:** open Reddit in Chrome / Brave / Edge / Firefox, then **DevTools → Application → Cookies → `https://www.reddit.com`**. Filter by `token_v2` or `reddit_session` and copy the **Value** column.

#### Option A — Use a saved account (recommended)

1. Run the **[Reddit Vault](https://apify.com/red_crawler/reddit-vault)** actor once to store a Reddit account under a name you choose (e.g. `main`, `alt-account`, `burner1`). The vault encrypts the Token V2 + matching proxy and stores them keyed by name. If you save a long-lived `reddit_session` cookie alongside it, the vault auto-refreshes the Token V2 for you.
2. In this actor, set **Credential source = Use saved account (vault)** and put the same name in **Saved account name**.
3. Done — Token V2 + proxy load automatically on every run.

```json
{
  "credentialSource": "vault",
  "accountName": "main"
}
```

#### Option B — Paste Token V2 + proxy directly

For one-off runs without setting up the vault:

1. Set **Credential source = Paste Token V2 + proxy**.
2. Paste your Reddit `token_v2` cookie value (`eyJ...`) into **Token V2**.
3. Paste the matching proxy in `ip:port:user:pass` format into **Proxy**.

```json
{
  "credentialSource": "manual",
  "bearer": "eyJhbGciOiJSUzI1NiIs...",
  "proxy": "ip:port:user:pass"
}
```

**Critical:** Reddit IP-binds Token V2 cookies. The proxy MUST be the exact same IP that originally minted the Token V2 — otherwise Reddit returns 401 on every bearer call. Both fields are stored encrypted by Apify (`isSecret: true`).

***

### How to run

1. **Pick a feed** in the "What to fetch" dropdown at the top.
2. **Open the matching section** below it and fill in the fields (subreddit name, topic ID, or seed IDs if needed — sort / time / limit always show up).
3. **For the Latest Feed or Saved Posts Feed:** also fill the **credentials section** at the bottom of the form.
4. **Click Start.**

Each endpoint section is independent — fields outside your chosen section are ignored, so you can leave them as-is between runs. The default endpoint is `popular` so the actor runs out of the box without any credentials.

**Time filter gotcha:** the Time filter is **only applied when Sort is `top` or `controversial`**. Reddit ignores it for `hot`, `new`, `best`, `rising`. The actor passes whatever you set — it's just a no-op for the other sorts.

***

### Output

Results are pushed to the actor's default dataset. View them as a table or download as JSON / CSV / Excel / XML. Every feed pushes **one record per post** (up to your `limit`). The most useful columns are placed first so the dataset Table view is readable without horizontal scrolling.

| Front-loaded column | Meaning |
|---|---|
| `endpoint` | Which feed produced the row (`subreddit`, `popular`, `latest`, etc.) |
| `__typename` | Reddit's cell-stack typename (e.g. `CellGroup`, `RichtextRecommendationContextCell`) |
| `id` | Bare post ID (paste into Reddit Bulk Scrape, Reddit Posts, etc.) |
| `postTitle` | The post's title |
| `score` / `commentCount` | Engagement counters |
| `createdAt` | ISO timestamp |
| `url` / `domain` | Permalink + link domain |
| `voteState` | `NONE`, `UP`, or `DOWN` (vault feeds only) |
| `isNsfw` / `isSpoiler` / `isLocked` / `isStickied` / `isArchived` / `isSaved` / `isHidden` | Status booleans |
| `content` | Selftext / body preview |
| `thumbnail` | Thumbnail URL or `self` for text posts |
| `authorInfo` | `{name, prefixedName}` |
| `flair` | `{text, backgroundColor, textColor}` when set |
| `media` | Media block for video / image / gallery posts |
| `rate_limit_used` / `rate_limit_remaining` / `rate_limit_reset_at` | Your per-account v2 budget surface |

***

### Common edge cases

| Edge case | Cause | How it surfaces |
|---|---|---|
| Empty page | Sort/time combo with no posts (`top` of `hour` on a quiet sub) | Run `SUCCEEDED`, 0 records pushed. Normal — not an error. |
| Quarantined / NSFW subreddit | Reddit hides quarantined subs from anonymous reads | Subreddit Feed: 0 rows or `UnavailableSubreddit` row. NSFW subs work fine. |
| Topic ID retired | Reddit rotated / renamed the topic ID | 0 rows. Pull a fresh topic ID from the Explore feed. |
| Recommended Media seeds capped | Reddit caps the number of seed IDs it'll consider | Pass your most relevant 2–10 subreddit IDs rather than dozens. |
| Time filter on wrong sort | `time=week` with `sort=hot` is silently ignored by Reddit | Use `top` or `controversial` if you want time-window filtering. |
| Latest / Saved Posts return nothing | Token V2 expired or proxy IP doesn't match | Refresh the cookie and proxy in the vault, then re-run. |
| Empty Saved Posts | Account has never saved a post | 0 rows. Save one post via Reddit's UI to confirm the pipeline. |
| Empty input | Forgot the subreddit / topic ID / seeds | Run `FAILED` immediately, no row pushed, no charge. |

***

### Why this actor is fast

- **Speed — 1–4 seconds per call, end-to-end.** Pure HTTP. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based scrapers typically take 15–60 seconds per call.
- **Reliability — zero browser flakiness.** No headless-Chromium crashes. No JS-render timeouts. No captcha pages.
- **Footprint — under 100 MB RAM per run.** Most browser-based scrapers need 1–4 GB.
- **No proxy to configure (for the 9 anonymous feeds).** The backend rotates infrastructure behind the scenes.

***

### Status & error reference

**Run status** *(Apify-side, shown on the run page)*

| Status | Apify message | Meaning | What to do |
|---|---|---|---|
| <img src="https://redcrawler.com/s/apify_pill_succeeded_v11.png" alt="Succeeded" height="40" style="max-width:none" /> | "Actor succeeded with N results in the dataset" | Run finished. Some or zero records pushed. | Open the dataset to view results. |
| <img src="https://redcrawler.com/s/apify_pill_failed_v11.png" alt="Failed" height="40" style="max-width:none" /> | "The Actor process failed…" | Validation error or upstream Reddit fault. | Check the run log. You are NOT charged for failed runs. |
| <img src="https://redcrawler.com/s/apify_pill_timed_out_v11.png" alt="Timed out" height="40" style="max-width:none" /> | "The Actor timed out. You can resurrect it with a longer timeout to continue where you left off." | Run exceeded its timeout. | Re-run with a smaller `limit` or fewer inputs. |
| <img src="https://redcrawler.com/s/apify_pill_aborted_v11.png" alt="Aborted" height="40" style="max-width:none" /> | "The Actor process was aborted. You can resurrect it to continue where you left off." | You stopped the run manually. | No charge for unpushed results. |

**Common in-run conditions** *(visible in run log)*

| Condition | Cause | Result |
|---|---|---|
| Empty result set | Feed has no posts matching the inputs. | Run `SUCCEEDED`, 0 records, no charge. |
| Private / quarantined subreddit | Reddit hides these from anonymous reads. | Run `SUCCEEDED`, those rows skipped. |
| Banned subreddit | Subreddit has been banned by Reddit. | Run `SUCCEEDED`, 0 records for that input. |
| `bearer_expired` (Latest / Saved Posts) | Token V2 older than ~24 h. | Row with `success: false`. Re-paste or use vault. |
| Validation error: missing input | Required parameter not provided. | Run `FAILED` immediately, no charge. |

***

### Pricing

Pay-per-result. **You're only charged for posts actually pushed to the dataset — failed runs and validation errors cost nothing.**

| Event | Trigger | Price (per 1,000) |
|-------|---------|--------------------|
| `result` | Each post row pushed to the dataset | **$1.99** |

A 500-post Subreddit Feed run = 500 rows. A 100-post Popular Feed run = 100 rows. A Latest Feed run on a freshly subscribed account may return 50–250 rows.

***

### Need a different shape of data?

- **[Reddit Search V2](https://apify.com/red_crawler/reddit-search-v2)** — search posts / comments / subreddits / users by keyword
- **[Reddit Scraper V2](https://apify.com/red_crawler/reddit-scraper-v2)** — single post + its full comment tree
- **[Reddit Users V2](https://apify.com/red_crawler/reddit-users-v2)** — user profile, posts, comments, trophies + 10 "my account" endpoints
- **[Reddit Subreddits V2](https://apify.com/red_crawler/reddit-subreddits-v2)** — subreddit info, rules, flairs, wiki, style
- **[Reddit Bulk Scrape V2](https://apify.com/red_crawler/reddit-bulk-scrape-v2)** — bulk lookups by ID (up to 1500 per run)
- **[Reddit Vault](https://apify.com/red_crawler/reddit-vault)** — save Reddit accounts once, call them by name from any auth-required actor

***

### Support and feedback

Found a bug, want a feature, or hit a Reddit error code we don't translate clearly? Open an issue via the actor's Apify Console feedback link, or reach out at the RedCrawler support channel.

***

*Reddit Feeds V2 is part of the RedCrawler family of Reddit actors. RedCrawler is independent — not affiliated with, endorsed by, or sponsored by Reddit, Inc. Use it within Reddit's API terms.*

# Actor input Schema

## `endpoint` (type: `string`):

Choose which feed to call. The first 9 are anonymous (no Reddit account needed). The last 2 require a Reddit account — fill the Reddit credentials section at the bottom of the form.

## `subreddit_name` (type: `string`):

Subreddit name, r/name, or full URL (e.g. 'python', 'r/python', or 'https://www.reddit.com/r/python').

## `subreddit_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `subreddit_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `subreddit_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `popular_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `popular_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `popular_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `news_sort` (type: `string`):

Sort order. News supports an extra 'awarded' option. Time filter only applies to 'top' / 'controversial'.

## `news_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `news_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `all_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `all_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `all_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `explore_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `explore_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `explore_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `games_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `games_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `games_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `watch_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `watch_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `watch_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `topic_id` (type: `string`):

Topic ID like 'tx1\_2unn29s'. Get IDs from the 'Explore Feed' endpoint.

## `topic_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `topic_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `topic_scheme_name` (type: `string`):

Optional scheme name. Leave blank unless you know what you need.

## `topic_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `recommended_media_seeds` (type: `string`):

Comma-separated subreddit fullnames (e.g. 't5\_2qh33,t5\_2cneq'). Recommendations are seeded from these communities.

## `recommended_media_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `recommended_media_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `recommended_media_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `latest_sort` (type: `string`):

Sort order. Defaults to 'new' for the Latest feed. Time filter only applies to 'top' / 'controversial'.

## `latest_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `latest_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `saved_posts_sort` (type: `string`):

Sort order. Time filter only applies to 'top' / 'controversial'.

## `saved_posts_time` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.

## `saved_posts_limit` (type: `integer`):

Max posts to return (1–500). Auto-paginates.

## `credentialSource` (type: `string`):

Only used when the chosen endpoint is one of the bearer-required ones ('Latest Feed' and 'Saved Posts Feed'). For all other endpoints leave the default — credentials are ignored. **Use saved account (vault)** loads your stored Token V2 + proxy from the **reddit-vault** actor — only the 'Saved account name' field is used. **Paste Token V2 + proxy** uses the values you paste below.

## `accountName` (type: `string`):

The name you used in the **reddit-vault** actor when you stored this account. Your Token V2 + proxy load automatically from the vault. Ignored when 'Credential source' = manual.

## `bearer` (type: `string`):

Your Reddit `token_v2` cookie value (`eyJ...`). Lifetime ~24 h. Encrypted at rest by Apify. Ignored when 'Credential source' = vault.

## `proxy` (type: `string`):

Proxy in `ip:port:user:pass` format. MUST be the same IP that originally minted the Token V2. Ignored when 'Credential source' = vault.

## Actor input object example

```json
{
  "endpoint": "popular",
  "subreddit_name": "python",
  "subreddit_sort": "hot",
  "subreddit_time": "all",
  "subreddit_limit": 100,
  "popular_sort": "hot",
  "popular_time": "all",
  "popular_limit": 100,
  "news_sort": "best",
  "news_time": "all",
  "news_limit": 100,
  "all_sort": "hot",
  "all_time": "all",
  "all_limit": 100,
  "explore_sort": "hot",
  "explore_time": "all",
  "explore_limit": 100,
  "games_sort": "hot",
  "games_time": "all",
  "games_limit": 100,
  "watch_sort": "hot",
  "watch_time": "all",
  "watch_limit": 100,
  "topic_id": "tx1_2unn29s",
  "topic_sort": "hot",
  "topic_time": "all",
  "topic_limit": 100,
  "recommended_media_seeds": "t5_2qh33,t5_2cneq",
  "recommended_media_sort": "hot",
  "recommended_media_time": "all",
  "recommended_media_limit": 100,
  "latest_sort": "new",
  "latest_time": "all",
  "latest_limit": 100,
  "saved_posts_sort": "hot",
  "saved_posts_time": "all",
  "saved_posts_limit": 100,
  "credentialSource": "vault"
}
```

# 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 = {
    "endpoint": "popular",
    "subreddit_name": "python",
    "topic_id": "tx1_2unn29s",
    "recommended_media_seeds": "t5_2qh33,t5_2cneq"
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-feeds").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 = {
    "endpoint": "popular",
    "subreddit_name": "python",
    "topic_id": "tx1_2unn29s",
    "recommended_media_seeds": "t5_2qh33,t5_2cneq",
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-feeds").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 '{
  "endpoint": "popular",
  "subreddit_name": "python",
  "topic_id": "tx1_2unn29s",
  "recommended_media_seeds": "t5_2qh33,t5_2cneq"
}' |
apify call red_crawler/reddit-feeds --silent --output-dataset

```

## MCP server setup

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

```

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/4txAbHzV4LAKFyeCq/builds/AoooBlPBbflHWxOza/openapi.json
