Reddit API Scraper : User Profiles
Pricing
from $5.99 / 1,000 results
Reddit API Scraper : User Profiles
Reddit API Scraper — Scrape Reddit user profiles and extract usernames, profile details, karma, account dates, avatars, activity, and profile metadata. Build structured datasets for audience research, community analysis, user discovery, and Reddit insights.
Pricing
from $5.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Reddit API Scraper — Extract User Profiles, Posts and Comments
Reddit API Scraper : User Profiles turns a list of Reddit usernames into structured profile, post, and comment data — no Reddit login, API key, or developer app required. Give it one or more usernames or profile URLs and it returns a profile row per user plus their public submitted posts and comments, sorted new, hot, top, or controversial. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. A legacy subreddit-scoped keyword-search mode is also included for backward compatibility with the original Reddit API Scraper.
🧭 What is Reddit API Scraper : User Profiles?
Reddit API Scraper : User Profiles is a person-centric Reddit data extractor: it queries by username or profile URL, not by keyword, and returns each account's public activity as normalized JSON rows — one profile row per user, plus one row per post and one row per comment. No Reddit account, login, or API credentials are required to run it; you only need an Apify account to start the run.
⚠️ Real limitation, disclosed plainly: a user's aggregate karma totals and account-creation date ("cake day") are not obtainable through this Actor's credential-free data path. The profile row is still emitted for every requested username, with those fields explicitly null and a karmaDataAvailable: false flag — so a workflow can tell "not available" apart from "zero" at a glance. Post and comment content (titles, bodies, scores, comment counts, timestamps) is real and unaffected.
What it returns and controls:
- 🧑💻 User profiles — one row per requested username, with a
karmaDataAvailableflag marking the aggregate-karma limitation above - 📝 Submitted posts — a user's public post history, with real engagement fields (score, upvote ratio, comment count, awards, flair, NSFW flag)
- 💬 Comments — a user's public comment history, with real score and controversiality data
- 🔀 Sort control — order each user's content by
new,hot,top, orcontroversial - 🔢 Per-user item cap —
maxItemsPerUserlimits posts and comments independently, from 0 to 1000 - 🔎 Legacy keyword search — the original Reddit API Scraper's subreddit-scoped keyword search still works alongside username lookups
📦 What data can you get with Reddit API Scraper : User Profiles?
Every row carries three shared fields — type (profile, post, or comment), isChild (true when the row belongs to a looked-up username rather than a legacy keyword search), and parentUsername (the username it belongs to, or null) — plus the type-specific fields below.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Profile | username, id, fullname, totalKarma, linkKarma, commentKarma, awardeeKarma, awarderKarma, karmaDataAvailable, createdUtc, createdAt, isGold, isMod, isEmployee, verified, hasVerifiedEmail, iconImg, profileTitle, profileDescription, profileOver18, profileUrl, metaData, scrapedAt | Build a one-row-per-user index of who was processed |
| Post | id, name, subreddit, subreddit_name_prefixed, subreddit_id, subreddit_type, title, body, selftext, selftext_html, author, author_fullname, author_flair_type, author_flair_text, link_flair_type, link_flair_text, link_flair_text_color, domain, thumbnail, permalink, permalinkUrl, url, score, ups, upvote_ratio, num_comments, num_crossposts, total_awards_received, over_18, is_video, is_self, is_original_content, created_utc, createdAt, scrapedAt, metaData, keyword (legacy search only) | Content and engagement analysis of a user's post history, or subreddit-scoped keyword monitoring |
| Comment | id, name, author, subreddit, subreddit_name_prefixed, body, body_html, score, ups, controversiality, permalink, permalinkUrl, link_id, link_title, link_permalink, link_url, created_utc, createdAt, metaData, scrapedAt | Sentiment and behavior analysis of a user's comment history, or surfacing genuinely controversial comments |
Sort order: what's exact and what's approximated
new and top are exact — new is genuine chronological order, top is a genuine sort by each item's real score. hot is an honest best-effort approximation: recent items ranked by score, pulled from a wider recent pool (up to 5× the requested count, capped at 500 items) and re-sorted client-side, since a live, decaying "hot" ranking can't be reproduced after the fact. controversial is exact for comments (Reddit's own controversiality flag, tie-broken by score) and an honest approximation for posts (ranked by how close upvote_ratio is to 50/50). No values are invented to produce any ordering — every re-rank uses real fields already present on the item.
⚡ How does Reddit API Scraper : User Profiles differ from the official Reddit API?
Reddit's own API returns similar underlying data but through a different access model. Reddit API Scraper : User Profiles is built to skip the setup that model requires.
| Feature | Reddit's official API | Reddit API Scraper : User Profiles |
|---|---|---|
| Access requirements | Register a developer app and obtain OAuth client credentials before any request | None — add usernames and run |
| Output format | Raw platform JSON (Listing/Thing-wrapped objects) that your code must parse and paginate | Normalized rows — one profile, post, or comment per line, ready for a dataset export |
| Batch usernames in one job | One user per request; batching is your own code | Array of usernames in a single run input, processed automatically |
| Aggregate karma / cake day | Returned directly when authenticated | Not obtainable through this Actor's credential-free path — explicitly null with karmaDataAvailable: false |
| Subreddit-scoped keyword search | Supported via the platform's search endpoint | Supported (legacy searchKeywords + subredditNames), for backward compatibility |
| Sort control | Supported per endpoint | new/top exact; hot/controversial client-side approximations (see above) |
Use the official API directly if your karma/cake-day figures must be authoritative and you're already set up to manage OAuth credentials. Use Reddit API Scraper : User Profiles when you want a normalized dataset of a set of users' posts and comments without registering a Reddit app.
🚀 How to scrape Reddit user activity with Reddit API Scraper : User Profiles?
- Open Reddit API Scraper : User Profiles on its Apify Store listing and click Start (or Try for free) to open the run configuration.
- Add one or more entries to
usernames— bare usernames,u/name, or full profile URLs, one per line. - Set the real query controls:
includePosts/includeCommentsto choose what to fetch,maxItemsPerUserfor the per-user cap, andsortfor ordering. - Click Start to run the Actor.
- Download results from the Dataset tab, or stream them via the Apify API, in the export format your workflow needs (including JSON and CSV).
Example input:
{"usernames": ["spez", "u/GallowBoob"],"includePosts": true,"includeComments": true,"maxItemsPerUser": 20,"sort": "new"}
How to run multiple usernames in one job
usernames accepts an array — add entries one at a time or paste a newline-separated list via Bulk edit, and every username is processed in the same run. Usernames are processed one after another within the run, not in parallel; no user-configurable concurrency is exposed. The legacy searchKeywords array works the same way and runs alongside the username lookups, not instead of them.
⬇️ Input
All fields are optional at the schema level, but a run needs at least one entry in usernames or searchKeywords — an empty run exits immediately with nothing collected.
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
usernames | No | array (stringList) | — | Reddit usernames to look up (e.g. spez, u/spez) or full profile URLs (e.g. https://www.reddit.com/user/spez). Add multiple with + Add or Bulk edit, one per line. Each user's public profile and activity is collected once. |
includePosts | No | boolean | default true | When on, fetches posts submitted by each user (from their public post history) and adds one row per post. |
includeComments | No | boolean | default true | When on, fetches comments made by each user (from their public comment history) and adds one row per comment. |
maxItemsPerUser | No | integer | default 20; min 0; max 1000 | Maximum number of posts to fetch per user AND maximum number of comments to fetch per user (each capped independently at this number). Set to 0 to skip content and collect only the profile row. |
sort | No | string, enum: new, hot, top, controversial | default "new" | How each user's posts and comments are ordered: New (latest first, exact), Top (highest scoring, exact), Hot (approximated from recent top-scoring activity), or Controversial (comments: genuinely most divisive by Reddit's own controversiality flag; posts: approximated from vote balance). |
searchKeywords | No | array (stringList) | — | Optional. Original keyword-search mode: searches for each word/phrase within the subreddits listed below and returns matching posts, grouped by keyword. Runs alongside the user lookups above, not instead of them. Same field as the base Reddit API Scraper actor. Requires at least one entry in subredditNames below. |
subredditNames | No | array (stringList) | — | Required when using searchKeywords above — the keyword search runs within these subreddits. Same field as the base actor. |
resultsLimitPerKeyword | No | integer | default 10; min 1; max 1000 | Maximum posts to fetch per legacy search keyword. Same field as the base actor. |
sorting | No | string, enum: new, hot, top, relevance | default "new" | How legacy keyword-search results are ordered: New/Relevance (latest first, exact) or Hot/Top (highest scoring, exact). |
Full example input:
{"usernames": ["spez", "u/GallowBoob"],"includePosts": true,"includeComments": true,"maxItemsPerUser": 20,"sort": "new","searchKeywords": ["python"],"subredditNames": ["webscraping"],"resultsLimitPerKeyword": 10,"sorting": "new"}
⚠️ Common pitfall: filling in searchKeywords without adding at least one entry to subredditNames does not scan all of Reddit — it is skipped entirely for that keyword, with a warning written to the run log. A subreddit-free, Reddit-wide keyword scan isn't supported by the underlying data source; add one or more subreddits to subredditNames to make legacy keyword search run.
⬆️ Output
Results are typed, normalized JSON with a consistent schema per row type (profile, post, comment), streamed to the dataset the moment each row is collected — you don't wait for the whole run to finish. Export the dataset as JSON, CSV, Excel, or any other format the Apify platform's dataset export supports.
Every row — profile, post, or comment — is charged as a single row_result event; the Actor does not push separate error, summary, or accounting rows, so every dataset row corresponds to exactly one billed event.
The default dataset view ("Posts & comments") and the alternate "User profiles" view each surface a subset of columns for readability — the full row (documented above and shown below) always contains every field.
Scraped results
[{"type": "profile","isChild": false,"parentUsername": null,"username": "spez","id": null,"fullname": null,"totalKarma": null,"linkKarma": null,"commentKarma": null,"awardeeKarma": null,"awarderKarma": null,"karmaDataAvailable": false,"createdUtc": null,"createdAt": null,"isGold": null,"isMod": null,"isEmployee": null,"verified": null,"hasVerifiedEmail": null,"iconImg": null,"profileTitle": null,"profileDescription": null,"profileOver18": null,"profileUrl": "https://www.reddit.com/user/spez","metaData": { "username": "spez" },"scrapedAt": "2026-07-30T12:00:00+00:00"},{"type": "post","isChild": true,"parentUsername": "spez","id": "1u7hraf","name": "t3_1u7hraf","subreddit": "reddit","subreddit_name_prefixed": "r/reddit","subreddit_id": "t5_2qh1e","subreddit_type": "public","title": "21 years of Reddit","body": "Twenty-one years ago today...","selftext": "Twenty-one years ago today...","selftext_html": "<div class=\"md\"><p>Twenty-one years ago today...</p></div>","author": "spez","author_fullname": "t2_1w72","author_flair_type": "text","author_flair_text": null,"link_flair_type": "text","link_flair_text": null,"link_flair_text_color": null,"domain": "self.reddit","thumbnail": "self","permalink": "/r/reddit/comments/1u7hraf/21_years_of_reddit/","permalinkUrl": "https://www.reddit.com/r/reddit/comments/1u7hraf/21_years_of_reddit/","url": "https://www.reddit.com/r/reddit/comments/1u7hraf/21_years_of_reddit/","score": 606,"ups": 606,"upvote_ratio": 0.94,"num_comments": 201,"num_crossposts": 0,"total_awards_received": 0,"over_18": false,"is_video": false,"is_self": true,"is_original_content": false,"created_utc": 1781568000,"createdAt": "2026-06-16T00:00:00+00:00","scrapedAt": "2026-07-30T12:00:01+00:00","metaData": { "username": "spez" }},{"type": "comment","isChild": true,"parentUsername": "spez","id": "os0o1vi","name": "t1_os0o1vi","author": "spez","subreddit": "reddit","subreddit_name_prefixed": "r/reddit","body": "Thanks everyone, wild ride.","body_html": "<div class=\"md\"><p>Thanks everyone, wild ride.</p></div>","score": 63,"ups": 63,"controversiality": 0,"permalink": "/r/reddit/comments/1u7hraf/21_years_of_reddit/os0o1vi/","permalinkUrl": "https://www.reddit.com/r/reddit/comments/1u7hraf/21_years_of_reddit/os0o1vi/","link_id": "t3_1u7hraf","link_title": "21 years of Reddit","link_permalink": "/r/reddit/comments/1u7hraf/21_years_of_reddit/","link_url": "https://www.reddit.com/r/reddit/comments/1u7hraf/21_years_of_reddit/","created_utc": 1781568000,"createdAt": "2026-06-16T00:00:00+00:00","metaData": { "username": "spez" },"scrapedAt": "2026-07-30T12:00:02+00:00"},{"type": "post","isChild": false,"parentUsername": null,"id": "1a2b3c4","name": "t3_1a2b3c4","subreddit": "webscraping","subreddit_name_prefixed": "r/webscraping","subreddit_id": "t5_2xhvh","subreddit_type": "public","title": "Best way to handle pagination in Python scrapers?","body": "Curious what everyone uses for cursor-based pagination...","selftext": "Curious what everyone uses for cursor-based pagination...","selftext_html": "<div class=\"md\"><p>Curious what everyone uses...</p></div>","author": "some_dev","author_fullname": "t2_abc123","author_flair_type": "text","author_flair_text": null,"link_flair_type": "text","link_flair_text": "Discussion","link_flair_text_color": "dark","domain": "self.webscraping","thumbnail": "self","permalink": "/r/webscraping/comments/1a2b3c4/best_way_to_handle_pagination_in_python_scrapers/","permalinkUrl": "https://www.reddit.com/r/webscraping/comments/1a2b3c4/best_way_to_handle_pagination_in_python_scrapers/","url": "https://www.reddit.com/r/webscraping/comments/1a2b3c4/best_way_to_handle_pagination_in_python_scrapers/","score": 42,"ups": 42,"upvote_ratio": 0.97,"num_comments": 18,"num_crossposts": 0,"total_awards_received": 0,"over_18": false,"is_video": false,"is_self": true,"is_original_content": false,"created_utc": 1781481600,"createdAt": "2026-06-15T00:00:00+00:00","scrapedAt": "2026-07-30T12:00:03+00:00","metaData": { "keyword": "python" },"keyword": "python"}]
💡 How can I use the data extracted with Reddit API Scraper : User Profiles?
- 🔬 Researchers and OSINT analysts: pull a named account's public post and comment history into a single dataset to study behavior or discourse patterns over time, using
subreddit,createdAt, andscoreto build a timeline. - 🤖 AI engineers and LLM developers: an agent issues a username (or a batch of them), receives structured
profile/post/commentJSON back, and passes it to a model as grounded context — no HTML parsing required. - 📢 Community and brand teams: monitor what specific known accounts (moderators, brand ambassadors, known critics) are posting and commenting across subreddits, filtering on
parentUsername. - 📊 Market and trend researchers: run the legacy keyword search across a subreddit set to track how a topic is discussed, using
subreddit,score, andnum_commentsto gauge traction.
🔁 How do you monitor a Reddit user's activity over time?
Monitoring means running the same username list on a schedule and diffing what comes back against the previous run, rather than re-reading a whole history each time. Because every post and comment row carries a stable id, createdAt, and score, a new run's rows can be compared against the last run's id set to isolate exactly what's new since the previous check, and score can be re-diffed on already-seen ids to catch posts or comments that gained (or lost) traction.
A practical workflow: schedule a run across a fixed list of usernames → store the previous run's dataset (or its id list) → on each new run, filter for ids not seen before → alert on new posts/comments, or on a meaningful score change on an existing one. Reddit API Scraper : User Profiles doesn't fetch a user's entire history each time by design — maxItemsPerUser bounds each run — so keep it large enough to cover the gap between scheduled runs.
Trigger repeated runs with Apify's built-in Schedules (Console → Schedules), which can start this Actor with a saved input on a cron-style interval; combine with a webhook on run completion to push each run's results onward automatically.
🔌 Integrate Reddit API Scraper : User Profiles and automate your workflow
Reddit API Scraper : User Profiles works with any language or tool that can send an HTTP request, via the Apify API and the official apify-client SDKs.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("reddit-api-scraper-user-profiles").call(run_input={"usernames": ["spez"],"includePosts": True,"includeComments": True,"maxItemsPerUser": 20,"sort": "new",})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["type"], row.get("id"), row.get("title") or row.get("body"))
Scheduled monitoring and delivery
Beyond ad-hoc runs, use Apify Schedules to re-run the same username list at a fixed interval, and Apify webhooks to fire on run completion (or failure) and push the fresh dataset to your own endpoint — there's no need to poll the Console manually for new results.
⚖️ Is it legal to scrape Reddit user data?
Yes, when it's public data collected responsibly: Reddit API Scraper : User Profiles only retrieves posts, comments, and account identifiers that are already visible to any visitor on a public profile page — it does not access private messages, private subreddits, or anything behind a login. In hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019), the court held that scraping publicly accessible profile data does not, by itself, violate the U.S. Computer Fraud and Abuse Act.
Because a Reddit username tied to post and comment history can constitute personal data, GDPR and CCPA framing applies if you store or process it in bulk — evaluate your legal basis for retention, especially if usernames could identify a natural person. Scraping for one-off research carries a different risk profile than scraping to train a model or build a permanent profile store. Consult your legal team for commercial use cases involving bulk data storage.
❓ Frequently asked questions
Can I use a Reddit profile URL instead of a bare username?
Yes. usernames accepts a bare username, a u/username form, or a full profile URL (e.g. https://www.reddit.com/user/spez) — all three are normalized to the same username internally, so you can mix formats in one list.
What does the sort parameter actually change?
It controls the order of each user's posts and comments. new and top are exact — genuine chronological order and genuine sort-by-score. hot and controversial are honest client-side approximations computed over a bounded recent pool (up to 500 items), not a full-history ranking — see the sort order notes above.
How does Reddit API Scraper : User Profiles handle anti-bot measures?
It sends plain HTTP requests with automatic retry and backoff on transient errors (timeouts and 5xx responses); a 4xx response is treated as a real rejection and is not retried. No Apify Proxy configuration is required or exposed by this Actor's input.
Does Reddit API Scraper : User Profiles return karma totals and account creation date?
No — not through its credential-free data path. Every profile row still contains totalKarma, linkKarma, commentKarma, awardeeKarma, awarderKarma, createdUtc, and createdAt, but they are explicitly null, alongside karmaDataAvailable: false so this is never mistaken for a zero value.
How many results does Reddit API Scraper : User Profiles return per query?
Per user, maxItemsPerUser (0–1000, default 20) caps posts and comments independently. For hot/top/controversial sorting, the Actor pools up to 5× the requested count (capped at 500 items) before re-sorting and trimming to your limit. For legacy keyword search, resultsLimitPerKeyword (1–1000, default 10) caps results per keyword, pooled and paginated in pages of up to 100 items at a time — a hard cap enforced by the underlying data source.
Is scraping Reddit usernames and activity subject to GDPR or CCPA?
It can be, if the usernames and associated activity could identify a natural person and you retain the data in bulk. Treat username-linked post/comment histories as personal data for retention and processing-basis purposes, per the legal section above.
How do I monitor a Reddit user's activity over time with this Actor?
Schedule repeated runs across the same usernames list, diff each run's id values against the previous run's, and alert on ids that weren't seen before (or a changed score on ones that were) — see the monitoring section above for the full workflow.
Does Reddit API Scraper : User Profiles work with Claude, ChatGPT, and AI agent frameworks?
There is no dedicated MCP server for this Actor. It is callable as a standard HTTP-backed Actor through the Apify API and the apify-client SDKs, which any agent framework capable of making an HTTP call or invoking a Python/JS tool can use to retrieve fresh, structured results before generating an answer.
Can I use Reddit API Scraper : User Profiles without managing proxies or Reddit credentials?
Yes. The Actor's input has no proxy configuration and no Reddit login, API key, or client ID/secret field — you only need an Apify account to run it.
Can I search keywords across specific subreddits instead of, or alongside, looking up usernames?
Yes — the legacy searchKeywords field (paired with subredditNames) runs alongside username lookups in the same job, not instead of them. It requires at least one subreddit; a Reddit-wide, subreddit-free keyword scan is not supported.
💬 Your feedback
Found a bug or a field that doesn't match what's documented here? Let us know via the Issues tab on this Actor's Apify Store page, or through Apify Console's support chat. Reports that include the username and run ID are fixed fastest.