Reddit Scraper: User Profiles & Subreddit Activity avatar

Reddit Scraper: User Profiles & Subreddit Activity

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Reddit Scraper: User Profiles & Subreddit Activity

Reddit Scraper: User Profiles & Subreddit Activity

Reddit Scraper for User Profiles & Subreddit Activity extracts public Reddit profiles, posts, comments, karma, timestamps, and subreddit participation. Analyze user activity, interests, communities, and engagement for audience research, market analysis, and social insights.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Share

Reddit User Scraper — Profiles, Post History and Subreddit Activity

Get any public Reddit user's karma profile, full post and comment archive, and a ranked breakdown of the subreddits they're actually active in — as structured JSON. Feed in usernames like spez or profile URLs and pull postKarma, commentKarma, numPosts, every submitted post and comment with score, subreddit and createdAt, plus a subreddit affinity table ranked by activityCount. Built for growth marketers, community managers, and researchers who need to understand a Reddit user's real behavior, not just their bio.

🧭 What is Reddit Scraper: User Profiles & Subreddit Activity?

Reddit Scraper: User Profiles & Subreddit Activity is an Apify Actor that takes one or more Reddit usernames (or profile URLs) and returns a real karma/profile summary, a fresh post-and-comment history archive, and a subreddit affinity ranking — no Reddit account, login, or API key required. It also carries every mode from the base Reddit Scraper (search, subreddit listing, single post + comment tree, subreddit info) unchanged, so it doubles as a general-purpose Reddit data source.

Key features:

  • 👤 Target by username or profile URL — paste a bare username or a full reddit.com/user/... link; both resolve the same way.
  • 🪪 Real karma/profile aggregate — post karma, comment karma, total karma, lifetime post/comment counts.
  • 📝💬 Full post and comment history — freshly fetched every run, not cached.
  • 📅 A working activity-date filter — restrict a user's history to an absolute date or a relative window ("2 weeks", "3 months").
  • 📊 Subreddit affinity breakdown — which communities a user is actually active in, ranked by real activity count and share of total.
  • 🗂️ Legacy Start-URL modes preserved — post + comment tree, subreddit post listing, keyword search, and subreddit info still work from raw Reddit URLs.
  • 🌐 Automatic proxy escalation — retries through Apify datacenter, then residential proxy, on a blocked or failed request.

📦 What data can I extract with Reddit Scraper: User Profiles & Subreddit Activity?

Every run returns rows tagged by type, so a single dataset can carry profile summaries, posts, comments, and affinity rows side by side.

FieldExample valueUse case
type"user_post"Discriminates the row kind: user_profile, user_post, user_comment, user_subreddit_affinity, search, subreddit_post, post, comment, subreddit_info, top_subreddit
isChildtruetrue for rows nested under a parent (a user's posts/comments/affinity, or a post's comments)
username"spez"Which target user this row belongs to
postKarma184213Karma from submitted posts
commentKarma521904Karma from comments
totalKarma706117Combined karma total
numPosts1204Lifetime submitted-post count reported by the archive
numComments38210Lifetime comment count reported by the archive
earliestPostAt"2015-06-01T12:00:00.000Z"Earliest tracked post timestamp
lastPostAt"2026-08-10T09:15:00.000Z"Most recent tracked post timestamp
userSubmittedCount20Posts actually fetched this run for the user
userCommentsCount20Comments actually fetched this run for the user
id"1abc23d"Reddit post or comment ID
title"State of the subreddit"Post title
subreddit"announcements"Subreddit the post/comment belongs to
score4521Post or comment score (upvotes minus downvotes)
upvoteRatio0.94Post upvote ratio, if available
numComments312Comment count on a post
createdUtc1755000000Creation time, Unix epoch seconds
createdAt"2026-08-12T13:20:00.000Z"Creation time, ISO 8601
body"Thanks for the update!"Comment text
permalink"https://www.reddit.com/r/announcements/comments/1abc23d/..."Link back to the live post or comment
subscribers4200000Subreddit subscriber count
activityCount47How many tracked posts+comments a user has in one subreddit
activityShare18.5That subreddit's share (%) of the user's total tracked activity
affinityRank1Rank of the subreddit in the user's affinity list, highest activity first
scrapedAt"2026-08-15T09:02:11.123Z"When this row was pushed, added to every row

📝 Post and comment history

