# Reddit Users V2 — Profiles + My Account & Followers (19) (`red_crawler/reddit-users-v2`) Actor

Look up any Reddit user (profile, trophies, posts, comments, pinned) and read your own account (active subs, real username, email & phone, prefs, location, followers, account, feeds). Follow/unfollow, validate usernames, flair policy. 19 endpoints — 8 anonymous, 11 saved-account.

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

## 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 V2

![Endpoints](https://img.shields.io/badge/endpoints-19-blue) ![Auth](https://img.shields.io/badge/Reddit_account-9_no_/_10_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)

Nineteen self-contained user-account endpoints — full profile, summary, trophies, post / comment history, pinned posts, username validation, **plus the 10 "My account" endpoints** that the Android app uses (full identity payload, real username, email & phone, preferences, location, active subreddits, followers, private feeds, flair policy, follow / unfollow).

The first 9 endpoints are **anonymous — no Reddit account, no OAuth, no proxy required.** The 10 bearer endpoints reuse a Reddit account you've already saved in the **Reddit Vault** actor (or you can paste a Token V2 + matching proxy directly).

Pick an endpoint, fill the matching section, hit Start.

---

### What you can fetch

Every "by name" / target-username field accepts a username in any of these formats — paste whichever you have:

- raw username — `spez`
- prefixed — `u/spez`
- profile URL — `https://www.reddit.com/user/spez`
- old-Reddit URL — `https://old.reddit.com/u/spez`

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

##### 1. Profile by Name — full Redditor identity

The richest user record. Pulls everything Reddit exposes for an account on the profile page header.

**Returns:** Reddit ID, username, prefixed name (`u/...`), account creation date, total karma split into post / comment / award / awardee karma, contribution counts, snoovatar, profile icon, banner, public description, social links, employment / location info, accepted-DMs flag, accepted-chats flag, accepted-followers flag, isFollowed, NSFW flag, isModerator flag, isEmployee flag, premium status (Reddit Gold), trophy-case totals, verification flags.

**Use it when:** you need a complete profile picture in a single call — bios, audience-research dashboards, account-quality scoring, KYC-style background checks.

##### 2. Profile Info by Name — karma + profile-page info

A focused subset oriented around the public profile *page* rather than the full identity. Slightly different field set from "Profile by Name".

**Returns:** banner image, public description, NSFW flag, social links, total karma, contribution stats (post + comment count), trophy-case total, account type (regular / brand / employee).

**Use it when:** you only need the public-facing profile-page payload (banner, bio, link list, totals) and don't need the deeper identity fields.

##### 3. Profile Details by Name — profile-as-subreddit settings

Every Reddit profile is technically also a subreddit (`u_spez`). This endpoint returns those subreddit-style settings.

**Returns:** post permissions (who can post on the user's profile), flair settings, mod permissions, contributor / subscriber status, whitelist status, NSFW flag, the user's authorFlair (their flair on their *own* profile).

**Use it when:** you need to know whether a profile accepts posts from others, how it's flaired, or its contributor / whitelist state — typical for moderation, anti-spam, or community-mapping work.

##### 4. User Trophies by Name — categorized trophy case (public)

Returns the user's trophy case **grouped by category** (e.g., "Cake Day", "Gilding", "Verified Email", "Years of Service").

**Returns:** category groupings with each trophy's name, description, icon URL (size configurable, 16–1024 px), granted-at timestamp, trophy ID.

**Note:** Only returns data if the user opted into a **public** trophy case. Many users have it private — the response will be empty for those. If you need trophies regardless of the public flag, use **Profile Trophies** below.

**Use it when:** you want the user's trophy case the way Reddit displays it on the profile sidebar, organized by section.

##### 5. Profile Trophies by Name — flat trophy list

Same trophy data as above, but flat (no category grouping) and works on most accounts.

**Returns:** array of trophies with description, icon URL, grantedAt, name, trophyId, awardId.

**Use it when:** you want a clean list of trophies for analytics, or you need data even if the user's trophy case isn't public.

##### 6. Profile Posts by Name — submitted-post feed

Paginates the user's submitted posts.

**Inputs:**
- **Sort** — `new`, `hot`, `top`, `controversial`
- **Time filter** — `hour`, `day`, `week`, `month`, `year`, `all` (only applies when sort is `top` or `controversial` — ignored otherwise)
- **Limit** — 1 to 1250

**Returns:** post records with title, body / selftext, score, comment count, created timestamp, subreddit, post URL, thumbnail, vote state, NSFW / spoiler / locked / stickied / archived flags, flair, media, author info — one dataset row per post.

**Use it when:** building user-content dashboards, scraping a creator's posting history, training models on author-tagged Reddit content, influence / engagement analysis.

##### 7. Profile Comments by Name — comment history

Paginates the user's comments.

**Inputs:** same controls as Profile Posts — sort, time filter, limit (1–1250).

**Returns:** comment records with body, score, created timestamp, parent post info, parent comment ID, subreddit, OP flag, score-hidden flag, author info — one row per comment.

**Use it when:** sentiment analysis, conversation mining, comment-history audit, finding what subreddits a user is active in.

##### 8. Profile Pinned Posts — IDs pinned to profile

Returns the post IDs the user has pinned to the top of their profile (the "sticky" section on the profile page).

**Returns:** list of post IDs (Reddit `t3_` fullnames).

**Note:** Most users have **zero** pinned posts. An empty list is the normal result unless the user explicitly pinned something.

**Use it when:** featured-content discovery — pinned posts are usually the user's best work or active campaigns.

##### 9. Validate Username — availability + rule compliance

Checks whether a username is available to register **and** whether it complies with Reddit's naming rules (length, allowed characters, reserved names).

**Returns:** `valid` (overall pass / fail), `available` (free to register), `reasons` (list of rule violations if any).

**Use it when:** building an "is this name free?" UX, batch-validating proposed usernames before account creation, auditing username pools.

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

These ten endpoints hit GraphQL queries Reddit only serves to authenticated users. Fill the **Reddit credentials** section at the bottom of the input form (see [Credentials](#credentials) below).

##### 10. My Account — full identity payload

Returns the full identity + account-state payload Reddit serves the signed-in user when the Android app loads. The **richest single call** in the bearer set.

**Returns:** account `id` (`t2_...`), `name` (current display username), `kind`, `createdAt`, `isEmployee`, `isMod`, `isPremium`, `premium` block (subscription status, expiration), `redditor` block (karma split, contribution counts, snoovatar, banner, public description, social links, accepted-DMs / chats / followers flags), `identity` block (verification flags, accepted privacy / TOS state), `preferences` block (top-level prefs subset).

**Use it when:** dashboards that surface "what does my account look like right now"; verifying a saved Token V2 still works; pulling the account's `t2_` ID for use in other calls.

##### 11. My Real Username — immutable canonical name

Returns the canonical (immutable) username on the account. Reddit lets users change their display name, but the underlying canonical username is fixed at signup — this endpoint surfaces it.

**Returns:** `realUsername` (the immutable name), `displayUsername` (what the user currently shows publicly).

**Use it when:** you need a stable identifier across rename events; bot / mod tooling that has to track an account through display-name changes.

##### 12. My Email & Phone

Returns the email and phone number Reddit has on file for the signed-in account.

**Returns:** `email`, `emailVerified`, `phone`, `phoneVerified`.

**Use it when:** account-recovery audits, GDPR / data-export tooling, verifying contact info before sensitive actions.

##### 13. My Preferences — full account preferences

Returns the full **account preferences** payload — every toggle from Reddit's preferences page (notifications, mature content, language, premium-related toggles, search filters, etc.).

**Returns:** ~50 preference fields including `acceptPms`, `enableFollowers`, `over18`, `noProfanity`, `searchIncludeOver18`, `defaultCommentSort`, `media` (autoplay), `topKarmaSubreddits`, `language`, `country`, `subscriberCount`, `enabledFeatures`, `enableNotifications`, `liveOrangereds`, `mediaPreviews`, `monitorMentions`, `numComments`, `numsites`, `showFlair`, `showLinkFlair`, `showLocationBasedRecommendations`, `showPromote`, `showStylesheets`, `showTrending`, `videoAutoplay`, etc.

**Use it when:** mirroring a user's settings, configuration-as-code, account-clone tooling, audit-logging preference changes.

##### 14. My Location

Returns Reddit's country / region inference for the signed-in account.

**Returns:** `country`, `region`, `inferredFromIp` (whether the value came from IP geolocation).

**Use it when:** geo-targeted content workflows, regional A/B testing, audit-logging which country Reddit thinks the account is in.

##### 15. My Active Subreddits

Returns the subreddits the signed-in account has been most active in recently — the "active communities" feed Reddit shows on the home page sidebar.

**Returns:** array of subreddits with `id` (`t5_...`), `name`, `prefixedName` (`r/...`), `iconUrl`, `subscribersCount`, plus the activity score Reddit uses to rank them.

**Use it when:** surfacing personal community lists, building "where am I active?" dashboards, recommendation system seeds.

##### 16. My Followers

Lists the accounts following the signed-in profile.

**Inputs (optional):**
- **Limit** — `1` to `100` (default `25`).

**Returns:** array of follower accounts with `id` (`t2_...`), `name`, `prefixedName`, `iconUrl`, `karma` (total), `isFollowed` (whether you follow them back), `acceptsFollowers`.

**Use it when:** audience growth tracking, follow-back automation, spotting brand-new followers, audience-research dashboards.

##### 17. Profile Feeds — saved / hidden / upvoted / downvoted

Paginates one of the signed-in account's **private** profile feeds — these are the lists Reddit only shows to you.

**Inputs:**
- **Feed type** — `saved_posts`, `saved_comments`, `hidden`, `upvoted`, `downvoted`.
- **Limit** — `1` to `500` (default `100`). Auto-paginates server-side.

**Returns:** post or comment records (depending on feed type), one dataset row per item.

**Use it when:** exporting your saved-content library, archive / backup tooling, building "things I upvoted" personal dashboards, recovering hidden posts before unhiding.

##### 18. Subreddit Flair Policy — per-subreddit user-flair policy

Returns two booleans describing the user-flair policy for a given subreddit (whether user flairs are enabled there, and whether you can self-assign one).

**Inputs:**
- **Subreddit** — name with or without `r/`, or subreddit URL.

**Returns:** `isEnabled`, `isSelfAssignable`.

**Use it when:** flair-management tooling, pre-checking before calling subreddit-flair set / clear actions, building "communities where I can pick my own flair" lists.

##### 19. Follow / Unfollow Profile

**Action endpoint** (writes state to your account). Follows or unfollows another Reddit profile.

**Inputs:**
- **Action** — `follow` or `unfollow`.
- **Target username** — username, `u/name`, or profile URL of the account to follow / unfollow. Resolved to a `t2_` ID server-side.
- **Target account ID (optional)** — Reddit `t2_` account ID. If provided, skips the username lookup.

**Returns:** `targetId` (`t2_...`), `action` (echoed), `success` flag.

**Use it when:** automated follow / unfollow workflows, bulk-following from a list, audit-logging follow-state changes.

---

### Credentials

The 10 bearer-required endpoints (My Account, My Real Username, My Email & Phone, My Preferences, My Location, My Active Subreddits, My Followers, Profile Feeds, Subreddit Flair Policy, Follow / Unfollow Profile) 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 it once in the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) and let the vault auto-refresh. |

> **How to extract Token V2 from your browser:** open Reddit in Chrome / Brave / Edge / Firefox, then **DevTools → Application → Cookies → `https://www.reddit.com`**. Filter by `token_v2` and copy the **Value** column.
>
> ![Token V2 cookie in DevTools](https://docs.redcrawler.com/img/credentials/token-v2-cookie.jpg)

You have two options:

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

1. Run the **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.
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. Refresh the vault entry whenever the Token V2 expires (~24 h lifetime).

#### 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**.

**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.

---

### How to run

1. **Pick an endpoint** in the "What to fetch" dropdown at the top. Anonymous endpoints (1–9) are at the top of the list; bearer-required endpoints (10–19) are grouped at the bottom.
2. **Open the matching section** below it and fill its fields (most "by name" endpoints just need a username).
3. **If your endpoint is bearer-required** (10–19), fill the Reddit credentials section at the bottom.
4. **Click Start.**

Each endpoint section is independent — fields outside your chosen section are ignored, so you can leave them as-is between runs. Default username is `spez` (Reddit co-founder, public profile) and the default endpoint is `Profile by Name`, so the actor runs out of the box.

---

### Output

Results are pushed to the actor's default dataset. View them as a table or download as JSON / CSV / Excel / XML.

- **Profile by Name / Profile Info by Name / Profile Details by Name / User Trophies by Name / Profile Trophies by Name / Profile Pinned Posts / Validate Username / My Account / My Real Username / My Email & Phone / My Preferences / My Location / My Active Subreddits / My Followers / Subreddit Flair Policy / Follow / Unfollow Profile** push **one record** per run.
- **Profile Posts by Name / Profile Comments by Name / Profile Feeds** push **one record per item** (up to your `limit`).

The most useful columns are placed first (`endpoint`, `id`, `name`, `kind`, `createdAt`, etc.) so the dataset Table view is readable without horizontal scrolling.

---

### Common edge cases

- **Suspended accounts** — Reddit returns minimal data; expect most fields to be null.
- **Deleted accounts** — username `[deleted]` cannot be looked up; the call returns an empty / error record.
- **Brand-new accounts** — trophy and karma fields may be 0; this is normal.
- **Private trophy case** — User Trophies by Name returns empty. Use Profile Trophies by Name instead.
- **NSFW profiles** — fully supported; the `isNsfw` flag in the response tells you if the profile is marked NSFW.
- **Bearer expired** — Reddit Token V2 cookies live ~24 h. If you get an `error_kind: bearer_expired` response, refresh the Token V2 in your vault entry (or paste a fresh one in manual mode) and re-run.
- **Follow / Unfollow on a profile that doesn't accept followers** — the call still returns success but no follow relationship is created. Check the target profile's `acceptsFollowers` field (via Profile by Name) before bulk runs.
- **My Followers cap** — Reddit serves at most 100 followers per call. For very large follower lists, run multiple paginated calls (or use the bulk feed actors).
- **Validate Username with reserved names** — Reddit reserves a small set of names (e.g. `admin`, system handles); these return `valid: false` with `reasons` listing the violation.
- **Empty private feeds** — if you've never saved / hidden / voted, the corresponding Profile Feed is empty. Normal.

---

### Why this actor is fast

- **Speed — 1–3 seconds per call, end-to-end.** Pure GraphQL / HTTP to Reddit. 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. No surprise mid-run failures from a browser quirk.
- **Footprint — under 100 MB RAM per run.** Most browser-based scrapers need 1–4 GB. We're a thin async dispatcher — Reddit auth, proxy rotation, retry, and GraphQL handling all happen off-actor on our backend.

---

### Pricing

Pay-per-result. You're only charged for records actually pushed to the dataset — failed runs cost nothing. See the actor's pricing tab for the current per-result rate.

---

### Need a different shape of data?

- For **bulk user lookups** (many usernames in one run, up to 1500 users), see **Reddit Bulk Scrape V2** (`user_info_by_ids` mode).
- For **subreddit lookups** (rules, type, leaderboards, settings), see **Reddit Subreddits V2**.
- For **post / comment scraping** (single post + thread), see **Reddit Scraper V2**.
- For **search** (finding posts / comments / users / subreddits by keyword), see **Reddit Search V2**.
- For **subreddit / home / profile feeds** (the actual posts in a feed), see **Reddit Feeds V2**.
- For **storing a Reddit account once and reusing it across actors**, see **Reddit Vault**.
- For **posting / commenting / voting / moderation actions**, see the V1 action actors.

# Actor input Schema

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

Choose which user lookup or account action to run. The first 9 are anonymous (no Reddit account needed). The last 10 require a Reddit account — fill the Reddit credentials section at the bottom of the form.
## `profile_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `profile_about_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `profile_details_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `trophies_public_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `trophies_public_image_max_width` (type: `integer`):

Max width for trophy icon URLs returned by Reddit.
## `profile_trophies_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `user_posts_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `user_posts_sort` (type: `string`):

Sort order. Time filter only applies to 'top' and 'controversial'.
## `user_posts_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.
## `user_posts_limit` (type: `integer`):

Max posts to return (1–1250).
## `user_comments_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `user_comments_sort` (type: `string`):

Sort order. Time filter only applies to 'top' and 'controversial'.
## `user_comments_time_filter` (type: `string`):

Time window — IGNORED unless sort is 'top' or 'controversial'.
## `user_comments_limit` (type: `integer`):

Max comments to return (1–1250).
## `pinned_posts_username` (type: `string`):

Reddit username, u/name, or profile URL.
## `validate_username_username` (type: `string`):

Username to validate (availability + rule compliance).
## `me_account_marker` (type: `string`):

This endpoint takes no input fields beyond your saved account / Token V2.
## `me_real_username_marker` (type: `string`):

This endpoint takes no input fields beyond your saved account / Token V2.
## `me_email_phone_marker` (type: `string`):

This endpoint takes no input fields beyond your saved account / Token V2.
## `me_preferences_marker` (type: `string`):

This endpoint takes no input fields beyond your saved account / Token V2.
## `me_location_marker` (type: `string`):

This endpoint takes no input fields beyond your saved account / Token V2.
## `me_active_subreddits_marker` (type: `string`):

This endpoint takes no input fields beyond your saved account / Token V2. Fill the **Reddit credentials** section at the bottom and hit Start.
## `me_followers_limit` (type: `integer`):

Max followers to return (1–100).
## `me_profile_feed_type` (type: `string`):

Which profile feed to fetch.
## `me_profile_feed_limit` (type: `integer`):

Max items to return (1–500). Auto-paginates.
## `me_flair_policy_subreddit` (type: `string`):

Subreddit name (with or without r/), or subreddit URL.
## `follow_action_action` (type: `string`):

Whether to follow or unfollow the target profile.
## `follow_action_username` (type: `string`):

Reddit username, u/name, or profile URL of the account to follow / unfollow. Ignored if account_id is provided.
## `follow_action_account_id` (type: `string`):

Reddit t2_ account ID. If provided, skips the username lookup. Otherwise leave blank and fill the username field.
## `credentialSource` (type: `string`):

Only used when the chosen endpoint is one of the bearer-required ones (the last 10 in the dropdown — all 'My X', plus 'Profile Feeds', 'Subreddit Flair Policy', 'Follow / Unfollow Profile'). 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": "profile",
  "profile_username": "spez",
  "profile_about_username": "spez",
  "profile_details_username": "spez",
  "trophies_public_username": "spez",
  "trophies_public_image_max_width": 128,
  "profile_trophies_username": "spez",
  "user_posts_username": "spez",
  "user_posts_sort": "new",
  "user_posts_time_filter": "all",
  "user_posts_limit": 100,
  "user_comments_username": "spez",
  "user_comments_sort": "new",
  "user_comments_time_filter": "all",
  "user_comments_limit": 100,
  "pinned_posts_username": "spez",
  "validate_username_username": "spez",
  "me_followers_limit": 25,
  "me_profile_feed_type": "saved_posts",
  "me_profile_feed_limit": 100,
  "me_flair_policy_subreddit": "AskReddit",
  "follow_action_action": "follow",
  "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": "profile",
    "profile_username": "spez",
    "profile_about_username": "spez",
    "profile_details_username": "spez",
    "trophies_public_username": "spez",
    "profile_trophies_username": "spez",
    "user_posts_username": "spez",
    "user_comments_username": "spez",
    "pinned_posts_username": "spez",
    "validate_username_username": "spez",
    "me_flair_policy_subreddit": "AskReddit"
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-users-v2").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": "profile",
    "profile_username": "spez",
    "profile_about_username": "spez",
    "profile_details_username": "spez",
    "trophies_public_username": "spez",
    "profile_trophies_username": "spez",
    "user_posts_username": "spez",
    "user_comments_username": "spez",
    "pinned_posts_username": "spez",
    "validate_username_username": "spez",
    "me_flair_policy_subreddit": "AskReddit",
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-users-v2").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": "profile",
  "profile_username": "spez",
  "profile_about_username": "spez",
  "profile_details_username": "spez",
  "trophies_public_username": "spez",
  "profile_trophies_username": "spez",
  "user_posts_username": "spez",
  "user_comments_username": "spez",
  "pinned_posts_username": "spez",
  "validate_username_username": "spez",
  "me_flair_policy_subreddit": "AskReddit"
}' |
apify call red_crawler/reddit-users-v2 --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Users V2 — Profiles + My Account & Followers (19)",
        "description": "Look up any Reddit user (profile, trophies, posts, comments, pinned) and read your own account (active subs, real username, email & phone, prefs, location, followers, account, feeds). Follow/unfollow, validate usernames, flair policy. 19 endpoints — 8 anonymous, 11 saved-account.",
        "version": "0.9",
        "x-build-id": "7pGEGrtjmsuimxpkR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/red_crawler~reddit-users-v2/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-red_crawler-reddit-users-v2",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/red_crawler~reddit-users-v2/runs": {
            "post": {
                "operationId": "runs-sync-red_crawler-reddit-users-v2",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/red_crawler~reddit-users-v2/run-sync": {
            "post": {
                "operationId": "run-sync-red_crawler-reddit-users-v2",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "endpoint"
                ],
                "properties": {
                    "endpoint": {
                        "title": "What to fetch",
                        "enum": [
                            "profile",
                            "profile_about",
                            "profile_details",
                            "trophies_public",
                            "profile_trophies",
                            "user_posts",
                            "user_comments",
                            "pinned_posts",
                            "validate_username",
                            "me_account",
                            "me_real_username",
                            "me_email_phone",
                            "me_preferences",
                            "me_location",
                            "me_active_subreddits",
                            "me_followers",
                            "me_profile_feed",
                            "me_flair_policy",
                            "follow_action"
                        ],
                        "type": "string",
                        "description": "Choose which user lookup or account action to run. The first 9 are anonymous (no Reddit account needed). The last 10 require a Reddit account — fill the Reddit credentials section at the bottom of the form.",
                        "default": "profile"
                    },
                    "profile_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "profile_about_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "profile_details_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "trophies_public_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "trophies_public_image_max_width": {
                        "title": "Trophy icon size (px)",
                        "minimum": 16,
                        "maximum": 1024,
                        "type": "integer",
                        "description": "Max width for trophy icon URLs returned by Reddit.",
                        "default": 128
                    },
                    "profile_trophies_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "user_posts_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "user_posts_sort": {
                        "title": "Sort",
                        "enum": [
                            "new",
                            "hot",
                            "top",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "Sort order. Time filter only applies to 'top' and 'controversial'.",
                        "default": "new"
                    },
                    "user_posts_time_filter": {
                        "title": "Time filter (top / controversial only)",
                        "enum": [
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'.",
                        "default": "all"
                    },
                    "user_posts_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 1250,
                        "type": "integer",
                        "description": "Max posts to return (1–1250).",
                        "default": 100
                    },
                    "user_comments_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "user_comments_sort": {
                        "title": "Sort",
                        "enum": [
                            "new",
                            "hot",
                            "top",
                            "controversial"
                        ],
                        "type": "string",
                        "description": "Sort order. Time filter only applies to 'top' and 'controversial'.",
                        "default": "new"
                    },
                    "user_comments_time_filter": {
                        "title": "Time filter (top / controversial only)",
                        "enum": [
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time window — IGNORED unless sort is 'top' or 'controversial'.",
                        "default": "all"
                    },
                    "user_comments_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 1250,
                        "type": "integer",
                        "description": "Max comments to return (1–1250).",
                        "default": 100
                    },
                    "pinned_posts_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL."
                    },
                    "validate_username_username": {
                        "title": "Username",
                        "type": "string",
                        "description": "Username to validate (availability + rule compliance)."
                    },
                    "me_account_marker": {
                        "title": "(no fields)",
                        "type": "string",
                        "description": "This endpoint takes no input fields beyond your saved account / Token V2."
                    },
                    "me_real_username_marker": {
                        "title": "(no fields)",
                        "type": "string",
                        "description": "This endpoint takes no input fields beyond your saved account / Token V2."
                    },
                    "me_email_phone_marker": {
                        "title": "(no fields)",
                        "type": "string",
                        "description": "This endpoint takes no input fields beyond your saved account / Token V2."
                    },
                    "me_preferences_marker": {
                        "title": "(no fields)",
                        "type": "string",
                        "description": "This endpoint takes no input fields beyond your saved account / Token V2."
                    },
                    "me_location_marker": {
                        "title": "(no fields)",
                        "type": "string",
                        "description": "This endpoint takes no input fields beyond your saved account / Token V2."
                    },
                    "me_active_subreddits_marker": {
                        "title": "(no fields)",
                        "type": "string",
                        "description": "This endpoint takes no input fields beyond your saved account / Token V2. Fill the **Reddit credentials** section at the bottom and hit Start."
                    },
                    "me_followers_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Max followers to return (1–100).",
                        "default": 25
                    },
                    "me_profile_feed_type": {
                        "title": "Feed type",
                        "enum": [
                            "saved_posts",
                            "saved_comments",
                            "hidden",
                            "upvoted",
                            "downvoted"
                        ],
                        "type": "string",
                        "description": "Which profile feed to fetch.",
                        "default": "saved_posts"
                    },
                    "me_profile_feed_limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Max items to return (1–500). Auto-paginates.",
                        "default": 100
                    },
                    "me_flair_policy_subreddit": {
                        "title": "Subreddit",
                        "type": "string",
                        "description": "Subreddit name (with or without r/), or subreddit URL."
                    },
                    "follow_action_action": {
                        "title": "Action",
                        "enum": [
                            "follow",
                            "unfollow"
                        ],
                        "type": "string",
                        "description": "Whether to follow or unfollow the target profile.",
                        "default": "follow"
                    },
                    "follow_action_username": {
                        "title": "Target username",
                        "type": "string",
                        "description": "Reddit username, u/name, or profile URL of the account to follow / unfollow. Ignored if account_id is provided."
                    },
                    "follow_action_account_id": {
                        "title": "Target account ID (t2_xxx) — optional",
                        "type": "string",
                        "description": "Reddit t2_ account ID. If provided, skips the username lookup. Otherwise leave blank and fill the username field."
                    },
                    "credentialSource": {
                        "title": "Credential source",
                        "enum": [
                            "vault",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Only used when the chosen endpoint is one of the bearer-required ones (the last 10 in the dropdown — all 'My X', plus 'Profile Feeds', 'Subreddit Flair Policy', 'Follow / Unfollow Profile'). 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.",
                        "default": "vault"
                    },
                    "accountName": {
                        "title": "Saved account name (used when source = vault)",
                        "pattern": "^[A-Za-z0-9_-]{1,32}$",
                        "maxLength": 32,
                        "type": "string",
                        "description": "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": {
                        "title": "Token V2 (used when source = manual)",
                        "type": "string",
                        "description": "Your Reddit `token_v2` cookie value (`eyJ...`). Lifetime ~24 h. Encrypted at rest by Apify. Ignored when 'Credential source' = vault."
                    },
                    "proxy": {
                        "title": "Proxy (used when source = manual)",
                        "type": "string",
                        "description": "Proxy in `ip:port:user:pass` format. MUST be the same IP that originally minted the Token V2. Ignored when 'Credential source' = vault."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
