# 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:** 23 total users, 5 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Reddit 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 require a signed-in Reddit account (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 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.

**Example**

**Input**

```json
{
  "endpoint": "profile",
  "profile_username": "spez"
}
```

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

```json
{
  "endpoint": "profile",
  "__typename": "Redditor",
  "id": "t2_1w72",
  "name": "spez",
  "prefixedName": "u/spez",
  "accountType": "USER",
  "isEmployee": true,
  "isFriend": false,
  "isBlocked": false,
  "isAcceptingChats": false,
  "isAcceptingFollowers": true,
  "isAcceptingPMs": false,
  "profile": {
    "createdAt": "2005-06-06T04:00:00.000000+0000",
    "title": "spez",
    "publicDescriptionText": "Reddit CEO",
    "path": "/user/spez/",
    "isNsfw": false,
    "isContributor": false,
    "isSubscribed": false
  }
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "profile_about",
  "profile_about_username": "spez"
}
```

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

```json
{
  "endpoint": "profile_about",
  "__typename": "Redditor",
  "id": "t2_1w72",
  "name": "spez",
  "prefixedName": "u/spez",
  "accountType": "USER",
  "isEmployee": true,
  "isAcceptingChats": false,
  "isAcceptingFollowers": true,
  "karma": { "total": 937988 },
  "contributionStats": { "postCount": 831, "commentCount": 363 },
  "trophyCase": { "totalUnlocked": 50 },
  "icon": {
    "url": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png?frame=1&auto=webp&crop=256%3A256%2Csmart&s=%E2%80%A6"
  },
  "profileInfo": {
    "__typename": "Profile",
    "id": "t5_3k30p",
    "createdAt": "2005-06-06T04:00:00.000000+0000",
    "title": "spez",
    "publicDescriptionText": "Reddit CEO",
    "isNsfw": false,
    "socialLinks": []
  },
  "isGilded": true
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "profile_details",
  "profile_details_username": "spez"
}
```

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

```json
{
  "endpoint": "profile_details",
  "__typename": "Profile",
  "id": "t5_3k30p",
  "name": "u_spez",
  "title": "spez",
  "publicDescriptionText": "Reddit CEO",
  "subscribersCount": 0,
  "createdAt": "2005-06-06T04:00:00.000000+0000",
  "path": "/user/spez/",
  "isNsfw": false,
  "isQuarantined": false,
  "whitelistStatus": "NO_ADS",
  "allowedPostTypes": [],
  "isSpoilerAvailable": true,
  "isCrosspostingAllowed": true,
  "redditorInfo": {
    "__typename": "Redditor",
    "prefixedName": "u/spez",
    "attributes": {
      "redditHandleInfo": { "displayName": "spez", "username": "spez" },
      "redditorType": "USER",
      "verificationStatus": "PROFILE_VERIFIED"
    }
  }
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "trophies_public",
  "trophies_public_username": "spez",
  "trophies_public_image_max_width": 128
}
```

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

```json
{
  "endpoint": "trophies_public",
  "__typename": "AchievementRepeatableImageTrophy",
  "id": "frequent-contributor",
  "name": "Repeat Contributor",
  "category": "AchievementTrophyCategory",
  "image": {
    "url": "https://preview.redd.it/6w4yuzzgfavc1.png?width=128&height=128&auto=webp&s=%E2%80%A6"
  },
  "numUnlocked": 1
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "profile_trophies",
  "profile_trophies_username": "spez"
}
```

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

```json
{
  "endpoint": "profile_trophies",
  "trophyId": null,
  "name": "20-Year Club",
  "description": null,
  "grantedAt": "2025-06-06T00:00:00.000000+0000",
  "icon70Url": "https://i.redd.it/cms/871b9df322b7cddd_trophy_image_for_20_year_club.png",
  "url": null,
  "awardId": null
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "user_posts",
  "user_posts_username": "spez",
  "user_posts_sort": "new",
  "user_posts_time_filter": "all",
  "user_posts_limit": 3
}
```

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

```json
{
  "endpoint": "user_posts",
  "__typename": "CellGroup",
  "id": "t3_1t4nr7v",
  "name": "t3_1t4nr7v",
  "title": "Reddit looked old the day it was born. I joined my friend D. Scott Phoenix on the Progress podcast to discuss communities, AI, and what makes the internet feel human.",
  "authorName": "u/spez",
  "score": 47,
  "commentCount": 35,
  "createdAt": "2026-05-05T18:19:02.142000+0000",
  "voteState": "NONE",
  "shareCount": 50,
  "isScoreHidden": false,
  "isModeratable": false,
  "isVisited": false,
  "detailsString": "u/spez",
  "detailsLink": "spez",
  "iconPath": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png?width=64&height=64&%E2%80%A6"
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "user_comments",
  "user_comments_username": "spez",
  "user_comments_sort": "new",
  "user_comments_time_filter": "all",
  "user_comments_limit": 3
}
```

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