Each user_post row carries the full submission record — title, subreddit, score, selftext, linkFlairText, over18, spoiler, stickied, postHint, thumbnail, domain, numCrossposts, gilded, isVideo, isOriginalContent, and subredditSubscribers. Each user_comment row carries body, parentId, linkId, distinguished, and isSubmitter. This is what turns a karma number into an auditable activity trail: pull every post a user made in a competitor's subreddit, or every comment thread they've contributed to in the last quarter.

📊 Subreddit affinity (targeting data)

user_subreddit_affinity rows are the fields you filter and segment on for this Actor: subreddit, activityCount, activityShare, and affinityRank. Set minAffinityActivityCount to drop one-off drive-by comments and keep only a user's real recurring communities, and maxAffinitySubreddits to cap how many subreddits come back per user (1–100).

⚖️ How does Reddit Scraper: User Profiles & Subreddit Activity differ from the official Reddit API?

Reddit's own Data API requires an OAuth2 app registration, a compliant custom User-Agent, and — as of Reddit's Data API terms and Responsible Builder Policy in effect at the time of writing (checked 2026-08-15) — explicit approval before pulling data, with commercial use requiring a separate written agreement. This Actor needs none of that: give it usernames and it returns structured rows immediately, with no Reddit developer account, no app review, and no OAuth token to refresh.

FeatureReddit Data API (official)Reddit User Scraper (this Actor)
SetupOAuth2 app + registered User-Agent, subject to Reddit's approval processApify account only — set input, run
Commercial useRequires separate written approval/agreement per Reddit's current termsGoverned by Apify's standard usage terms
User-scoped history date filterNot exposed as a first-class parameteractivityDateFrom — absolute date or relative window
Subreddit affinity rankingNot provided as a built-in endpointincludeSubredditAffinity — ranked, with activity share
Output shapeRaw Reddit "Thing" JSON (kind/data wrappers) per endpointOne flat, typed row per record, same shape across runs
Legacy search/subreddit/post modesSeparate endpoints, separate auth scopesBundled in the same Actor run

Why does Reddit's own API make bulk user research hard?

Reddit's Data API is built around per-endpoint OAuth calls with rate limits enforced per app, and — per its currently published terms (checked 2026-08-15) — commercial or high-volume use requires going through Reddit's own approval and pricing process rather than self-serve signup. For a one-off research question ("what has this user posted, and where"), that means standing up an OAuth app, handling token refresh, and potentially waiting on approval before you can pull a single archive. This Actor sidesteps that entirely by reading from public archive endpoints that don't require a Reddit-issued credential, at the cost of the profile karma aggregate being a periodic snapshot rather than a live read (disclosed on every user_profile row via profileCoverageNote).

Use the official API when you're building a Reddit-native application that needs live write access (posting, voting, moderation) or a long-term OAuth integration. Use this Actor when you need a fast, structured pull of a user's public history and community footprint without standing up API infrastructure.

🎯 How to use data extracted from Reddit?

Community and social listening teams

Pull a target subreddit's active users, then run each username through includePostHistory and includeCommentHistory to see where else they post. Set activityDateFrom to "1 month" to scope the pull to recent activity only, and read subreddit, score, and body off each row to spot recurring topics or sentiment shifts around your brand or product.

Agencies running repeat user research

For agencies auditing creator or influencer Reddit presence across multiple client engagements, batch usernames through usernames with includeSubredditAffinity on, and export subreddit, activityCount, and activityShare per user to benchmark which communities each account is actually rooted in — repeatable per client, same output shape every run.

Market and community research

Use includeSubredditAffinity across a sample of users active in a niche subreddit to map which other communities overlap with it — a proxy for where else that audience spends time. Combine with fetchTopSubreddits (legacy mode) to compare a niche community's size against the platform's largest subreddits by subscribers.

AI agents and automated pipelines

Because every row is flat, typed JSON keyed by type, an agent can call this Actor with a username list, filter on type == "user_subreddit_affinity", and feed the result straight into a RAG context or a lead-scoring pipeline — no HTML parsing or Reddit "Thing" unwrapping required.

⬇️ Input sample

