# Reddit User Scraper — Posts, Comments & Profile (`signalengine/reddit-user-scraper`) Actor

Scrape any Reddit user's recent posts and comments plus the websites they've shared — login-free, no proxy. One profile record per user.

- **URL**: https://apify.com/signalengine/reddit-user-scraper.md
- **Developed by:** [James Taylor](https://apify.com/signalengine) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 user profiles

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 User Scraper — Posts, Comments & Profile

A **Reddit user scraper** that pulls any Reddit user's **recent posts and comments** — plus the
**company website they've shared** — in a single run. Give it a list of usernames and get back one
clean profile record per user: their recent activity items and an inferred website. It's
**login-free, needs no API key, and no proxy** — it reads Reddit's public feeds directly.

Built for lead research, contact enrichment, community and influencer analysis, and moderation —
turning a raw list of Reddit handles into something you can act on.

### Why this instead of a generic scraper?

Most Reddit profile scrapers demand an API key and OAuth dance, route you through paid proxies, or
dump raw HTML you have to parse yourself. This one is deliberately simple: feed it usernames, get
back a tidy JSON profile per user — **recent posts and comments, the subreddits they're active in,
and a best-effort company website** mined from the links they've shared.

Because it reads Reddit's **public RSS feeds**, it needs **no login, no API key, and no proxy**, and
it's polite by design (modest concurrency, a descriptive User-Agent, retries with backoff). Hand it
the handles you already have — from a community export, a Reddit Lead Finder run, or your CRM — and
it enriches each one in parallel.

### What the Reddit User Scraper does

- Fetches each user's **recent activity** (posts **and** comments) from their public login-free feed.
- Returns **one record per user**: the activity items (title, subreddit, body, link, timestamp) plus
  an **inferred company website** mined from the external links they've shared, skipping social, news,
  and code hosts.
- Runs multiple usernames **in parallel** (configurable) and de-duplicates handles automatically.
- Never fabricates data — if a website can't be confidently inferred, the field is `null`.

### Who it's for

- **B2B founders & sales teams** enriching a list of Reddit handles with activity and a likely website.
- **Agencies** profiling prospects and understanding which subreddits a contact frequents.
- **Community & influencer analysts** sizing up what a user posts about and where.
- **Moderators & researchers** reviewing a user's recent public footprint quickly.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `usernames` | array | `[]` | Reddit usernames to scrape (with or without `u/`). **Required.** |
| `maxItemsPerUser` | integer | `25` | Cap recent posts/comments captured per user (RSS serves up to ~25). |
| `resolveWebsite` | boolean | `true` | Infer the user's likely company site from the links they've shared. |
| `maxConcurrency` | integer | `4` | Parallel user fetches. |

#### Example input

```json
{
  "usernames": ["spez", "founder_jane"],
  "maxItemsPerUser": 25,
  "resolveWebsite": true,
  "maxConcurrency": 4
}
````

### How to run

1. Click **Try for free** (or open the actor in your Apify Console).
2. Enter the **usernames** you want to scrape — with or without the `u/` prefix, one per line.
3. Set **maxItemsPerUser** to cap how many recent posts/comments are captured per user.
4. (Optional) Toggle **resolveWebsite** off if you only need the activity items, not the inferred site.
5. (Optional) Raise **maxConcurrency** to scrape a long list of usernames faster.
6. Click **Start**. When the run finishes, open the **Dataset** tab and export to JSON/CSV/Excel,
   or pull it via the API (below).

Run it on a **schedule** (Apify Schedules) to re-enrich a watchlist of handles, or call it from
**Make / Zapier / n8n** via the Apify integrations.

### Output

One item per user:

```json
{
  "type": "profile",
  "username": "founder_jane",
  "profileUrl": "https://www.reddit.com/user/founder_jane",
  "website": "https://getacme.io",
  "itemCount": 25,
  "items": [
    {
      "type": "comment",
      "title": "Re: best CRM for a small team",
      "subreddit": "SaaS",
      "body": "We switched to Acme last year and…",
      "url": "https://www.reddit.com/r/SaaS/comments/abc/_/xyz",
      "createdAt": "2026-06-02T18:22:00.000Z"
    }
  ]
}
```

Field notes:

- **`username`** is the cleaned handle (the `u/` prefix is stripped if you included it).
- **`profileUrl`** is the canonical link to the user's Reddit profile.
- **`website`** is **best-effort** — the most confident non-social domain mined from the links in the
  user's recent activity, returned as `https://<domain>`, or `null` when there's no clear signal (we
  never fake it). Set `resolveWebsite` to `false` to skip it entirely.
- **`itemCount`** is how many activity items were captured (capped by `maxItemsPerUser`).
- **`items[].type`** is either `post` or `comment`.
- **`items[]`** carries the `title`, `subreddit`, `body`, `url`, and `createdAt` for each post or comment.

#### Export & API

```bash
## Last run's dataset items as JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json&token=<APIFY_TOKEN>"
```

Or use the **run-sync-get-dataset-items** endpoint to run-and-wait in a single call — handy for
embedding the actor in your own backend.

### Limitations

- **Recent activity only.** The public feed returns up to ~25 recent items per user, so this is a
  snapshot of recent posts and comments, **not** a full historical export.
