Reddit User Karma & Post History Extractor
Pricing
from $0.49 / 1,000 results
Reddit User Karma & Post History Extractor
Look up Reddit accounts by username for archive-wide post/comment/total karma, archived post and comment counts, first/last activity dates, and their public post and comment history with 30+ filters. No API key, login or proxy setup required.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
Xyrelith Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Features
Share
Give this actor a list of Reddit usernames and it returns each account's public profile summary — post karma, comment karma, total karma, archived post/comment counts, and first/last activity dates — together with their post and comment history, filtered by subreddit, keyword, score, date window, post type, flair and 20+ other criteria. No Reddit API key, login or proxy setup is required.
Data source
Reddit's anonymous .json endpoints now return HTTP 403, and the www HTML is JavaScript-challenged from datacenter IPs. The actor therefore reads the public Reddit archive through Arctic Shift (arctic-shift.photon-reddit.com), which mirrors Reddit posts, comments and account aggregates over a no-key HTTP API.
- Primary: Arctic Shift
/api/posts/search,/api/comments/search,/api/users/search,/api/posts/ids,/api/comments/ids. - Fallback: Reddit's public Atom feed (
/user/<name>/.rss) and profile HTML where reachable. Feed IDs are enriched through the archive ID endpoints when available, which restores scores for recent items. - Reddit
.jsonis never called.
Freshness and fallback limits
- Arctic Shift archives an item shortly after it is posted. Its
scoreandnum_commentscan read 0 or 1 until the archive re-crawls the item (~36 hours). Thescore_captured_atfield on each post/comment shows when the archived score was captured. - Account karma and archived post/comment counts come from Arctic's
/api/users/searchaggregate. That aggregate is refreshed infrequently; each profile record carriespost_stats_updated_at,comment_stats_updated_atandkarma_updated_atso you can see how current the numbers are. - The Atom fallback returns at most the most recent ~100 items. The feed itself has no score or karma values; scores are restored only when the archive ID lookup succeeds. Reddit rate-limits or blocks the feed from some networks (429/503); the actor retries with backoff (honouring
Retry-After/X-RateLimit-Reset) before giving up. It is best effort, not a full-history replacement. - Profile HTML is often a JavaScript challenge or WAF block. When it is reachable, it fills account creation date, avatar, bio and account flags; otherwise those fields are omitted.
What this actor does
- Profile summary — archive-wide post/comment/total karma, archived post/comment counts, first/last post, comment and overall activity dates, plus account flags/avatar/bio when the profile page is reachable
- Post and comment history — newest first, oldest first, or top-scored within the fetched window
- Overview mode — posts and comments merged into one chronological feed
- Date windows and filters — subreddit, keyword, score range, post type, flair, domain, awards, content length, comment counts, upvote ratio, and exclusion toggles for stickied/removed/crossposted/spoiler/locked/archived posts
- Flexible username input — bare usernames,
u/name, profile URLs, or comma-separated names - Pagination — walks the archive by creation-time cursor until the requested caps or source exhaustion
- Legacy inputs — old saved tasks using
username,section,sortBy,maxPost,includeComments,minPostScore,excludeNsfwPosts,maxPostAgeDays,subredditorkeywordskeep working (mapped in code) - Empty fields are omitted from every record — no
null,"",[]or{}values
Output: profile record
One record per username (dataType: "user_profile") when "Include profile info record" is on:
username,user_id,profile_urlpost_karma,comment_karma,total_karmaarchived_posts,archived_comments— archive-wide counts, not just the rows in this datasetfirst_post_at,last_post_at,first_comment_at,last_comment_at,first_activity_at,last_activity_at(+ matching*_utcepochs)post_stats_updated_at,comment_stats_updated_at,karma_updated_atcreated_at/created_utc— account creation, when the profile page exposes itis_gold(Reddit Premium),is_mod,is_employee,has_verified_email,verified,accept_followers,hide_from_robots— when exposed by the profile pageicon_img(avatar),snoovatar_img,snoovatar_size,user_subreddit(bio, banner, display name, subscribers, NSFW flag, type, URL)crawled_at,source
Output: post record
One record per post (dataType: "post") returned by the posts or overview sections:
subreddit,subreddit_prefixed,subreddit_id,subreddit_subscribers,subreddit_typepost_id,post_name,titleauthor,author_meta—{username, id, flair, flair_background_color, flair_text_color, flair_css_class, flair_richtext, flair_template_id, flair_type, is_premium, is_blocked, has_patreon_flair}content,content_html— self-post bodycontent_url,url,permalink,url_overridden_by_dest,domainpost_hint,is_self,post_type,media_typescore,ups,downs,upvote_ratio,num_comments,num_crossposts,num_duplicateslink_flair,link_flair_background_color,link_flair_text_color,link_flair_css_class,link_flair_template_id,link_flair_type,link_flair_richtextthumbnail_url,thumbnail_width,thumbnail_heightcreated_utc,created_at,edited,edited_atis_stickied,is_locked,is_archived,is_pinned,is_nsfw,is_spoiler,is_original_content,is_crosspost,crosspost_parent_idis_crosspostable,is_meta,is_reddit_media_domain,is_robot_indexable,is_created_from_ads_uiallow_live_comments,contest_mode,hide_score,content_categories,media_only,quarantine,suggested_sort,no_follow,send_repliesgilded,total_awards_received,awards—[{name, count, coin_price, icon_url}]removed_by_category,distinguished,hiddenhas_media,images,gallery_images,gallery_countvideo_url,video_duration_seconds,video_width,video_height,video_has_audio,video_bitrate_kbpspoll_data— poll options, vote counts and end timeembed_provider,embed_type,embed_title,embed_author_name,embed_thumbnail_url,embed_html,embed_width,embed_heightsearch_term— the keyword filter that matched, when setscore_captured_at— when the archived score was capturedcrawled_at,source—arctic_shift,arctic_ids,rssorusername_only
Output: comment record
One record per comment (dataType: "comment") returned by the comments or overview sections:
post_id,post_url,post_title,post_author,link_idcomment_id,comment_nameauthor,author_metabody,body_htmlscore,ups,downs,score_hidden,controversialitysubreddit,subreddit_prefixed,subreddit_id,subreddit_typecreated_utc,created_at,edited,edited_atdepth,parent_id,parent_kind,is_op,comment_typeis_stickied,is_locked,distinguished,is_nsfw,collapsed,collapsed_reason,collapsed_reason_code,collapsed_because_crowd_controlcan_gild,no_follow,send_replies,unrepliable_reasongilded,total_awards_received,awardsremoved_by_category,permalinksearch_term— the keyword filter that matched, when setscore_captured_atcrawled_at,source
Input
| Field | Type | Default | Description |
|---|---|---|---|
usernames | array | – | Usernames to scrape — bare (spez), u/-prefixed, profile URLs, or comma-separated names |
includeProfileInfo | boolean | true | Emit the profile summary record |
sections | array | ["posts"] | overview (posts + comments), posts, comments |
maxPosts | integer | 100 | Max matching posts per user (1–5,000) |
maxComments | integer | 100 | Max matching comments per user (1–5,000) |
sort | select | newest | newest, oldest, or top (score-ranked within the fetched items) |
timeFilter | select | all | Created within the past hour/day/week/month/year |
includeNSFW | boolean | false | Include 18+ posts and comments on 18+ posts |
onlyWithFlair | boolean | false | Keep only posts that have a link flair |
subreddits | array | – | Restrict to posts/comments made in these subreddits |
keyword | string | – | Keep only posts/comments whose title, self-text or body contains this text |
titleContains | string | – | Keep only posts whose title contains this text |
contentContains | string | – | Keep only self posts whose body contains this text |
flairContains | string | – | Keep only posts whose link flair contains this text |
authorFlairContains | string | – | Keep only posts whose author flair contains this text |
domain | string | – | Keep only posts whose link domain contains this text, e.g. youtube.com |
distinguished | select | – | Only moderator, admin, special, or none (regular) posts |
postType | select | – | Only self, link, image, video, gallery or poll posts |
minScore / maxScore | integer | – | Keep only posts/comments with a score in this range |
minPostComments / maxPostComments | integer | – | Keep only posts whose own comment count is in this range |
minUpvoteRatio | number | – | Keep only posts with an upvote ratio at or above this value (0–1) |
minAwards | integer | – | Keep only posts with at least this many total awards |
minContentLength / maxContentLength | integer | – | Keep only self posts whose body length (characters) is in this range |
onlyOriginalContent | boolean | false | Keep only posts tagged as original content |
excludeStickied | boolean | false | Drop stickied/pinned posts |
excludeRemoved | boolean | false | Drop removed/deleted posts |
excludeCrossposts | boolean | false | Drop crossposted posts |
excludeSpoilers | boolean | false | Drop spoiler-tagged posts |
excludeLocked | boolean | false | Drop posts with comments locked by a moderator |
excludeArchived | boolean | false | Drop archived posts |
excludeDeletedAuthor | boolean | false | Drop posts whose author account was deleted |
excludeKeywords | array | – | Drop posts whose title/body/flair contains any of these terms |
postedAfter / postedBefore | date | – | Keep only items created within this date range (UTC) |
Example: profile summary and recent overview
{"usernames": ["spez"],"includeProfileInfo": true,"sections": ["overview"],"maxPosts": 50,"maxComments": 50}
Example: recent posts in selected subreddits
{"usernames": ["u/example_user"],"sections": ["posts"],"sort": "newest","maxPosts": 200,"subreddits": ["pics", "AskReddit"],"keyword": "photo","excludeStickied": true}
Example: high-scoring comments from the past year
{"usernames": ["spez"],"includeProfileInfo": false,"sections": ["comments"],"timeFilter": "year","maxComments": 500,"minScore": 50}
Use cases
- User research — analyze an account's posting patterns, engagement and karma
- Account vetting — check activity dates, karma and history before trusting a recommendation or partnership
- Content discovery — pull a creator's or influencer's posts by subreddit, keyword or score
- Moderation research — audit a user's post history across specific communities
- Behavioral and social research — bulk-export public user history for academic or market research
- Profile monitoring — track a user's public activity over time on a schedule
FAQ
Do I need a Reddit API key or account login? No — the actor reads the public Reddit archive and public profile surfaces without credentials.
Do I need to configure a proxy? No — there is no proxy setting to configure.
Why do some scores read 0 or 1?
Arctic Shift archives an item at posting time and updates score/comment counts on a later crawl (~36 hours). Check score_captured_at; the item's score becomes accurate after that re-crawl.
Why are karma totals different from the live profile?
Arctic's account aggregate is refreshed infrequently and may lag the live profile. karma_updated_at shows the aggregate date. The actor never invents a fresher number.
What happens when the archive is rate-limited? The actor retries with backoff (and a smaller page size) and, if the search still fails, falls back to the public Atom feed (most recent ~100 items; scores only where the archive ID lookup succeeds). The run status message says which source was used.
Does it include private activity like upvotes or saved posts? No — only public posts and comments are available. Voting history, saved items and hidden posts are private to the account owner.
What happens for suspended or nonexistent usernames? The run completes and reports that no records were found for that username.
Is history capped?
The actor pages through the archive by creation-time cursor until maxPosts/maxComments or source exhaustion. Reddit's Atom fallback is capped at the most recent ~100 items by Reddit itself.
Can I filter to a date range?
Yes — use postedAfter / postedBefore (UTC dates) or timeFilter. The window is passed to the archive, so pagination stops at the boundary.
Is this actor affiliated with Reddit? No — this is an independent, third-party actor reading public Reddit archive data. It is not built, endorsed or maintained by Reddit, Inc.