# Reddit Users V1 — Profile, Posts, Comments, Lookup (8) (`red_crawler/reddit-users`) Actor

FREE — Reddit user toolkit — 8 anonymous lookups: profile, trophies, overview, posts, comments, browse popular/new, bulk lookup by IDs and username availability. No Reddit account, token or proxy needed.

- **URL**: https://apify.com/red_crawler/reddit-users.md
- **Developed by:** [Red Crawler](https://apify.com/red_crawler) (community)
- **Categories:** Automation, Lead generation, Social media
- **Features:** Limited permissions
- **Stats:** 13 total users, 3 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Reddit Users V1

![Endpoints](https://img.shields.io/badge/endpoints-8-blue) ![Auth](https://img.shields.io/badge/Reddit_account-not_required-brightgreen) ![Proxy](https://img.shields.io/badge/proxy-not_required-brightgreen) ![Price](https://img.shields.io/badge/price-FREE-brightgreen)

> **This actor is free.** There is no per-result fee. You only pay Apify's normal platform usage (the compute time of your run), and Apify's free plan gives you $5 of usage credit every month.

Reddit user toolkit in one actor — **8 lookups**: profile, trophies, posts, comments, overview, browse, bulk-by-IDs and username availability. Pick the endpoint, fill the matching section, hit Start.

**All eight are anonymous — no Reddit account, no token, no proxy.**

***

### What you can do

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

#### Endpoints (no Reddit account needed)

##### 1. About — public profile

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

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

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

**Example**

**Input**

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

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

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

##### 2. Trophies — earned badges

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

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

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

**Example**

**Input**

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

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

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

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

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

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

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

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

**Example**

**Input**

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

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

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

##### 4. Posts — submissions only

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

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

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

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

**Example**

**Input**

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

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

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

##### 5. Comments — comments only

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

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

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

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

**Example**

**Input**

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

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

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

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

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

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

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

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

**Example**

**Input**

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

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

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

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

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

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

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

**Example**

**Input**

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

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

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

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

Tells you whether a username is still claimable on Reddit.

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

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

**Example**

**Input**

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

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

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

### How to run

1. **What to fetch** → pick one of the 8 endpoints from the dropdown.
2. Scroll to the section that matches your endpoint and fill in its fields. **Only that section's fields are used** — other sections are ignored.
3. Hit **Start**. Each run produces one or more dataset rows — exactly one per item returned (e.g. 25 posts → 25 rows).

***

### Output

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

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

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

***

### Common edge cases

| Edge case | Cause | How it surfaces |
|---|---|---|
| Suspended user | Account banned by Reddit admins | `about` returns sparse profile, `posts` / `comments` empty. Some fields may be missing. |
| Shadowbanned user | Account silently suppressed | All anonymous lookups return "User not found" (Reddit hides shadowbanned accounts from outsiders). |
| Private profile | User toggled "Show my profile to logged-out users = off" | Lookups fail with `forbidden`. Skip the user. |
| Mixed valid + invalid IDs in `lookup` | One or more `t2_` IDs are wrong / deleted | Resolved users come back; missing IDs are absent. No error — just fewer rows than IDs supplied. |
| Username with `?` / trailing slash / URL | User pasted a full URL or messy handle | Actor strips it cleanly — `https://reddit.com/user/spez/`, `u/spez`, `spez` all work. |

***

### Why this actor is fast

- **Speed — under 1 second per lookup.** Pure HTTP to Reddit's mobile API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based actors typically take 15–60 seconds per call.
- **Reliability — zero browser flakiness.** No headless-Chromium crashes. No JS-render timeouts. No captcha pages.
- **Footprint — under 100 MB RAM per run.** Most browser-based actors need 1–4 GB.
- **Proxy management handled for you.** No proxy to configure — the backend rotates infrastructure behind the scenes.

***

### Status & error reference

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

| Status | Apify message | Meaning | What to do |
|---|---|---|---|
| <img src="https://redcrawler.com/s/apify_pill_succeeded_v11.png" alt="Succeeded" height="40" style="max-width:none" /> | "Actor succeeded with N results in the dataset" | Run finished, records pushed. | Open the dataset to view the result. |
| <img src="https://redcrawler.com/s/apify_pill_failed_v11.png" alt="Failed" height="40" style="max-width:none" /> | "The Actor process failed…" | Validation error or missing required input. | Check the run log. You are NOT charged for failed runs. |
| <img src="https://redcrawler.com/s/apify_pill_timed_out_v11.png" alt="Timed out" height="40" style="max-width:none" /> | "The Actor timed out. You can resurrect it with a longer timeout to continue where you left off." | Run exceeded timeout (rare — lookups are fast). | Re-run; check Reddit / proxy is reachable. |
| <img src="https://redcrawler.com/s/apify_pill_aborted_v11.png" alt="Aborted" height="40" style="max-width:none" /> | "The Actor process was aborted. You can resurrect it to continue where you left off." | You stopped the run manually. | No charge for unpushed results. |

**Common in-run conditions** *(visible in run log and output record)*

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

***

### Pricing

**Free. There is no per-result fee** — we don't charge anything for the results you get, however many you pull.

You only pay Apify's normal platform usage, which is the compute time your run takes. Apify's free plan includes **$5 of usage credit every month**, so you can start right away without a paid plan.

***

### Need a different shape of data?

- **[Reddit Users V2](https://apify.com/red_crawler/reddit-users-v2)** — profiles with verification status (bot / app accounts), trophies, pinned posts, username validation
- **[Reddit Subreddits](https://apify.com/red_crawler/reddit-subreddits)** — subreddit info, rules, browse, search
- **[Reddit Search V2](https://apify.com/red_crawler/reddit-search-v2)** — search posts, communities and people by keyword
- **[Reddit Bulk Scrape V2](https://apify.com/red_crawler/reddit-bulk-scrape-v2)** — bulk lookups by ID (up to 10000 per run)

***

### Support and feedback

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

***

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

# Actor input Schema

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

Choose which user lookup to run. All 8 endpoints are anonymous — no Reddit account needed.

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

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

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

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

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

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

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

Sort order. Used by: Overview.

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

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

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

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

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

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

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

Sort order. Used by: Posts.

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

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

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

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

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

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

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

Sort order. Used by: Comments.

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

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

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

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

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

Which directory to browse. Used by: Browse Users.

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

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

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

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

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

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

## Actor input object example

```json
{
  "endpoint": "about",
  "about_username": "spez",
  "trophies_username": "spez",
  "overview_username": "spez",
  "overview_sort": "new",
  "overview_time_filter": "",
  "overview_limit": 25,
  "posts_username": "spez",
  "posts_sort": "new",
  "posts_time_filter": "",
  "posts_limit": 25,
  "comments_username": "spez",
  "comments_sort": "new",
  "comments_time_filter": "",
  "comments_limit": 25,
  "browse_directory": "popular",
  "browse_limit": 25,
  "lookup_ids": [
    "t2_1w72"
  ],
  "available_username": "my_new_reddit_handle"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "endpoint": "about",
    "about_username": "spez",
    "trophies_username": "spez",
    "overview_username": "spez",
    "posts_username": "spez",
    "comments_username": "spez",
    "lookup_ids": [
        "t2_1w72"
    ],
    "available_username": "my_new_reddit_handle"
};

// Run the Actor and wait for it to finish
const run = await client.actor("red_crawler/reddit-users").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "endpoint": "about",
    "about_username": "spez",
    "trophies_username": "spez",
    "overview_username": "spez",
    "posts_username": "spez",
    "comments_username": "spez",
    "lookup_ids": ["t2_1w72"],
    "available_username": "my_new_reddit_handle",
}

# Run the Actor and wait for it to finish
run = client.actor("red_crawler/reddit-users").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(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": "about",
  "about_username": "spez",
  "trophies_username": "spez",
  "overview_username": "spez",
  "posts_username": "spez",
  "comments_username": "spez",
  "lookup_ids": [
    "t2_1w72"
  ],
  "available_username": "my_new_reddit_handle"
}' |
apify call red_crawler/reddit-users --silent --output-dataset

```

## MCP server setup

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

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/LIcaE1LejAl4wYqXr/builds/5hcEdhtGiX9M1lZMI/openapi.json