```json
{
  "endpoint": "user_comments",
  "__typename": "Comment",
  "id": "t1_okpklb6",
  "createdAt": "2026-05-08T20:48:30.912000+0000",
  "score": 24,
  "voteState": "NONE",
  "content": {
    "preview": "Ding ding ding"
  },
  "postInfo": {
    "__typename": "SubredditPost",
    "id": "t3_1t7d1gy",
    "title": "Please Fire Vollero for Buyback Mismanagement",
    "subreddit": { "prefixedName": "r/redditstock" }
  }
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "pinned_posts",
  "pinned_posts_username": "spez"
}
```

**Output** *(one dataset record — `spez` has zero pinned posts, so the actor pushes a "no pinned posts" marker)*

```json
{
  "endpoint": "pinned_posts",
  "username": "spez",
  "pinned_post_count": 0,
  "note": "User has no pinned/sticky posts on their profile."
}
```

When the target user *does* have pinned posts, the actor pushes one row per pin:

```json
{
  "endpoint": "pinned_posts",
  "id": "1abcdef",
  "name": "t3_1abcdef"
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "validate_username",
  "validate_username_username": "spez"
}
```

**Output** *(one dataset record — `spez` is taken, so the lookup resolves to the existing Redditor)*

```json
{
  "endpoint": "validate_username",
  "validation": {
    "redditorInfoByName": {
      "__typename": "Redditor",
      "id": "t2_1w72",
      "prefixedName": "u/spez",
      "profile": { "isNsfw": false },
      "icon": {
        "url": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png"
      }
    }
  }
}
```

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

These ten endpoints require authentication. 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. 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.

**Example**

**Input**

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

**Output** *(one dataset record, trimmed; PII redacted)*