ParameterRequiredTypeDescriptionExample value
usernamesNoarrayOne or more Reddit usernames (e.g. "spez") or full profile URLs. For each, the Actor fetches profile, full post + comment history, and subreddit affinity. minItems: 0["spez", "https://www.reddit.com/user/spez/"]
includeUserProfileNobooleanFetch each username's karma aggregate (post/comment/total karma, lifetime counts). An aggregate snapshot that updates infrequently, not a live profile-page read; may be null for inactive accounts.true
includePostHistoryNobooleanFetch each username's submitted-posts archive, freshly fetched every run.true
includeCommentHistoryNobooleanFetch each username's comment archive, freshly fetched every run.true
activityDateFromNostringOnly include posts/comments on or after this date. Absolute (2026-01-15) or relative ("3 days", "2 weeks", "1 month"). Leave empty for full history."2 weeks"
maxHistoryItemsPerUserNointegerPer username, max submitted posts AND max comments to fetch (counted separately). minimum: 120
historyPagesPerUserNointegerPer username, max pages to fetch for posts and comments (each page up to 100 items). minimum: 12
includeSubredditAffinityNoboolean, default trueAdd one row per username per subreddit they're active in, ranked by activity count, with each subreddit's share of tracked activity.true
maxAffinitySubredditsNointeger, default 15; minimum: 1, maximum: 100Max subreddits to return per username in the affinity breakdown, ranked highest-activity first.15
minAffinityActivityCountNointeger, default 1; minimum: 0Only include a subreddit if the user's tracked activity count there is at least this number.1
startUrlsNoarrayOne or more Reddit URLs for the legacy modes: post URLs (containing /comments/), subreddit URLs, or user profile URLs. minItems: 0["https://www.reddit.com/r/python/"]
skipCommentsNoboolean, default falseIf enabled, don't fetch comments for post URLs in Start URLs — post-level data only.false
skipUserPostsNoboolean, default falseIf enabled, ignore user profile URLs in the legacy Start URLs field. Doesn't affect usernames.false
skipCommunityNoboolean, default falseIf enabled, don't fetch subreddit/community metadata for subreddits found in legacy Start URLs.false
searchTermsNoarrayOne or more search phrases for the legacy search mode. Each term queried separately.["climate policy"]
searchCommunityNostringOptional subreddit name (no r/ prefix) to restrict search to. Only affects results when a Search Term is set."python"
ignoreStartUrlsNoboolean, default falseWhen enabled, skip legacy Start URLs entirely; only search runs.false
searchForPostsNoboolean, default trueInclude posts in search results — the only search scope this Actor supports.true
sortSearchNostring, default "new"; enum relevance, new, hot, top, commentsHow search results are ordered. relevance/hot/top all rank by score (no live "trending" signal from a no-login source); new = newest first; comments = most comments first."new"
timeFilterNostring, default "all"; enum hour, day, week, month, year, allRestricts search results to a relative time window."month"
filterByDateNostringOnly include posts on/after this date, for legacy search and subreddit listing only. Absolute or relative."2026-06-01"
enableSearchNoboolean, default trueRun the legacy search mode if Search Terms are provided.true
enableSubredditNoboolean, default trueScrape subreddit URLs in legacy Start URLs for their post listing.true
sortSubredditNostring, default "new"; enum hot, new, top, rising, controversialOrder for posts from each legacy subreddit URL. new/top are real, direct orderings; hot/rising are a disclosed approximation (score decayed by age); controversial is upvote ratio closest to 50/50."new"
enablePostNoboolean, default trueScrape post URLs in legacy Start URLs for the full post and comment tree.true
enableUserNoboolean, default trueScrape user profile URLs found in legacy Start URLs, using the fetch toggles below. Doesn't affect usernames.true
enableSubredditInfoNoboolean, default trueFetch metadata for subreddits found in legacy Start URLs, plus the optional top-subreddits ranking.true
fetchUserProfileNoboolean, default trueFor legacy Start-URL users, fetch profile/karma summary. Also the fallback for includeUserProfile when unset.true
fetchUserSubmittedNoboolean, default trueFor legacy Start-URL users, fetch submitted posts. Also the fallback for includePostHistory when unset.true
fetchUserCommentsNoboolean, default trueFor legacy Start-URL users, fetch comments. Also the fallback for includeCommentHistory when unset.true
fetchTopSubredditsNoboolean, default falseFetch a ranking of large subreddits by real subscriber count, added as top_subreddit rows.false
maxSubredditsInfoNointeger, default 25; minimum: 1, maximum: 100Max subreddits to return when fetchTopSubreddits is enabled.25
maxItemsToSaveNointeger, default 200; minimum: 1Global max rows across profiles/history/affinity AND every legacy mode combined. The run stops once reached.200
limitPostsPerPageNointeger, default 10; minimum: 1Target posts to fetch per legacy search term / per subreddit.10
limitCommentsPerPageNointeger, default 50; minimum: 1Max comments to fetch for a single legacy post URL.50
limitCommunityPagesNointeger, default 2; minimum: 1Max result pages to paginate through per legacy subreddit URL or search term.2
maxCommentDepthNointeger, default 5; minimum: 1, maximum: 20Max nested-reply depth to parse for legacy post URLs. Depth 1 = top-level comments only.5
maxItemsPerUserNointeger, default 20; minimum: 1For legacy Start-URL users: max posts and comments to fetch. Also the fallback for maxHistoryItemsPerUser when unset.20
limitUserPagesNointeger, default 2; minimum: 1For legacy Start-URL users: max pages for posts and comments. Also the fallback for historyPagesPerUser when unset.2
proxyConfigurationNoobjectApify Proxy config. Direct connection by default; auto-retries through datacenter, then residential proxy, on a rate-limited or failed request.{"useApifyProxy": false}

