Reddit User Scraper: Profiles, Karma and Post History
Pricing
from $1.00 / 1,000 profile, post or comments
Reddit User Scraper: Profiles, Karma and Post History
Scrape Reddit user profiles and history: karma, account age, mod and verified flags, avatar and about text, plus each user's posts and comments with subreddit, score and links. Takes usernames or profile links. No login. Monitor mode delivers only new posts and comments.
Pricing
from $1.00 / 1,000 profile, post or comments
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
From The Mine Works, makers of Reddit Scraper and Threads Scraper, with over 140,000 runs across 170+ public actors.
Updated 10 Oct 2026: first release. Profile rows with karma, account age and flags, plus each user's posts and comments as rows, newest first, with a monitor mode for new activity. Bookmark this Actor on its Store page so it is one click away next time.
Why choose this actor?
- The profile and the history in one run. Karma (post, comment, total), account age, moderator, employee, Premium and verified flags, avatar and about text, then the user's posts and comments with subreddit, score and links. In our test run, 5 users gave 5 profiles, 189 posts and 1,210 comments in 41 seconds.
- Comments with their context. Each comment row carries the title, link and author of the post it was written on, so you can read what someone said without opening Reddit.
- Pay per row, nothing for missing users. Users that do not exist, deleted and suspended accounts get a free info row saying so. Summary rows and items you already have in monitor mode are never charged. No Reddit account, API key or cookies.
Part of The Mine Works Social media and video family: Threads Scraper, Reddit Scraper, Threads Search Scraper, Instagram Profile Scraper, Instagram Followers & Following, Reddit Search Scraper.
Try it in one minute
Paste this into the input (JSON view) and press Start. It returns the profiles of u/spez and u/GallowBoob with their 25 newest posts and comments each, 52 rows. It took 6 seconds in one test run and 9 in another:
{"usernames": ["spez", "GallowBoob"],"maxItemsPerUser": 25}
A user can be written as spez, u/spez or https://www.reddit.com/user/spez/. The same user given twice (in any letter case) is read once.
Apify's free plan includes $5 of credit every month, which covers about 2,400 rows at this actor's price.
Copy to your AI assistant
themineworks/reddit-user-scraper on Apify. Scrapes public Reddit user profiles (karma, account age, moderator, employee, Premium and verified flags, avatar, about text) and each user's post and comment history, newest first, one row each, with no Reddit login. Call ApifyClient("TOKEN").actor("themineworks/reddit-user-scraper").call(run_input={"usernames": ["spez", "u/GallowBoob"], "maxItemsPerUser": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: usernames (list of names, u/name or profile links; up to 500). Optional: includePosts (default true), includeComments (default true), maxItemsPerUser (default 50, 1 to 1000; posts and comments together, per user; the profile row comes on top), monitorMode (default false; delivers only posts and comments not delivered by an earlier run in the same Apify account; the profile row is delivered every run), clientId (own Reddit installed app client id). Every data row has record_type ("profile", "post" or "comment") and username. Profile rows: user_id, link_karma, comment_karma, total_karma, created_utc, created_iso, account_age_days, is_mod, is_employee, is_gold, verified, has_verified_email, icon_img, display_name, profile_description. Post rows: id, subreddit, title, selftext, url, permalink, score, num_comments, created_iso. Comment rows: comment_id, body, subreddit, post_title, post_url, score, parent_id, permalink, created_iso. A missing or suspended user gets a row with _type "info" (info_type "user_not_found" or "user_suspended"); each run also writes a _type "summary" row; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~reddit-user-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- 25 profile fields. Username, user id, profile link, post karma, comment karma, total karma, award karma, account creation date and age in days, moderator, employee, Premium, verified and verified email flags, whether it accepts followers, avatar, Snoo avatar, banner, display name, about text and the profile's NSFW flag.
- Post rows with the same fields as our Reddit Scraper: title, text, link, subreddit, score, upvote ratio, comment count, flair, media hint, time and flags.
- Comment rows with the text, score, subreddit, the post's title, link and author, the parent reference, edit status and whether a moderator or admin mark is on it.
- Posts, comments or both. Turn
includePostsorincludeCommentsoff to get one kind only, or both off for profiles alone (one request per user). - Monitor mode. Later runs deliver only posts and comments that are new since the last run, and stop reading a user's history at the first item already delivered. The profile row is refreshed on every run, so karma can be tracked over time.
- Missing users explained. A user that does not exist, a deleted account or a suspended account gets an info row with the reason and is not charged; a profile that hides its history is named in the summary.
How to use it
Basic: profiles only
{"usernames": ["spez", "kn0thing", "GallowBoob"],"includePosts": false,"includeComments": false}
One row per user with karma, account age and flags. Useful for checking a list of accounts quickly.
Influencer and partner research: what does this person post about?
{"usernames": ["GallowBoob", "Shitty_Watercolour"],"includeComments": false,"maxItemsPerUser": 300}
Count rows by subreddit to see where a user is active, and sort by score to find what their audience liked most.
Brand monitoring: a founder's or spokesperson's new activity
{"usernames": ["spez"],"maxItemsPerUser": 100,"monitorMode": true}
Save it as a task and add a daily schedule. Each run delivers the profile (with today's karma) and only the posts and comments written since the last run. In our test, a second run right after the first delivered the 2 profile rows and nothing else.
Competitor research: how a rival's team talks to users
List the Reddit accounts a competitor's staff use. Comment rows with distinguished set to moderator or admin are official replies, and post_title and post_url show the thread each reply was on.
Moderation and trust checks: is this account real?
{"usernames": ["u/some_new_account", "https://www.reddit.com/user/another_account/"],"maxItemsPerUser": 50}
account_age_days, link_karma, comment_karma, has_verified_email and the spread of subreddit in the history are the usual signals that a new account is a throwaway or a spam account. Missing and suspended accounts are flagged in an info row.
AI datasets: a user's writing in one file
{"usernames": ["Poem_for_your_sprog"],"includePosts": false,"maxItemsPerUser": 1000}
Comment rows keep Reddit's markdown in body and the post title for context, ready for style or topic analysis.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
usernames | array of strings | required | Usernames, u/name or profile links. Up to 500 per run. |
includePosts | boolean | true | Adds the user's submitted posts as rows (record_type: "post"). |
includeComments | boolean | true | Adds the user's comments as rows (record_type: "comment"). |
maxItemsPerUser | integer | 50 | Most posts and comments together per user, newest first, 1 to 1,000. The profile row comes on top. |
monitorMode | boolean | false | Delivers and charges only posts and comments not delivered to you before; the profile row comes every run. |
clientId | string | empty | Optional own Reddit "installed app" client id, so your requests do not share the default client id's rate limit. |
What data do you get?
Every data row has record_type (profile, post or comment) and username. For each user the profile row comes first, then the history, newest first.
Profile (record_type: "profile")
| Field | What it is |
|---|---|
username, user_id, user_fullname, profile_url | Who it is: name, Reddit id (1w72), id with t2_ (as in author_fullname elsewhere), link |
link_karma, comment_karma, total_karma | Post karma, comment karma, the total Reddit shows |
awardee_karma, awarder_karma | Karma from awards received and given |
created_utc, created_iso, account_age_days | When the account was made, and its age in days on the day of the run |
is_mod, is_employee, is_gold, verified, has_verified_email, accept_followers | Account flags |
icon_img, snoovatar_img, banner_img | Avatar, Snoo avatar and banner links, when set |
display_name, profile_description, profile_over_18, profile_subreddit | What the profile page shows |
Post (record_type: "post"): id, name, subreddit, title, selftext, url, permalink, domain, is_self, flair, score, upvote_ratio, num_comments, awards_count, created_utc, created_iso, is_pinned, is_locked, over_18, spoiler, is_video, post_hint, thumbnail, subreddit_subscribers, edited, distinguished, author.
Comment (record_type: "comment"): comment_id, comment_fullname, body, subreddit, post_id, post_title, post_url, post_author, post_num_comments, score, controversiality, created_utc, created_iso, parent_id, parent_comment_id, is_top_level, is_submitter (the user also wrote the post), permalink, edited, edited_utc, distinguished, stickied, author.
Info rows (_type: "info", never charged): info_type user_not_found (no such user, or the account was deleted) or user_suspended, with username and message. Summary row (_type: "summary", never charged): users_requested, users_found, users_not_found, users_suspended, profiles_delivered, posts_delivered, comments_delivered, charged_for, reddit_requests, ended_on_deadline, stopped_by_max_cost, shortfall_reason, and per_user with each user's counts and status. Also saved as the run's OUTPUT record.
Stable fields for automations
Present in every row of their kind in our test runs (2 and 5 user runs, 1,456 rows); the names will not change:
| Field | Rows | What it is |
|---|---|---|
record_type | all | profile, post or comment |
username | all | The user the row belongs to |
created_utc, created_iso | all | Account creation, or posting time |
user_id | profile | Reddit's user id |
link_karma, comment_karma, total_karma | profile | Karma |
account_age_days | profile | Age in days |
is_mod, is_employee, verified, has_verified_email | profile | Flags |
icon_img | profile | Avatar link |
id, title, subreddit, permalink, score, num_comments | post | The post |
comment_id, body, subreddit, post_id, post_title, post_url, permalink, score, parent_id | comment | The comment and its post |
Optional, present only when Reddit has a value: display_name, profile_description and banner_img (4 of 5 profiles in our test), snoovatar_img (1 of 5), selftext on link posts, flair, parent_comment_id (absent on top level comments), distinguished, edited_utc.
Output examples
From the "Try it" and scale tests (10 Oct 2026). A profile:
{"record_type": "profile","username": "spez","user_id": "1w72","user_fullname": "t2_1w72","profile_url": "https://www.reddit.com/user/spez/","link_karma": 184547,"comment_karma": 756500,"total_karma": 941047,"created_utc": 1118030400,"created_iso": "2005-06-06T04:00:00.000Z","account_age_days": 7796,"is_mod": true,"is_employee": true,"is_gold": true,"verified": true,"has_verified_email": true,"accept_followers": true,"icon_img": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png?width=256&height=256&crop=256:256,smart&s=aa819b0964f6e3019e769d1cc8ede7318c3869a3","display_name": "spez","profile_description": "Reddit CEO","profile_subreddit": "u/spez"}
A post, trimmed:
{"record_type": "post","username": "GallowBoob","id": "1x1pjzw","subreddit": "aww","title": "She’s 2 years old! 🎉","url": "https://i.redd.it/tbq8zdb1vguh1.jpeg","permalink": "https://www.reddit.com/r/aww/comments/1x1pjzw/shes_2_years_old/","is_self": false,"domain": "i.redd.it","post_hint": "image","score": 179,"upvote_ratio": 0.97,"num_comments": 13,"created_iso": "2026-10-09T16:14:29.000Z","subreddit_subscribers": 37890373}
A comment, trimmed:
{"record_type": "comment","username": "spez","comment_id": "p1wosm9","body": "That was the thinking. Otherwise it would be easier to just replicate the UI. ","subreddit": "u_spez","post_id": "1vgbkge","post_title": "Modernizing Reddit’s infrastructure with you","post_url": "https://www.reddit.com/user/spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/","post_num_comments": 477,"score": 14,"created_iso": "2026-08-05T18:31:50.000Z","parent_id": "t1_p1wd2fi","parent_comment_id": "p1wd2fi","is_top_level": false,"is_submitter": true,"permalink": "https://www.reddit.com/user/spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/p1wosm9/","edited": false,"distinguished": "admin"}
The info row for a user that does not exist (not charged):
{ "_type": "info", "info_type": "user_not_found", "username": "zzqqnotarealuser17", "message": "u/zzqqnotarealuser17 does not exist on Reddit, or the account was deleted. Nothing was charged for it." }
Pricing
Pay per event: you pay for the rows you receive (profiles, posts and comments alike), plus a flat $0.005 per run, whatever memory you choose.
| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
result-scraped | Once per profile, post or comment row stored in your dataset | $2.00 per 1,000 | $1.50 per 1,000 | $1.25 per 1,000 | $1.00 per 1,000 |
run-start | Once per run, after the actor has signed in to Reddit | $0.005 | $0.005 | $0.005 | $0.005 |
The price of one row is the price per 1,000 divided by 1,000. A user with maxItemsPerUser: 50 costs at most 51 rows.
Never charged:
- users that do not exist, deleted and suspended accounts (each gets an info row), and names that are not usernames (an error row);
- posts and comments skipped by monitor mode because an earlier run delivered them;
- the summary, info and error rows;
- a run with no valid username, or one that cannot sign in to Reddit: it stops before the start fee;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.
Run it on a schedule
- Open the actor in Apify Console, set your input and click Save as a new task.
- In the task, open Schedules, click Add schedule and pick how often (every day, every Monday and so on).
- Turn on
monitorModein the task's input so each run delivers the profiles plus only the posts and comments written since the last run. - Optional: connect Google Sheets so each run adds a dated profile row per user, which gives you a karma history.
Monitor mode keeps the ids of up to 50,000 delivered posts and comments in a storage named monitor-reddit-user-scraper in your own Apify account, shared by all your runs of this actor. If that storage cannot be opened, the run says so in its log, delivers everything, and sets monitor_degraded: true in the summary row.
FAQ
What does this actor read?
The public profile of each user you list (what reddit.com/user/
How many posts and comments can I get per user?
Up to 1,000 per user (maxItemsPerUser), which is about where Reddit's own profile listings stop. Some accounts have fewer: in our 300 per user test, u/kn0thing's listing ended at 199.
Why does a user show a profile but no posts or comments?
The account has none, or it hides its history from its profile (a Reddit privacy setting). The profile row is still delivered and the summary row names the users with no history. u/AutoModerator is an example.
What happens with deleted, suspended or misspelled users?
A user that does not exist or a deleted account gets an info row user_not_found; a suspended account gets user_suspended. Neither is charged and the run goes on with the next user. A name that cannot be a Reddit username (spaces, more than 20 characters) gets an error row before any request is made.
Is the karma the same as on the profile page?
Yes: link_karma, comment_karma and total_karma are the values Reddit returns for the profile at the moment of the run. For all 5 users in our tests, total_karma was exactly post karma plus comment karma.
How fresh is the data?
Live. Every run reads Reddit at that moment; karma, scores and comment counts are the values at scraped_at, and account_age_days is counted on the day of the run.
How long does a run take?
6 to 9 seconds for the 2 user "Try it" input (52 rows) and 41 seconds for 5 users with 300 history rows each (1,404 rows) in our tests. Each user needs one request for the profile and one per 100 history rows. Reddit allows about 100 requests per 10 minutes on the shared client id; past that the actor waits for Reddit's window to reset if the run's time limit allows, and otherwise stops cleanly with what it has.
Do I need a Reddit account, API key, cookies or a proxy?
No. The actor uses Reddit's anonymous app sign in, the same kind read only Reddit apps use. You can add your own free Reddit client id in clientId (an "installed app" from reddit.com/prefs/apps) so your requests do not share the default client id's limit.
Does it return a user's followers, upvotes or private messages?
No. Reddit does not show followers, votes, saved items or messages to visitors, and the actor reads only what is public.
How does monitor mode work?
It remembers the ids of posts and comments it delivered to you. The history is read newest first, so a later run stops at the first item already delivered and charges only what is new. The profile row is delivered on every run (one row per user) so you can track karma; turn monitor mode off to read a full history again.
What happens when a run reaches its time limit?
The actor stops starting requests about 15 seconds before the run's timeout (600 seconds unless you change it), keeps every row already delivered, and ends SUCCEEDED with ended_on_deadline: true, a shortfall_reason and the users not started in users_not_started.
Which Reddit actor should I use?
This one for people: profiles, karma and what they post and comment. Reddit Comments Scraper for every comment on chosen posts. Reddit Subreddit Scraper for the posts of whole subreddits. Reddit Search Scraper to find posts by keyword. Reddit Scraper for posts from subreddits, search, a user or links in one actor.
Which formats can I download?
JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. Rows are flat. The dataset has three ready views: All rows, Profiles, and Posts and comments.
Can I use it from Claude, ChatGPT or Cursor (MCP)?
Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/reddit-user-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http reddit-user-scraper "https://mcp.apify.com/?tools=themineworks/reddit-user-scraper"
Is it legal to scrape Reddit user profiles?
The actor reads only public profile data and public posts and comments that anyone can see without logging in. That data is still about people: you are responsible for how you use it, including Reddit's terms and data protection law such as GDPR and CCPA, especially before profiling or contacting anyone. This is general information, not legal advice.
Integrations
- Google Sheets: send each run's rows to a sheet with Apify's Google Sheets integration; filter on
record_typefor separate tabs. - Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "new comments by our CEO's account, to Slack".
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.
More from The Mine Works
Social media and video
- Threads Scraper
- Reddit Scraper
- Threads Search Scraper
- Instagram Profile Scraper
- Instagram Followers & Following
- Reddit Search Scraper
- Twitter / X Scraper
- YouTube Transcript
- Xiaohongshu (RED) Scraper
- Telegram Channel Scraper
- Telegram Channel Finder
- Pinterest Profile Scraper
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Jobs and hiring
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a user whose profile or history should come back and does not? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.
List Reddit usernames and get each profile with karma, account age and flags, then their posts and comments as rows, newest first, no login.