```json
{
  "endpoint": "me_account",
  "account": {
    "id": "t2_abc123def",
    "createdAt": "2024-01-15T07:27:33.029000+0000",
    "email": "redacted@example.com",
    "isEmailVerified": true,
    "isModerator": true,
    "isSuspended": false,
    "isPasswordSet": false,
    "isSubredditCreationAllowed": true,
    "phoneNumber": { "code": null, "number": null },
    "inbox": { "unreadCount": 0 },
    "modMail": { "isUnread": false },
    "linkedIdentities": [],
    "redditor": {
      "__typename": "Redditor",
      "id": "t2_abc123def",
      "name": "<your_username>",
      "prefixedName": "u/<your_username>",
      "accountType": "USER",
      "isEmployee": false,
      "isAcceptingChats": true,
      "isAcceptingFollowers": true,
      "cakeDayOn": "2024-01-15"
    }
  },
  "rate_limit_used": 12,
  "rate_limit_remaining": 1788,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

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

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

```json
{
  "endpoint": "me_real_username",
  "real_username": {
    "identity": {
      "redditor": { "name": "<your_username>" }
    }
  },
  "rate_limit_used": 14,
  "rate_limit_remaining": 1786,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

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

**Output** *(one dataset record; PII redacted)*

```json
{
  "endpoint": "me_email_phone",
  "contact": {
    "identity": {
      "email": "redacted@example.com",
      "phoneNumber": {
        "code": null,
        "number": null
      }
    }
  },
  "rate_limit_used": 13,
  "rate_limit_remaining": 1787,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

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

**Output** *(one dataset record, trimmed — ~50 fields total)*

```json
{
  "endpoint": "me_preferences",
  "preferences": {
    "identity": {
      "preferences": {
        "defaultCommentSort": "CONFIDENCE",
        "acceptPrivateMessagesFrom": "EVERYONE",
        "isNsfwContentShown": true,
        "isNsfwMediaBlocked": true,
        "isNsfwSearchEnabled": false,
        "isFollowersEnabled": true,
        "isShowFollowersCountEnabled": false,
        "isEmailDigestEnabled": false,
        "isSmsNotificationsEnabled": false,
        "isAdPersonalizationAllowed": true,
        "isLocationBasedRecommendationEnabled": true,
        "isFeedRecommendationsEnabled": true,
        "isCommunityStylingEnabled": true,
        "countryCode": "ZZ",
        "minCommentScore": -4
      }
    }
  },
  "rate_limit_used": 15,
  "rate_limit_remaining": 1785,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

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

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

```json
{
  "endpoint": "me_location",
  "location": {
    "countryCode": "US",
    "regionCode": "CA",
    "cityCode": "SAN FRANCISCO",
    "cityUtf8": "SAN FRANCISCO"
  },
  "rate_limit_used": 16,
  "rate_limit_remaining": 1784,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

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

**Output** *(one dataset record containing the activeSubreddits list — sample trimmed to two communities)*

```json
{
  "endpoint": "me_active_subreddits",
  "active_subreddits": {
    "redditorInfoByName": {
      "__typename": "Redditor",
      "activeSubreddits": [
        {
          "id": "t5_2qh23",
          "name": "test",
          "prefixedName": "r/test",
          "type": "PUBLIC",
          "isNsfw": false,
          "subscribersCount": 42321,
          "communityStats": { "weeklyActiveUsersCount": 29583 },
          "isSubscribed": false
        },
        {
          "id": "t5_2qh33",
          "name": "wordpress",
          "prefixedName": "r/wordpress",
          "type": "PUBLIC",
          "isNsfw": false,
          "publicDescriptionText": "WordPress community",
          "subscribersCount": 187432,
          "isSubscribed": true
        }
      ]
    }
  },
  "rate_limit_used": 10,
  "rate_limit_remaining": 1790,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "me_followers",
  "credentialSource": "vault",
  "accountName": "main",
  "me_followers_limit": 10
}
```

**Output** *(one dataset record per follower — sample shown; on a brand-new account with zero followers the payload contains `"count": 0` and the run finishes `SUCCEEDED` with no rows)*

```json
{
  "endpoint": "me_followers",
  "id": "t2_1w72",
  "name": "spez",
  "prefixedName": "u/spez",
  "karma": { "total": 937988 },
  "icon": {
    "url": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png"
  },
  "isFollowed": false,
  "isAcceptingFollowers": true,
  "rate_limit_used": 11,
  "rate_limit_remaining": 1789,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "me_profile_feed",
  "credentialSource": "vault",
  "accountName": "main",
  "me_profile_feed_type": "saved_posts",
  "me_profile_feed_limit": 3
}
```

**Output** *(one dataset record per saved item — payload preserves the SDUI CellGroup structure)*

```json
{
  "endpoint": "me_profile_feed",
  "items": [
    {
      "__typename": "FeedElementEdge",
      "node": {
        "__typename": "CellGroup",
        "id": "dDNfMXN6NHF1OA==",
        "groupId": "t3_1sz4qu8",
        "cells": [
          {
            "__typename": "MetadataCell",
            "createdAt": "2026-04-29T17:01:18.577000+0000",
            "authorName": "u/<your_username>",
            "detailsString": "r/wordpress",
            "detailsLink": "wordpress"
          },
          { "__typename": "TitleCell", "title": "Video Post" },
          { "__typename": "LegacyVideoCell" }
        ]
      }
    }
  ],
  "rate_limit_used": 18,
  "rate_limit_remaining": 1782,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "me_flair_policy",
  "credentialSource": "vault",
  "accountName": "main",
  "me_flair_policy_subreddit": "wordpress"
}
```

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

```json
{
  "endpoint": "me_flair_policy",
  "flair_settings": {
    "subredditInfoByName": {
      "__typename": "Subreddit",
      "authorFlairSettings": {
        "isEnabled": true,
        "isSelfAssignable": true
      }
    }
  },
  "rate_limit_used": 17,
  "rate_limit_remaining": 1783,
  "rate_limit_reset_at": "2026-05-14T09:50:00Z"
}
```

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

**Example**

**Input**

```json
{
  "endpoint": "follow_action",
  "credentialSource": "vault",
  "accountName": "main",
  "follow_action_action": "follow",
  "follow_action_username": "spez"
}
```

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

```json
{
  "endpoint": "follow_action",
  "success": true,
  "data": {
    "targetId": "t2_1w72",
    "username": "spez",
    "action": "follow"
  }
}
```

***

### 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 a Reddit Session in the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) and let the vault auto-refresh the Token V2 from it (recommended). |
| **Reddit Session** (`reddit_session` cookie) | ~180 days | Only needed if you save an account in the [Reddit Vault](https://apify.com/red_crawler/reddit-vault) — the vault uses it to auto-mint fresh Token V2 cookies every ~23 hours. Refresh roughly twice a year. |

> **How to extract these from your browser:** open Reddit in Chrome / Brave / Edge / Firefox, then **DevTools → Application → Cookies → `https://www.reddit.com`**. Filter by `token_v2` (the Token V2) or `reddit_session` (the 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)

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 HTTP to Reddit's API. 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. Built for reliability behind the scenes — just paste your inputs and run.

***

### Status & error reference

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

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

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

| Condition | Cause | Result |
|---|---|---|
| Empty result set | User has no public posts / comments / saved items matching the endpoint. | Run `SUCCEEDED`, 0 records, no charge. |
| Suspended account | Reddit suspended the target account. | Run `SUCCEEDED`, mostly-null record. |
| Deleted account | Account was self-deleted. | Run `SUCCEEDED`, 0 records for that input. |
| Validation error: missing `username` | Required input not provided. | Run `FAILED` immediately, no charge. |

***

### Pricing

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

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

A Profile by Name lookup = 1 row. A 100-post Profile Posts run = 100 rows. A My Followers run on a small account = 5–25 rows. A Follow / Unfollow action = 1 row.

***

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

***

### 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 V2 is part of the RedCrawler family of Reddit actors. RedCrawler is independent — not affiliated with, endorsed by, or sponsored by Reddit, Inc. Use it within Reddit's API terms.*

# Actor input Schema

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

Choose which 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(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "endpoint": "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": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,red_crawler/reddit-users-v2"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0YEecnqoLmPXIvgPv/builds/cT48A0IlcHm2HmX7k/openapi.json