Common pitfall: setting usernames alone is enough to get the full profile + history + affinity pull — you do not need to also populate startUrls. The legacy startUrls/enableUser/fetchUser* fields are a separate, independent user-scraping path kept for backward compatibility; mixing both without ignoreStartUrls can produce duplicate user_profile rows for the same username if it appears in both usernames and a legacy startUrls profile link.

{
"usernames": ["spez"],
"includeUserProfile": true,
"includePostHistory": true,
"includeCommentHistory": true,
"activityDateFrom": "3 months",
"includeSubredditAffinity": true,
"maxAffinitySubreddits": 15,
"minAffinityActivityCount": 1,
"maxHistoryItemsPerUser": 20,
"historyPagesPerUser": 2,
"maxItemsToSave": 200,
"proxyConfiguration": { "useApifyProxy": false }
}

⬆️ Output sample

Every row is typed, normalized JSON with a consistent shape per type value — no HTML, no Reddit "Thing" kind/data wrapping. Results land in the Actor's default dataset, downloadable as JSON, CSV, Excel, XML, or RSS from the Apify Console or via the API. Below is one complete user_profile row (fields for user_post, user_comment, and user_subreddit_affinity rows are documented in the data table above).

{
"type": "user_profile",
"isChild": false,
"username": "spez",
"userSubmittedCount": 20,
"userCommentsCount": 20,
"activityDateFrom": "3 months",
"profileCoverageNote": "Karma/aggregate fields update infrequently (archive snapshot, not a live profile page) and may show null for inactive accounts; post/comment history below is fetched fresh this run.",
"postKarma": 184213,
"commentKarma": 521904,
"totalKarma": 706117,
"numPosts": 1204,
"numComments": 38210,
"earliestPostAt": "2015-06-01T12:00:00.000Z",
"lastPostAt": "2026-08-10T09:15:00.000Z",
"scrapedAt": "2026-08-15T09:02:11.123Z"
}

🎛️ How do you filter and target specific user profiles?

This Actor's targeting model is username-first, not query-first: you name exact users and control how much of their footprint comes back.

  1. Username or profile URL, not a search query. usernames accepts either a bare handle or a full reddit.com/user/... URL — both resolve identically, so you can paste directly from a browser tab without stripping the URL.
  2. Depth vs. breadth on history. maxHistoryItemsPerUser caps how many posts and comments come back per user; historyPagesPerUser caps how many pages get paginated to find them (100 items per page). Raise pages before raising items if a user is prolific and you're getting truncated results.
  3. Recency scope. activityDateFrom accepts an absolute date or a relative window ("2 weeks", "3 months") and is applied while paginating a user's own history — a filter the legacy Start-URL modes have no equivalent for.
  4. Affinity quality threshold. minAffinityActivityCount drops subreddits where a user only commented once or twice, so maxAffinitySubreddits returns their real recurring communities instead of noise.
  5. Run-wide volume control. maxItemsToSave is a single global cap across every row type in the run (profiles, posts, comments, affinity, and any legacy-mode rows) — the run stops pushing once it's hit.

Three real examples:

{ "usernames": ["spez"], "activityDateFrom": "2 weeks", "includeSubredditAffinity": false }
{ "usernames": ["spez", "kn0thing"], "includeSubredditAffinity": true, "maxAffinitySubreddits": 10, "minAffinityActivityCount": 3 }
{ "usernames": ["spez"], "includePostHistory": true, "includeCommentHistory": false, "maxHistoryItemsPerUser": 100, "historyPagesPerUser": 5 }

🔗 Want to try other Reddit scrapers?