- **No engagement scores.** The feed doesn't expose per-item upvote or comment counts, so the actor
  doesn't return them (we never fake numbers).
- **`website` is inferred, not declared.** It's present only when there's a confident non-social
  signal in the user's shared links, otherwise `null`. The profile bio is blocked to scrapers, so we
  infer from activity instead.
- **No real-time monitoring, DMs, or posting.** The actor only reads — it never logs in, posts,
  votes, messages, or watches a feed continuously.
- **Suspended, shadowbanned, or inactive accounts** may return no items; the run logs a hint when
  many usernames come back empty.

### Compliance

This actor reads **public Reddit activity feeds only**, identifies itself with a descriptive
User-Agent, runs at modest concurrency, and never logs in, posts, votes, or messages. You are
responsible for using the output in line with Reddit's terms and any privacy, outreach, or marketing
rules that apply to you.

### FAQ

**Do I need a Reddit account, API key, or proxy to scrape a Reddit user?** No — the Reddit user
scraper reads public RSS activity feeds directly, so there's no login, no API key, no OAuth, and no
proxy required.

**How do I scrape a Reddit user's posts and comments?** Add their username (with or without `u/`) to
the `usernames` list and run the actor. Each user comes back as one profile record containing their
recent posts and comments under `items`.

**Can I scrape multiple Reddit users at once?** Yes — pass an array of usernames. They're fetched in
parallel (controlled by `maxConcurrency`, up to 20), and duplicate handles are skipped automatically.

**How do I get a Reddit user's company website or shared links?** Keep `resolveWebsite` on (the
default). The actor mines the external links a user has shared in recent activity and returns the
most confident non-social domain as `website`, or `null` when there's no clear signal.

**Why is the `website` field null for some users?** Either the user hasn't shared an external company
link in their recent activity, the only links are social/news/code hosts (which are skipped), or you
turned `resolveWebsite` off. The bio isn't readable to scrapers, so the website is inferred from
activity only.

**How many posts and comments does it return per Reddit user?** Up to ~25 recent items per user (the
limit of the public feed). Use `maxItemsPerUser` to capture fewer; you can't exceed what the feed
serves.

**Does this Reddit profile scraper return upvotes or karma?** No — Reddit's public feed doesn't
expose upvote, comment, or karma counts, so the actor doesn't return them rather than guessing.

**How fresh is the data?** It reads the live feed on every run, so you always get the user's latest
public posts and comments. Re-run on a schedule to keep a watchlist of handles enriched.

**How is it priced and how do I control cost?** Apify Pay-Per-Event — you're charged per **user**
scraped (items plus inferred website included). The number of usernames you submit is your cost ceiling.

***

#### Want these profiles turned into outreach?

This actor enriches the handles you already have. Pair it with our **Reddit Lead Finder** to source
intent-driven users first — then let **[SignalEngine](https://engine.signalsprint.io)** enrich
contacts and run AI-personalised outreach automatically. This actor is a taste of the engine that
powers it.

# Actor input Schema

## `usernames` (type: `array`):

Reddit usernames to scrape (with or without u/).

## `maxItemsPerUser` (type: `integer`):

Cap recent posts/comments captured per user (RSS serves up to ~25).

## `resolveWebsite` (type: `boolean`):

Infer the user's likely company website from the links they've shared.

## `maxConcurrency` (type: `integer`):

Parallel user fetches.

## Actor input object example

```json
{
  "usernames": [
    "spez"
  ],
  "maxItemsPerUser": 25,
  "resolveWebsite": true,
  "maxConcurrency": 4
}
```

# Actor output Schema

## `profiles` (type: `string`):

Per-user records: recent posts/comments, shared links, inferred website.

# 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 = {
    "usernames": [
        "spez"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalengine/reddit-user-scraper").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 = { "usernames": ["spez"] }

# Run the Actor and wait for it to finish
run = client.actor("signalengine/reddit-user-scraper").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 '{
  "usernames": [
    "spez"
  ]
}' |
apify call signalengine/reddit-user-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit User Scraper — Posts, Comments & Profile",
        "description": "Scrape any Reddit user's recent posts and comments plus the websites they've shared — login-free, no proxy. One profile record per user.",
        "version": "0.1",
        "x-build-id": "7LgqHaLbKZNtbVHDu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/signalengine~reddit-user-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-signalengine-reddit-user-scraper",
                "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/signalengine~reddit-user-scraper/runs": {
            "post": {
                "operationId": "runs-sync-signalengine-reddit-user-scraper",
                "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/signalengine~reddit-user-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-signalengine-reddit-user-scraper",
                "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": [
                    "usernames"
                ],
                "properties": {
                    "usernames": {
                        "title": "Usernames",
                        "type": "array",
                        "description": "Reddit usernames to scrape (with or without u/).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerUser": {
                        "title": "Max items per user",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Cap recent posts/comments captured per user (RSS serves up to ~25).",
                        "default": 25
                    },
                    "resolveWebsite": {
                        "title": "Resolve website",
                        "type": "boolean",
                        "description": "Infer the user's likely company website from the links they've shared.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel user fetches.",
                        "default": 4
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
