Reddit User Scraper
Pricing
Pay per event
Reddit User Scraper
Scrape any Reddit user's submissions or comments by username — no login — and export to JSON or CSV. A Reddit user downloader returning title, body, subreddit, score, upvotes, timestamp, and permalink per post. We rotate fingerprints and retry on Reddit's 429s.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
29 minutes ago
Last modified
Categories
Share
🎯 What this scrapes
This Actor pages through every public Reddit user profile and collects the full submission and comment history for each username you provide. One row per post or comment: kind, ID, subreddit, title, body, URL, permalink, score, comment count, NSFW flag, and ISO-8601 timestamps. Ideal for OSINT timelines, recruiter due-diligence briefs, fraud-pattern detection, and academic user-activity research.
It reads Reddit's user-profile listing endpoints, paginates through all available pages, and writes clean typed rows into your Apify dataset — ready for JSON, CSV, or Excel export straight from the Console.
🔥 Features
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Firefox and Safari TLS handshakes so the target sees a browser, not Python. We rotate profiles per session to stay off the block list. - 🌐 Residential proxy rotation via Apify Proxy — every time we hit a rate-limit wall, we rotate the session and exit IP so the scrape keeps moving.
- 🔁 Retries with exponential backoff — up to 5 attempts per page on
408 / 429 / 5xx, withRetry-Afterheaders honoured to the second. - 🧱 Rate-limit-aware pacing — when Reddit pushes back, we back off and resume rather than get banned. Partial progress surfaces as a clear status message; we never silently return an empty dataset.
- 🧊 Clean, typed dataset rows — Pydantic-validated fields, ISO-8601 timestamps, stable Reddit fullname IDs, and direct JSON / CSV / Excel export.
- 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge beyond the small warm-up fee.
💡 Use cases
- OSINT investigations — reconstruct a user's complete public Reddit timeline for due-diligence, fraud detection, or digital-methods research.
- Recruiter screening — pull a developer's Reddit history to understand their expertise, community engagement, and communication style before outreach.
- Brand monitoring — track what specific accounts say about your product or space across subreddits.
- Fraud-pattern detection — analyse posting cadence, subreddit distribution, and score trajectories to identify promotional or coordinated accounts.
- Academic research — build labelled user-activity datasets for computational social science studies.
- Content discovery — extract a user's highest-scoring posts for a portfolio or competitive-intelligence brief.
⚙️ How to use it
- Click Try for free at the top of the page.
- Paste one or more Reddit usernames (without the
u/prefix) into theusernamesfield. - Choose
what(submissions, comments, or both),sortBy, andtimeFilter. - Set
maxResultsPerUser— Reddit caps any listing at 1 000 items; set 0 to collect all available. - Click Start. Results stream into the run's dataset in real time.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch programmatically via the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
usernames | array | yes | ["spez"] | Reddit usernames without u/. Profile URLs are also accepted. |
what | string | no | "submitted" | "submitted", "comments", or "overview" (both). |
sortBy | string | no | "new" | "new", "hot", "top", or "controversial". |
timeFilter | string | no | "all" | "all", "year", "month", "week", or "day". |
maxResultsPerUser | integer | no | 100 | Max items to collect per user. Set 0 for Reddit's 1 000-item cap. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy with sticky sessions. Residential proxies recommended for high-volume runs. |
Example input
{"usernames": ["spez"],"what": "submitted","sortBy": "new","maxResultsPerUser": 3,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every run produces one dataset row per submission or comment scraped.
| Field | Type | Notes |
|---|---|---|
kind | string | "submission" or "comment". |
id | string | Reddit fullname (t1_ / t3_ + base-36 ID). |
username | string | Author username (the account we scraped). |
subreddit | string | Subreddit the item belongs to. |
title | string | null | Submission title; null for comments. |
body | string | null | Comment body or selftext. Markdown. |
url | string | null | Outbound URL or self-link (submissions only). |
permalink | string | Canonical Reddit permalink. |
score | integer | Score (upvotes minus downvotes). |
num_comments | integer | null | Comment count (submissions only). |
over_18 | boolean | null | NSFW flag (submissions only). |
created_utc | integer | Unix timestamp in seconds. |
posted_at | string | ISO-8601 datetime derived from created_utc. |
scraped_at | string | ISO-8601 datetime when this row was recorded. |
Example output
{"kind": "submission","id": "t3_abc123","username": "spez","subreddit": "AskReddit","title": "What's your favourite movie?","body": null,"url": "https://www.reddit.com/r/AskReddit/comments/abc123/","permalink": "https://www.reddit.com/r/AskReddit/comments/abc123/whats_your_favourite_movie","score": 142,"num_comments": 1283,"over_18": false,"created_utc": 1747339200,"posted_at": "2026-05-15T20:00:00+00:00","scraped_at": "2026-05-16T08:31:00+00:00"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.005 | One-off warm-up charge per run |
result | $0.001 | Per dataset item written |
Example: 1 000 results ≈ $1.00 total. No subscription, no minimum spend, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- 1 000-item cap per user per listing — Reddit hides items beyond position ~1 000 in any single listing. If a user has posted thousands of times, you'll receive the most recent 1 000 matching the chosen
sortByandtimeFilter. For deeper historical pulls, combine multipletimeFilterpasses or use a Pushshift-based Actor (separate product). - Deleted and suspended accounts — if a username no longer exists or has been suspended, the Actor logs a 404 or 403 and skips that user; remaining usernames in the batch still run.
- Private subreddits — posts made in private subreddits are not visible on public user profiles and will not appear in output.
- NSFW content on restricted proxies — some residential proxy exit IPs are geo-blocked by Reddit's NSFW gates. The Actor captures the NSFW flag but may skip body text if the proxy cannot access adult content.
❓ FAQ
Is this legal?
The Actor reads the same public profile pages any logged-out browser visitor sees. Stick to public-record use cases — due diligence, fraud analytics, academic research, brand monitoring. Don't profile minors; don't use output to harass.
Is this a RedditMetis alternative?
RedditMetis is a great UI tool for exploring a single account interactively. This Actor is the headless, bulk, dataset-export complement: feed it 50 usernames, get back a structured dataset in 90 seconds. They cover different workflows; many researchers use both.
What is the reddit user activity api and why not just use it directly?
Reddit's public listing endpoints are rate-limited and block most datacenter IPs without a properly fingerprinted client. We handle the TLS impersonation, proxy rotation, session management, and pagination so you get a clean dataset — not a 429 loop.
How do I scrape both posts and comments?
Set what to "overview". You'll get a combined timeline of submissions and comments in a single run, each row tagged with kind: "submission" or kind: "comment".
Can I get comments on a user's posts (not by the user)?
Out of scope for this Actor — we surface only the items the target user authored. To collect thread replies, use a Reddit thread scraper.
What happens if a user has been deleted or banned?
The Actor logs the failure, skips that username, and continues with the rest of the batch. The final set_status_message reports how many users completed vs. how many were skipped.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new output field? Open an issue on the Actor's Issues tab in Apify Console — we ship fixes weekly and we read every report.