ScraperWhat it extracts
Reddit Ads Scraper — Full Catalog AccessReddit's ad catalog and advertiser data
Instagram Post Details Scraper With Engagement DataInstagram post details plus likes/comments engagement data
TikTok Scraper With Repost Insights DataTikTok video data including repost signals
Snapchat Popular Accounts Scraper: Story & Spotlight ContentPopular Snapchat accounts with story and Spotlight content
Facebook Reviews Scraper — Headlines, Tags & Reviewer DetailFacebook Page reviews with reviewer-level detail
Pinterest Autocomplete Scraper — Topic Audience & ReachPinterest autocomplete suggestions with audience/reach signals

🐍 How to extract Reddit data programmatically

This Actor runs like any other Apify Actor: one API call starts the run, and results come back as structured JSON from the dataset — no separate Reddit credential involved.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<store-username>/reddit-scraper-user-profiles-and-subreddit-activity").call(
run_input={
"usernames": ["spez"],
"includeSubredditAffinity": True,
"activityDateFrom": "1 month",
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["type"] == "user_subreddit_affinity":
print(item["username"], item["subreddit"], item["activityCount"])

Export to spreadsheets or CRM

From the Apify Console, open the run's dataset and export directly to CSV or Excel — username, subreddit, activityCount, and activityShare map cleanly onto spreadsheet columns for a pivot table, or username, postKarma, commentKarma, and lastPostAt for a CRM enrichment import.

Scraping publicly visible Reddit data — usernames, karma, post and comment content posted to public subreddits — is generally lawful, since these are records the platform and its users have made publicly accessible. This Actor collects only what's already visible without logging in.

Because the output includes personal data (usernames, karma history, and the content of posts and comments tied to identifiable individuals), GDPR and CCPA apply if you store or process it in bulk: you need a lawful basis for collection and retention, and reasonable limits on how long you keep it and who it's shared with. Reddit's own Terms of Service also govern automated access separately from data-protection law. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

Does the profile karma data go stale?

Yes — postKarma, commentKarma, totalKarma, numPosts, and numComments come from a periodically-updated aggregate, not a live read of the profile page, and profileCoverageNote discloses this on every user_profile row. It may also be null for accounts with little activity. Post and comment history, by contrast, is fetched fresh on every run.

Can I get a user's subreddit activity along with their profile and history?

Yes. Set includeSubredditAffinity to true (it's on by default) and each username also gets user_subreddit_affinity rows — one per subreddit they're active in, ranked by affinityRank, capped by maxAffinitySubreddits (max 100) and floored by minAffinityActivityCount.

How accurate is the post and comment data?

The Actor returns posts and comments exactly as recorded in the underlying archive at request time. Because content can be edited or deleted on Reddit after the archive captured it, cross-check anything decision-critical against the live permalink before acting on it.

How many records can I get per run?

maxItemsToSave sets a single global cap on total rows across the whole run (default 200, minimum 1, no upper bound enforced by the Actor) — the run stops pushing new rows once it's hit, across profiles, history, affinity, and any legacy-mode rows combined.

What does the subreddit affinity ranking actually measure?

It's a real, direct measurement — not derived from the sampled post/comment history above — of how many tracked activities (posts plus comments) a user has in each subreddit, sorted highest first, with activityShare showing each subreddit's percentage of the user's total tracked activity. Raise minAffinityActivityCount to filter out incidental one-off activity.

Does this Actor work with Claude, ChatGPT, and AI agent frameworks?

It's callable as a standard Apify Actor run via apify-client, which any agent framework capable of making an HTTP/SDK call can invoke — point it at the Actor ID, pass usernames in the run input, and read typed JSON back from the dataset.

Can I use this without a Reddit API key or developer account?

Yes. You only need an Apify account and API token; the Actor reads from public archive endpoints and never requires Reddit OAuth credentials, an app registration, or a Reddit login.

What happens if a username doesn't exist or has no activity?

The Actor still pushes a user_profile row for it, with null values on the karma/aggregate fields it couldn't resolve and userSubmittedCount/userCommentsCount at 0 — it does not silently drop the username.

Conclusion

Reddit Scraper: User Profiles & Subreddit Activity turns a list of Reddit usernames into structured karma profiles, full post/comment history, and a ranked subreddit affinity map — without Reddit API credentials, OAuth setup, or approval waiting periods. It's built for growth teams, agencies, and researchers who need to understand what a Reddit user actually does, not just what their bio says, with the same typed row shape on every run. Set your usernames in the Apify Console and run it now.