# Reddit Users V1 — Profile, Lookup, Follow, Block, Friend (13) (`red_crawler/reddit-users`) Actor

Full Reddit user toolkit — 8 anonymous lookups (profile, trophies, posts, comments, overview, browse, bulk-by-IDs, username) + 5 auth ops (my content, user actions, add/remove friend, friends list, show-my-flair). Use Reddit Vault or paste Token V2 + proxy.

- **URL**: https://apify.com/red\_crawler/reddit-users.md
- **Developed by:** [Red Crawler](https://apify.com/red_crawler) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 9 total users, 1 monthly users, 100.0% runs succeeded, 1 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/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 Users V1

![Endpoints](https://img.shields.io/badge/endpoints-13-blue) ![Anonymous](https://img.shields.io/badge/no_auth-8_endpoints-green) ![Auth](https://img.shields.io/badge/Reddit_account-5_endpoints-orange) ![Proxy](https://img.shields.io/badge/proxy-managed-blue) ![Pricing](https://img.shields.io/badge/pricing-pay_per_result-orange)

Full Reddit user toolkit in one actor — **8 anonymous lookups** (profile, trophies, posts, comments, overview, browse, bulk-by-IDs, username availability) plus **5 auth-required actions** (your own content, follow / unfollow / block / unblock / report, add / remove friend, friends list, show / hide your flair). Pick the endpoint, fill the matching section, hit Start.

Anonymous endpoints need no credentials. Auth-required endpoints reuse a saved account from the **Reddit Vault**, or accept a Token V2 + matching proxy pasted inline.

***

### What you can do

Each username field accepts a **raw username** (`spez`), a **u/-prefixed handle** (`u/spez`), or a **full profile URL** (`https://www.reddit.com/user/spez/`). Bulk lookup accepts **raw IDs** (`abcd12`) and **t2\_-prefixed** (`t2_abcd12`) — comma list or one per row.

#### Anonymous endpoints (no credentials needed)

##### 1. About — public profile

Returns a Reddit user's full public profile in one call.

**Returns:** numeric IDs (`id`, `name`), karma breakdown (`total_karma`, `link_karma`, `comment_karma`, `awardee_karma`, `awarder_karma`), badges (`is_employee`, `is_mod`, `is_gold`, `verified`, `has_verified_email`), `created_utc`, snoo / icon URLs, plus the embedded profile-subreddit object (`u_<name>`).

**Use it when:** profile QA, mod queues, lead enrichment, "is this user real / vetted / verified" checks, building dashboards of influencer / employee / mod activity.

**Example**

**Input**

```json
{
  "endpoint": "about",
  "about_username": "spez"
}
```

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

```json
{
  "endpoint": "about",
  "id": "1w72",
  "name": "spez",
  "total_karma": 937988,
  "link_karma": 182650,
  "comment_karma": 755338,
  "awardee_karma": 25000,
  "awarder_karma": 75000,
  "created_utc": 1118030400.0,
  "is_employee": true,
  "is_mod": true,
  "is_gold": true,
  "verified": true,
  "has_verified_email": true,
  "icon_img": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png",
  "snoovatar_img": "https://i.redd.it/snoovatar/avatars/...png",
  "subreddit": {
    "display_name_prefixed": "u/spez",
    "title": "spez",
    "public_description": "Reddit CEO",
    "subscribers": 0,
    "accept_followers": true
  },
  "accept_followers": true,
  "hide_from_robots": false,
  "pref_show_snoovatar": true
}
```

##### 2. Trophies — earned badges

Returns the user's earned Reddit trophies / awards (year-club badges, AMA, gilded, etc.).

**Returns:** array of `{kind: "t6", data: {name, icon_70, icon_40, granted_at, url, description, award_id, id}}` records.

**Use it when:** scoring account age & seniority, filtering "real" users vs. fresh throwaways, building reputation overlays.

**Example**

**Input**

```json
{
  "endpoint": "trophies",
  "trophies_username": "spez"
}
```

**Output** *(one dataset record per trophy)*

```json
{
  "endpoint": "trophies",
  "kind": "t6",
  "data": {
    "name": "15-Year Club",
    "icon_70": "https://www.redditstatic.com/awards2/15_year_club-70.png",
    "icon_40": "https://www.redditstatic.com/awards2/15_year_club-40.png",
    "granted_at": 1749182400,
    "url": null,
    "description": null,
    "award_id": null,
    "id": null
  }
}
```

##### 3. Overview — posts + comments combined

Returns a user's posts and comments interleaved in one feed (Reddit's default profile view).

**Returns:** array of items — each is either a post (`kind: t3`) or a comment (`kind: t1`) with the full Reddit listing payload. Posts get post-shaped columns front-loaded, comments get comment-shaped columns.

**Use it when:** profiling an account's activity, summarising recent contributions, training data for "is this user spammy / on-topic / mod-worthy" classifiers.

**Optional fields:** `overview_sort` (`new` / `hot` / `top` / `controversial`), `overview_time_filter` (`hour` / `day` / `week` / `month` / `year` / `all` — only for `top` / `controversial`), `overview_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "overview",
  "overview_username": "spez",
  "overview_sort": "new",
  "overview_limit": 25
}
```

**Output** *(one dataset record per item — comment shape shown)*

```json
{
  "endpoint": "overview",
  "id": "okpklb6",
  "name": "t1_okpklb6",
  "parent_id": "t1_okoapl8",
  "link_id": "t3_1t7d1gy",
  "author": "spez",
  "author_fullname": "t2_1w72",
  "body": "Ding ding ding",
  "score": 24,
  "ups": 24,
  "downs": 0,
  "created_utc": 1778273310.0,
  "permalink": "https://reddit.com/r/redditstock/comments/1t7d1gy/please_fire_vollero_for_buyback_mismanagement/okpklb6/",
  "is_submitter": false,
  "distinguished": "admin",
  "subreddit": "redditstock",
  "subreddit_name_prefixed": "r/redditstock",
  "subreddit_id": "t5_4x7l6b",
  "total_awards_received": 0
}
```

##### 4. Posts — submissions only

Returns only the user's submitted posts (links + self-posts), no comments.

**Returns:** array of post records with `t3_*` fullnames, post-shaped columns front-loaded.

**Use it when:** finding what an account posts about, OP profile checks, monitoring competitor / influencer posting cadence.

**Optional fields:** `posts_sort`, `posts_time_filter`, `posts_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "posts",
  "posts_username": "spez",
  "posts_sort": "top",
  "posts_time_filter": "year",
  "posts_limit": 10
}
```

**Output** *(one record per post)*

```json
{
  "endpoint": "posts",
  "id": "1tc6ncq",
  "name": "t3_1tc6ncq",
  "title": "Which language should I learn next?",
  "author": "spez",
  "author_fullname": "t2_1w72",
  "subreddit": "test",
  "subreddit_name_prefixed": "r/test",
  "subreddit_id": "t5_2qh23",
  "score": 1,
  "ups": 1,
  "downs": 0,
  "upvote_ratio": 1.0,
  "num_comments": 0,
  "created_utc": 1779421200.0,
  "permalink": "/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "url": "https://www.reddit.com/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "is_self": true,
  "over_18": false,
  "spoiler": false,
  "locked": false,
  "selftext": "Currently writing Python full-time...",
  "thumbnail": "self"
}
```

##### 5. Comments — comments only

Returns only the user's authored comments, no posts.

**Returns:** array of comment records with `t1_*` fullnames, comment-shaped columns front-loaded.

**Use it when:** sentiment analysis on a user, finding their take on a topic, "comments on which subs lately" audits.

**Optional fields:** `comments_sort`, `comments_time_filter`, `comments_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "comments",
  "comments_username": "spez",
  "comments_sort": "new",
  "comments_limit": 25
}
```

**Output** *(one record per comment — same shape as Overview's comment example)*

```json
{
  "endpoint": "comments",
  "id": "okpklb6",
  "name": "t1_okpklb6",
  "parent_id": "t1_okoapl8",
  "link_id": "t3_1t7d1gy",
  "author": "spez",
  "body": "Ding ding ding",
  "score": 24,
  "created_utc": 1778273310.0,
  "permalink": "https://reddit.com/r/redditstock/comments/1t7d1gy/please_fire_vollero_for_buyback_mismanagement/okpklb6/",
  "subreddit": "redditstock"
}
```

##### 6. Browse Users — popular / new directory

Returns Reddit's directory listing of users — either the **popular** profile-subreddits feed or the **new** feed.

**Returns:** array of profile-subreddit records (`t5_*` names with `u_<handle>` display names) — same shape as About's `subreddit` field.

**Use it when:** discovering trending / newly active accounts, sampling for outreach, building "rising users" lists.

**Optional fields:** `browse_directory` (`popular` / `new`), `browse_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "browse_users",
  "browse_directory": "popular",
  "browse_limit": 10
}
```

**Output** *(one record per user)*

```json
{
  "endpoint": "browse_users",
  "name": "t5_3oy63",
  "display_name": "u_thisisinsider",
  "display_name_prefixed": "u/thisisinsider",
  "title": "Business Insider",
  "public_description": "What you want to know about business...",
  "subscribers": 0,
  "created": 1507123989.0,
  "icon_img": "https://styles.redditmedia.com/t5_3oy63/styles/profileIcon_jah6n47yjv041.png",
  "primary_color": "",
  "key_color": "",
  "accept_followers": true,
  "quarantine": false,
  "over_18": false
}
```

##### 7. Users by IDs — bulk lookup by `t2_` IDs

Bulk-resolve many Reddit user IDs to compact profile records in one call. Up to **500 IDs per call** — paste them as a list or comma-separated string.

**Returns:** array — one record per resolved user with `{endpoint, name, id, created_utc, link_karma, comment_karma, profile_img, profile_color, profile_over_18}`.

**Use it when:** hydrating IDs harvested from comments / mod logs / submissions, batch enrichment of large user lists, bulk audience research.

**Example**

**Input**

```json
{
  "endpoint": "lookup",
  "lookup_ids": ["t2_1w72", "t2_29onm7dc32"]
}
```

**Output** *(one record per user)*

```json
{
  "endpoint": "lookup",
  "name": "spez",
  "id": "1w72",
  "created_utc": 1118030400.0,
  "link_karma": 182650,
  "comment_karma": 755338,
  "profile_img": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png",
  "profile_color": "",
  "profile_over_18": false
}
```

##### 8. Username Available — check if a name is free

Tells you whether a username is still claimable on Reddit.

**Returns:** `{endpoint, username, available}` — `available: true` means free, `false` means taken or reserved.

**Use it when:** picking new account names in bulk, brand-protection sweeps, finding free handles.

**Example**

**Input**

```json
{
  "endpoint": "username_available",
  "available_username": "my_new_reddit_handle"
}
```

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

```json
{
  "endpoint": "username_available",
  "username": "my_new_reddit_handle",
  "available": false
}
```

#### Auth-required endpoints (Reddit account needed)

These five endpoints sign in as your account and act on its behalf. Save credentials once in **Reddit Vault** and reuse them by name, or paste Token V2 + matching proxy inline.

##### 9. My Content — your own listings

Returns one of your private listings (overview / submitted / comments / upvoted / downvoted / hidden / saved / gilded).

**Returns:** array of post / comment items with the same shape as the public `overview` / `posts` / `comments` endpoints — but pulled from **your own account's view** so it includes hidden / saved / upvoted items only you can see.

**Use it when:** archiving your account's history, building a personal dashboard, exporting saved / upvoted items for a research corpus.

**Optional fields:** `my_content_sort`, `my_content_time_filter`, `my_content_limit` (1–100).

**Example**

**Input**

```json
{
  "endpoint": "my_content",
  "my_content_type": "overview",
  "my_content_sort": "new",
  "my_content_limit": 25,
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one record per item — post shape shown)*

```json
{
  "endpoint": "my_content",
  "id": "1tc6ncq",
  "name": "t3_1tc6ncq",
  "title": "Which language should I learn next?",
  "author": "motor_tip8865",
  "author_fullname": "t2_29onm7dc32",
  "subreddit": "test",
  "subreddit_name_prefixed": "r/test",
  "score": 1,
  "ups": 1,
  "upvote_ratio": 1.0,
  "num_comments": 0,
  "created_utc": 1779421200.0,
  "permalink": "/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "url": "https://www.reddit.com/r/test/comments/1tc6ncq/which_language_should_i_learn_next/",
  "is_self": true,
  "selftext": "Currently writing Python full-time..."
}
```

##### 10. User Action — follow / unfollow / block / unblock / report

One endpoint, five actions. Picks the action from a dropdown.

**Returns:** `{endpoint, action, target, success, data}` — `data` is the backend response (Reddit's raw acknowledgement, or `{}` on a clean success).

**Use it when:** silently following a competitor / influencer, blocking known spammers in bulk, reporting harassment, programmatic relationship management.

> **Report** also accepts an optional `user_action_site_rule` (e.g. `harassment`, `spam`). **Unblock** auto-resolves your own t2\_ ID from your bearer; only fill `user_action_my_account_id` if auto-resolve fails.

**Example**

**Input**

```json
{
  "endpoint": "user_action",
  "user_action": "follow",
  "user_action_target": "spez",
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

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

```json
{
  "endpoint": "user_action",
  "action": "follow",
  "target": "spez",
  "success": true,
  "data": {}
}
```

##### 11. Add / Remove Friend — manage your friends list

Adds or removes a user from your Reddit friends list.

**Returns:** `{endpoint, action, username, success, data}` — `data` echoes Reddit's response (the friend record on `add`, an empty body on `remove`).

**Use it when:** building a curated follow list of users you want to monitor (Reddit pushes their new posts/comments into your friends feed).

**Example**

**Input**

```json
{
  "endpoint": "friend_action",
  "friend_action": "add",
  "friend_username": "spez",
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

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

```json
{
  "endpoint": "friend_action",
  "action": "add",
  "username": "spez",
  "success": true,
  "data": {
    "date": 1779421200.0,
    "name": "spez",
    "id": "t2_1w72",
    "rel_id": "r9_2lkj8"
  }
}
```

##### 12. Friends List — list your friends

Lists every account you've friended. No filter fields needed.

**Returns:** array of `{endpoint, name, id, date, rel_id}` per friend (front-loaded order). Empty list → one row: `{endpoint, friends: [], count: 0}`.

**Use it when:** auditing who's on your friends list, exporting your friend roster, syncing with an external CRM.

**Optional fields:** `friends_list_max` — cap how many friends to return (0 = all).

**Example**

**Input**

```json
{
  "endpoint": "friends_list",
  "friends_list_max": 0,
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

**Output** *(one record per friend — example shows non-empty case)*

```json
{
  "endpoint": "friends_list",
  "name": "spez",
  "id": "t2_1w72",
  "date": 1779421200.0,
  "rel_id": "r9_2lkj8"
}
```

##### 13. Show My Flair — toggle your flair visibility on a subreddit

Toggles whether your flair on a given subreddit is visible to other users.

**Returns:** `{endpoint, subreddit, flair_enabled, success, data}` — `data` is the backend acknowledgement.

**Use it when:** revealing / hiding your flair in a community as part of profile cleanup, branding swaps, or compliance with subreddit norms.

**Example**

**Input**

```json
{
  "endpoint": "show_my_flair",
  "show_my_flair_subreddit": "AskReddit",
  "show_my_flair_enabled": true,
  "credentialSource": "vault",
  "accountName": "motor_tip8865"
}
```

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

```json
{
  "endpoint": "show_my_flair",
  "subreddit": "AskReddit",
  "flair_enabled": true,
  "success": true,
  "data": {}
}
```

***

### Credentials

The 8 anonymous endpoints (About, Trophies, Overview, Posts, Comments, Browse Users, Users by IDs, Username Available) need no credentials at all — leave the Reddit credentials section blank.

The 5 auth-required endpoints (My Content, User Action, Add / Remove Friend, Friends List, Show My Flair) need a signed-in Reddit account. Save it once in **Reddit Vault** and reuse the name forever, or paste a Token V2 + matching proxy inline for one-off runs.

#### Credential lifetimes

| Credential | Lifetime | When to refresh |
|---|---|---|
| **Token V2** (`token_v2` cookie) | ~24 hours | Daily — or save a Reddit Session in the vault and let it auto-refresh |
| **Reddit Session** (`reddit_session` cookie) | ~180 days | Roughly twice a year, or when a run reports `unauthorized` |

> **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.
>
> ![Token V2 cookie in DevTools](https://docs.redcrawler.com/img/credentials/token-v2-cookie.jpg)
>
> ![Reddit Session cookie in DevTools](https://docs.redcrawler.com/img/credentials/reddit-session-cookie.jpg)

#### Option A — Use saved account (vault) *(recommended)*

1. Run the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) actor once with mode `STORE`, an account name (e.g. `motor_tip8865`), your Token V2 (or Reddit Session for auto-refresh), and the matching proxy.
2. In this actor, set **Credential source** = `Use saved account (vault)` and **Saved account name** = `motor_tip8865`.
3. Token V2 + proxy are pulled from the vault on every run. If you saved a Reddit Session, the Token V2 auto-refreshes whenever it expires.

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

1. Set **Credential source** = `Paste Token V2 + proxy`.
2. Paste the `eyJ…` **Token V2** cookie value (encrypted by Apify at rest).
3. Paste the **Proxy** as `ip:port:user:pass` — must be the same IP that minted the Token V2 (Reddit IP-binds these cookies).

***

### How to run

1. **What to fetch** → pick one of the 13 endpoints from the dropdown.
2. Scroll to the section that matches your endpoint and fill in its fields. **Only that section's fields are used** — other sections are ignored.
3. If your endpoint is auth-required (My Content, User Action, Add / Remove Friend, Friends List, Show My Flair), scroll to **Reddit credentials** and pick a source — vault (name only) or manual (Token V2 + proxy).
4. Hit **Start**. Each run produces one or more dataset rows — exactly one per item returned (e.g. 25 posts → 25 rows; 1 follow → 1 row).

***

### Output

Records are pushed to the run's default dataset. The shape depends on the endpoint:

| Endpoint | Pushed shape | Front-loaded columns |
|---|---|---|
| `about` | one user record | `endpoint, id, name, total_karma, link_karma, comment_karma, …` |
| `trophies` | array of `{kind:"t6", data:{…}}` | `endpoint, kind, data` |
| `overview` / `posts` / `comments` / `my_content` | array of post (`t3`) + comment (`t1`) items | post-shaped or comment-shaped based on `kind` |
| `browse_users` | array of user-subreddits | `endpoint, id, name, total_karma, …` |
| `lookup` | array of compact user records | `endpoint, id, name, total_karma, …` |
| `username_available` | `{endpoint, username, available}` | as listed |
| `friends_list` | array of friend records | `endpoint, name, id, date, rel_id` |
| `user_action` / `friend_action` / `show_my_flair` | one acknowledgement record | `endpoint, action, target / username / subreddit, success, data` |

> Empty results push **one summary row** instead of zero rows (e.g. an empty friends list = `{endpoint: "friends_list", friends: [], count: 0}`), so a successful run with no items still produces a visible record.

***

### Common edge cases

| Edge case | Cause | How it surfaces |
|---|---|---|
| Suspended user | Account banned by Reddit admins | `about` returns sparse profile, `posts` / `comments` empty. Some fields may be missing. |
| Shadowbanned user | Account silently suppressed | All anonymous lookups return "User not found" (Reddit hides shadowbanned accounts from outsiders). |
| Private profile | User toggled "Show my profile to logged-out users = off" | Anonymous lookups fail with `forbidden`. Use an auth-required endpoint on YOUR account with their consent, or skip. |
| Mixed valid + invalid IDs in `lookup` | One or more `t2_` IDs are wrong / deleted | Resolved users come back; missing IDs are absent. No error — just fewer rows than IDs supplied. |
| Bearer expired | Saved Token V2 past ~24 h, no vault session for auto-refresh | Run still completes but auth-required endpoints fail. Re-save the account in Reddit Vault with a Reddit Session for auto-refresh. |
| Bearer minted on a different IP | Token V2 minted on a different proxy than the one paired with it | Auth-required endpoints fail with `unauthorized`. Re-mint the Token V2 on the proxy you'll use, save them as a pair. |
| Username with `?` / trailing slash / URL | User pasted a full URL or messy handle | Actor strips it cleanly — `https://reddit.com/user/spez/`, `u/spez`, `spez` all work. |
| `unblock` auto-resolve failed | Bearer doesn't expose your own t2\_ID | Fill `user_action_my_account_id` manually (you can fetch your own ID via `about` on your own username). |
| Empty friends list | You haven't friended anyone | One row pushed: `{endpoint: "friends_list", friends: [], count: 0}`. |
| Friend already added | Re-running `friend_action: add` on someone already friended | Reddit returns the existing relationship — `success: true`, no duplicate created. |

***

### Why this actor is fast

- **Speed — under 1 second per anonymous lookup, 2–4 seconds per auth-required call.** Pure HTTP to Reddit's mobile API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based actors 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 actors need 1–4 GB.
- **Proxy management handled for you on anonymous endpoints.** No proxy to configure for the 8 read-only endpoints — 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, records pushed. | Open the dataset to view the result. |
| <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 missing required input. | 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 timeout (rare — lookups are fast). | Re-run; check Reddit / proxy is reachable. |
| <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 and output record)*

| Condition | Cause | Result |
|---|---|---|
| User not found | Username doesn't exist, is suspended, or is shadowbanned | Run `SUCCEEDED`, single row with `error: "User not found"`. |
| Private profile | User has logged-out viewing disabled | Run `SUCCEEDED`, row with `error_kind: FORBIDDEN`. |
| Bearer expired / invalid | Token V2 past ~24 h, no vault session for auto-refresh | Run `SUCCEEDED`, row with `error_kind: UNAUTHORIZED`. |
| Validation error: missing endpoint / username / IDs | Required input not provided | Run `FAILED` immediately, no charge. |
| Reddit rate-limit | Per-IP throttle hit (very rare on shared infra) | Run `SUCCEEDED`, row with `error_kind: RATELIMIT`. |

***

### Pricing

Pay-per-result. **You're only charged for records actually pushed to the dataset — failed runs, validation errors, and credential errors that never reach Reddit cost nothing.**

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

A 25-post overview is 25 rows. A single follow / unfollow / block is 1 row. A `lookup` of 100 IDs is up to 100 rows.

***

### Need a different shape of data?

- **[Reddit Vault](https://apify.com/red_crawler/reddit-vault)** — save Reddit accounts once, call them by name from this actor (free)
- **[Reddit Users V2](https://apify.com/red_crawler/reddit-users-v2)** — focused profile + your-account + followers + follow/unfollow flow
- **[Reddit Subreddits](https://apify.com/red_crawler/reddit-subreddits)** — info, browse, join / leave, create
- **[Reddit Posts & Feeds V2](https://apify.com/red_crawler/reddit-posts-feeds-v2)** — home feed + post state controls
- **[Reddit Commenting V2](https://apify.com/red_crawler/reddit-commenting-v2)** — post a top-level comment or reply
- **[Reddit Voting V2](https://apify.com/red_crawler/reddit-voting-v2)** — upvote / downvote / clear your vote
- **[Reddit Posting V2](https://apify.com/red_crawler/reddit-posting-v2)** — create text / link / image / gallery / video / GIF / crosspost / poll posts
- **[Reddit Bulk Scrape V2](https://apify.com/red_crawler/reddit-bulk-scrape-v2)** — bulk lookups by ID (up to 1500 per run)

All of them accept the same `accountName` field, so saving credentials in Reddit Vault unlocks them all.

***

### 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 Users V1 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 user operation to run. Anonymous endpoints don't need any auth. Auth-required endpoints (marked) need a Token V2 + proxy (or a saved Reddit Vault account).

## `about_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: About.

## `trophies_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Trophies.

## `overview_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Overview.

## `overview_sort` (type: `string`):

Sort order. Used by: Overview.

## `overview_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `overview_limit` (type: `integer`):

Max items (1–100). Used by: Overview.

## `posts_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Posts.

## `posts_sort` (type: `string`):

Sort order. Used by: Posts.

## `posts_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `posts_limit` (type: `integer`):

Max posts (1–100). Used by: Posts.

## `comments_username` (type: `string`):

Reddit username, u/name, or profile URL. Used by: Comments.

## `comments_sort` (type: `string`):

Sort order. Used by: Comments.

## `comments_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `comments_limit` (type: `integer`):

Max comments (1–100). Used by: Comments.

## `browse_directory` (type: `string`):

Which directory to browse. Used by: Browse Users.

## `browse_limit` (type: `integer`):

Max users to return (1–100). Used by: Browse Users.

## `lookup_ids` (type: `array`):

List of Reddit account IDs. Accepts both raw IDs (`abcd12`) and t2\_-prefixed (`t2_abcd12`). One per row, or paste a comma-separated list — the actor will split it. Used by: Users by IDs.

## `available_username` (type: `string`):

Username to check for availability. Letters, digits, underscore, hyphen — 1 to 50 characters. Used by: Username Available.

## `my_content_type` (type: `string`):

Which of your own listings to pull. Requires bearer + proxy (or a saved vault account). Used by: My Content.

## `my_content_sort` (type: `string`):

Sort order. Used by: My Content.

## `my_content_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'. Leave as '—' for other sort orders.

## `my_content_limit` (type: `integer`):

Max items (1–100). Used by: My Content.

## `user_action` (type: `string`):

Which action to perform on the target user. Used by: User Action.

## `user_action_target` (type: `string`):

Who to act on. Accepts username, u/name, profile URL, raw ID, or t2\_ prefixed ID. Used by: User Action.

## `user_action_site_rule` (type: `string`):

Reddit site rule key the user violated (e.g. `harassment`, `spam`). Optional. Ignored for follow / unfollow / block / unblock.

## `user_action_my_account_id` (type: `string`):

Your own t2\_ ID (e.g. `t2_1w72`). Optional — the actor auto-resolves this from your bearer for unblock. Fill in only if auto-resolve fails. Ignored for follow / unfollow / block / report.

## `friend_action` (type: `string`):

Whether to add or remove the target user as a friend. Used by: Add / Remove Friend.

## `friend_username` (type: `string`):

Reddit username to add or remove from your friends list. Used by: Add / Remove Friend.

## `friends_list_max` (type: `integer`):

Cap the number of friends returned (client-side trim). 0 or empty = return all. Used by: Friends List.

## `show_my_flair_subreddit` (type: `string`):

Subreddit name where you want to show or hide your flair (with or without `r/`). Used by: Show My Flair.

## `show_my_flair_enabled` (type: `boolean`):

True = show your flair to other users in this subreddit. False = hide it. Used by: Show My Flair.

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

Used by all auth-required endpoints (My Content, User Action, Add/Remove Friend, Friends List, Show My Flair). Anonymous endpoints ignore this section. **Use saved account (vault)** loads your stored Token V2 + proxy from the **reddit-vault** actor (auto-refreshed if you saved a Reddit Session) — only the 'Saved account name' field below is used. **Paste Token V2 + proxy** uses the values you paste below — the 'Saved account name' field is ignored.

## `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": "about",
  "about_username": "spez",
  "trophies_username": "spez",
  "overview_username": "spez",
  "overview_sort": "new",
  "overview_time_filter": "",
  "overview_limit": 25,
  "posts_username": "spez",
  "posts_sort": "new",
  "posts_time_filter": "",
  "posts_limit": 25,
  "comments_username": "spez",
  "comments_sort": "new",
  "comments_time_filter": "",
  "comments_limit": 25,
  "browse_directory": "popular",
  "browse_limit": 25,
  "lookup_ids": [
    "t2_1w72"
  ],
  "available_username": "my_new_reddit_handle",
  "my_content_type": "overview",
  "my_content_sort": "new",
  "my_content_time_filter": "",
  "my_content_limit": 25,
  "user_action": "follow",
  "user_action_target": "spez",
  "friend_action": "add",
  "friend_username": "spez",
  "friends_list_max": 0,
  "show_my_flair_subreddit": "AskReddit",
  "show_my_flair_enabled": true,
  "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": "about",
    "about_username": "spez",
    "trophies_username": "spez",
    "overview_username": "spez",
    "posts_username": "spez",
    "comments_username": "spez",
    "lookup_ids": [
        "t2_1w72"
    ],
    "available_username": "my_new_reddit_handle",
    "user_action_target": "spez",
    "friend_username": "spez",
    "show_my_flair_subreddit": "AskReddit"
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-users").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": "about",
    "about_username": "spez",
    "trophies_username": "spez",
    "overview_username": "spez",
    "posts_username": "spez",
    "comments_username": "spez",
    "lookup_ids": ["t2_1w72"],
    "available_username": "my_new_reddit_handle",
    "user_action_target": "spez",
    "friend_username": "spez",
    "show_my_flair_subreddit": "AskReddit",
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-users").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 '{
  "endpoint": "about",
  "about_username": "spez",
  "trophies_username": "spez",
  "overview_username": "spez",
  "posts_username": "spez",
  "comments_username": "spez",
  "lookup_ids": [
    "t2_1w72"
  ],
  "available_username": "my_new_reddit_handle",
  "user_action_target": "spez",
  "friend_username": "spez",
  "show_my_flair_subreddit": "AskReddit"
}' |
apify call red_crawler/reddit-users --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/LIcaE1LejAl4wYqXr/builds/moAA2KbbmekNFRv9y/openapi.json
