Reddit Subreddit Members Scraper By Time Window
Pricing
from $2.99 / 1,000 results
Reddit Subreddit Members Scraper By Time Window
Monitor members in competitor subreddits. This actor helps you extract usernames to study growth, engagement patterns, or overlap between audiences in your industry niche.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Reddit Subreddit Scraper — Active Users, Karma and Profile Links
Reddit Subreddit Scraper By Time Window sweeps a subreddit's new, hot, rising, top and controversial feeds — plus its comment firehose — and returns one deduplicated row per unique public account that actually posted or commented. Each row carries username, userId, profileUrl, postKarma, commentKarma, createdISO, accountAgeDays, foundInSortsText and discoverySurface. It's built for community managers, growth marketers, and researchers who need a real activity sample from a subreddit rather than a number Reddit no longer publishes. Point it at any subreddit, choose your feeds and time window, and get a typed, run-deduplicated participant list on the Apify platform.
What is Reddit Subreddit Scraper By Time Window?
It's an Apify Actor that reads old.reddit.com's public listing pages — not Reddit's private API — and turns each post or comment author it finds into one output row, deduplicated across the whole run. No Reddit account, login, or API key is required; it runs entirely against logged-out pages behind an Apify residential proxy.
- Discovery by subreddit, keyword, or username — feed
r/python, a full URL,u/spez, or a plain search term intotargets; subreddit names and search terms are classified automatically - Identity fields on every row —
username, the real ReddituserId(thet2_…fullname read off the page), and a directprofileUrl - Karma and account-age signal —
postKarma,commentKarma,createdISOandaccountAgeDays, read from the profile sidebar whenfetchDetailsis on - Explicit time windows —
topTimeWindow(hour to all-time) applied totopandcontroversial, always sent so Reddit can't silently narrow it to today - Cross-feed filters —
minSortCountkeeps only accounts seen in several swept feeds,excludeAuthorsdrops bots and moderators, before anything is charged - Standard Apify export — results land in the Actor's dataset and download as JSON, CSV, Excel, HTML table, or RSS, like any Apify dataset
What data can I extract with Reddit Subreddit Scraper By Time Window?
Every kept participant is pushed as one dataset row with identity, karma, and discovery-provenance fields — here is every key the Actor writes:
| Field | Example Value | Use Case |
|---|---|---|
username | "climate_nerd_42" | Primary handle for outreach or dedupe |
userId | "t2_9f3k2a" | Stable Reddit account ID, unaffected by username changes |
profileUrl | "https://reddit.com/user/climate_nerd_42" | Direct link to the public profile |
totalKarma | null | Always null — the only endpoint that ever summed it, about.json, returns HTTP 403 since 2026 |
postKarma | 4821 | Submission karma from the profile sidebar |
commentKarma | 12890 | Comment karma from the profile sidebar |
createdUTC | 1451606400 | Account creation, Unix epoch seconds |
isGold | null | Always null — was only on the now-blocked about.json |
iconImg | null | Always null — same reason |
foundInSorts | ["new", "top:month"] | Every feed key this account surfaced in |
foundInSortsText | "new | top:month" | Same list, pipe-joined for spreadsheets |
sortCount | 2 | How many distinct feeds surfaced the account |
firstFoundInSort | "new" | The feed that discovered them first |
positionBySort | {"new": 4, "top:month": 11} | Best (lowest) listing rank seen per feed |
bestPositionInFeed | 4 | The single best rank across all feeds |
timeWindowUsed | "month" | The topTimeWindow in force when found in a windowed feed |
timesSeenInRun | 3 | Total feed items attributed to this account |
discoverySurface | "subreddit_feed" | subreddit_feed, comment_firehose, keyword_search, or direct_user_target |
sourceSubreddit | "python" | First subreddit this account was linked to |
sourceSubreddits | ["python"] | Every subreddit this account was linked to in the run |
createdISO | "2016-01-01T00:00:00" | Account creation, ISO 8601 |
accountAgeDays | 3859 | Days since account creation, computed at run time |
profileFetched | true | Whether the sidebar request that fills karma/creation fields succeeded |
profileFetchStatus | "ok" | ok, not_found, blocked, no_sidebar, skipped, or unknown |
scrapedAt | "2026-08-04T12:00:00Z" | When this row was written |
runId | "AbC123XyZ" | The Apify run that produced this row |
Karma and engagement signals
postKarma, commentKarma, sortCount, bestPositionInFeed and timesSeenInRun together describe how active and how established a participant is. An account with sortCount: 4 and a low bestPositionInFeed surfaced near the top of several different feeds — a genuine regular, not a one-off commenter. Set minSortCount to 2 or higher and combine it with a commentKarma threshold in your own downstream filter to isolate the accounts worth reaching out to, rather than everyone who appeared once in a 1,000-item sweep.
Discovery and targeting fields
discoverySurface, sourceSubreddit, sourceSubreddits, timeWindowUsed and firstFoundInSort record exactly where and how each account was found. They let you segment a multi-subreddit run back apart per community, tell posters (subreddit_feed) apart from repliers (comment_firehose), and confirm which topTimeWindow produced a given windowed row before you trust it in a report.
How does Reddit Subreddit Scraper differ from the official Reddit API?
Reddit's own API requires an OAuth app registered on Reddit's developer platform, and its subreddit endpoints (/r/<sub>/about) return only an aggregate subscriber count — there is no official endpoint that enumerates individual subreddit members, because Reddit does not publish that list to anyone, official client or not. This Actor does not solve that gap either; instead it builds a different, honest dataset: the accounts that actually posted or commented, discovered by reading the same public listing pages a browser would.
| Feature | Reddit API (official) | Reddit Subreddit Scraper By Time Window |
|---|---|---|
| Individual member/subscriber list | Not available at any tier — only an aggregate count field | Not available either — see limitations below |
| Active participant discovery | Requires the caller to page every feed and dedupe manually | ✅ Sweeps 5 sort orders plus comments and dedupes automatically |
Time-windowed ranking (t=) | Available as a raw query parameter | ✅ Same parameter, always sent explicitly so it can't silently default |
| Requires developer account / OAuth app | ✅ Yes | ❌ No Reddit login or app registration |
| Cross-feed yield accounting | Not provided — caller computes overlap itself | ✅ Built in; reported per feed and per feed pair |
| Anti-block handling | Caller's responsibility | ✅ TLS fingerprint rotation and residential proxy handled internally |
Why can't I get a real subreddit member list from either one?
Reddit stopped exposing per-account subreddit membership years ago, and as of 2026 even the aggregate subscriber count (about.json) returns HTTP 403 for this Actor's requests. This is a platform-wide gap, not a gap in one client: no scraper and no official API call can return "who is subscribed to r/python" today. What both can still see is participation — who posted or commented, which is public by definition. This Actor's real contribution is turning that public activity into a deduplicated, filterable account list with provenance, instead of leaving you to write and maintain the pagination and dedupe logic yourself.
Use Reddit's official API when you need OAuth-scoped actions on your own account (posting, voting, moderation) or a single known endpoint's raw JSON. Use this Actor when you want a ready-to-filter participant list across several feeds and a time window, without registering a Reddit app.
How to use data extracted from Reddit
Community managers and growth marketers
Set targets to your subreddit, sweep new + top with a month window plus the comment firehose, and set minSortCount: 2 to keep only the accounts that show up repeatedly. The output — username, commentKarma, foundInSortsText — becomes a warm-outreach or ambassador-recruitment list, ranked by how consistently each account participates rather than by a single lucky post.
Agencies running recurring subreddit audits
Point the same configuration at each client's target subreddit on a schedule, and diff uniqueParticipantsDiscovered and perFeedYield run over run from the SORT_YIELD_REPORT key-value record. A steady newParticipantsContributed count signals a healthy, growing community; a flattening one is a real finding to bring to a client review.
Market research and community intelligence
Run the same sortOrders and topTimeWindow across several competing subreddits and compare sortCount distributions and accountAgeDays medians. Subreddits with younger median accountAgeDays and high commentKarma spread indicate an actively growing audience — useful for deciding where to launch a community or an AMA.
AI agents and automated pipelines
Feed the deduplicated username/profileUrl/discoverySurface rows into an enrichment or CRM pipeline, or wrap a scheduled run behind an agent tool that answers "who is currently active in r/<subreddit>" on demand, using the Actor's dataset as the retrieval source instead of scraping Reddit directly inside the agent loop.
🔼 Input sample
Configure the run entirely through .actor/input_schema.json fields — no required parameters, every one has a working default.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
targets | No | array | Subreddits, profiles or search terms, one per line. Accepts r/python, a full URL, u/spez, /user/spez/, or a plain keyword. Do not decorate entries with emoji. | ["r/python", "r/MachineLearning"] |
subreddits | No | array | Extra plain subreddit names (no r/ prefix), merged with targets. | ["learnpython"] |
startUrls | No | array | Legacy alias for targets, used only when targets is empty. | [] |
sortOrders | No | array (select) | Feed sort orders to sweep: new, hot, rising, top, controversial. Prefilled ["new", "top"]. | ["new", "top"] |
topTimeWindow | No | string (enum) | Time window for top/controversial: hour, day, week, month, year, all. Default "year". | "month" |
includeCommentFirehose | No | boolean | Also sweep /r/<sub>/comments/ for repliers. Default true. | true |
sort_order | No | string (enum) | Legacy single-feed field: "", new, hot, rising, top, controversial. If set, swept first, in addition to sortOrders. | "" |
maxPosts | No | integer | Max listing items per feed per subreddit. Default 10, min 1, max 1000. | 50 |
maxComments | No | integer | Max comments read per subreddit. Default 10, min 0, max 1000. Set 0 to skip the firehose. | 50 |
maxParticipants | No | integer | Hard ceiling on charged rows, applied in discovery order. Default 0 (no ceiling), max 100000. | 0 |
minSortCount | No | integer | Minimum number of swept feeds an account must appear in. Default 1, min 1, max 10. | 1 |
excludeAuthors | No | array | Usernames to exclude, case-insensitive. Prefilled ["AutoModerator"]. | ["AutoModerator", "reddit"] |
restrictKeywordsToSubreddit | No | boolean | Scope keyword targets to the first subreddit with restrict_sr. Default false. | false |
fetchDetails | No | boolean | Read each participant's profile sidebar for karma and account age. Default true. | true |
maxConcurrentUsers | No | integer | Concurrent profile sidebar requests. Default 3, min 1, max 10. | 3 |
requestDelay | No | integer | Minimum delay between requests, in seconds. Default 1, min 0, max 30. | 1 |
proxyConfiguration | No | object | Proxy configuration. Default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
forceResidentialProxy | No | boolean | Force any selected proxy group to RESIDENTIAL, and log the override. Default true. | true |
{"targets": ["r/python", "r/MachineLearning"],"sortOrders": ["new", "top"],"topTimeWindow": "month","includeCommentFirehose": true,"maxPosts": 50,"maxComments": 50,"minSortCount": 1,"excludeAuthors": ["AutoModerator"],"fetchDetails": true,"maxConcurrentUsers": 3,"requestDelay": 1,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Common pitfall: don't decorate targets entries with emoji or other prefixes — the parser looks for r/, u/, or a full URL pattern, and an unexpected leading character can push an entry into the free-text keyword bucket, turning an intended subreddit sweep into a site-wide search instead.
🔽 Output sample
Results write to the Actor's default dataset, one row per unique participant, exportable as JSON, CSV, Excel, HTML table, or RSS from the Apify Console or API.
{"username": "climate_nerd_42","userId": "t2_9f3k2a","profileUrl": "https://reddit.com/user/climate_nerd_42","totalKarma": null,"postKarma": 4821,"commentKarma": 12890,"createdUTC": 1451606400,"isGold": null,"iconImg": null,"foundInSorts": ["new", "top:month"],"foundInSortsText": "new | top:month","sortCount": 2,"firstFoundInSort": "new","positionBySort": { "new": 4, "top:month": 11 },"bestPositionInFeed": 4,"timeWindowUsed": "month","timesSeenInRun": 3,"discoverySurface": "subreddit_feed","sourceSubreddit": "python","sourceSubreddits": ["python"],"createdISO": "2016-01-01T00:00:00","accountAgeDays": 3859,"profileFetched": true,"profileFetchStatus": "ok","scrapedAt": "2026-08-04T12:00:00Z","runId": "AbC123XyZ"}
The run also writes an uncharged accounting dataset (sort-yield-<runId>) with per-feed yield and feed-overlap rows, and a SORT_YIELD_REPORT object in the key-value store summarizing the whole run — neither is billed, and neither mixes into the participant dataset above.
How do you filter and target specific participants?
Four real controls decide who ends up in your output, and in this order:
- Subreddit sweep vs. keyword search. Entries recognized as
r/<name>or a full subreddit URL sweep that subreddit's own feeds directly — the more complete and accurate path. A plain-text entry instead triggers a Reddit search, either site-wide or scoped to your first subreddit withrestrictKeywordsToSubreddit, which is faster to set up but returns whatever Reddit's search ranks, not a full feed sweep. - Feed and window selection.
sortOrderspicks which rankings to sweep (new,hot,rising,top,controversial), andtopTimeWindownarrowstop/controversialto an hour through all-time. Different feeds surface largely different people, so combiningnewwithtopand the comment firehose covers more ground than sweeping near-identical feeds likenewandhot. - Quality threshold.
minSortCountkeeps only accounts that surfaced in multiple swept feeds — a cheap way to separate regulars from one-off commenters, applied before any profile request or charge. - Volume controls.
maxPostsandmaxComments(up to 1000 each) bound how deep each feed is paginated in old.reddit's own 100-item pages;maxParticipantscaps total charged rows across the whole run, applied in discovery order, with0meaning no cap.
{ "targets": ["r/technology"], "sortOrders": ["new", "hot", "top"], "topTimeWindow": "week", "maxPosts": 100 }
{ "targets": ["r/python"], "sortOrders": ["new", "top"], "minSortCount": 2, "excludeAuthors": ["AutoModerator", "reddit"] }
{ "targets": ["r/startups", "market research"], "restrictKeywordsToSubreddit": true }
▶️ Want to try other SimpleAPI scrapers?
| Scraper Name | What it extracts |
|---|---|
| Facebook Group Posts And Details & Contact Leads Scraper | Facebook group posts, group profile data, and a member-leads child dataset |
| LinkedIn Profile Posts Scraper By Media & Hashtag | LinkedIn profile posts classified by format, with hashtags extracted |
| Pinterest Profile Scraper With Email & Website Contacts | Public Pinterest profiles and the contact details each account publishes |
| Posts From A Place — X (Twitter) profiles, posts & place tags | X profile timelines and geo-tagged post search |
| Twitter X Tweets Scraper Scraper By Keyword & Hashtag | X posts by keyword or hashtag with typed filters |
| Threads Search Post Scraper | Threads posts by search |
How to extract Reddit data programmatically
Every run is a standard Apify Actor call: one API call to start the run, structured JSON rows back from the dataset.
Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("YOUR_USERNAME/reddit-subreddit-members-scraper-by-time-window").call(run_input={"targets": ["r/python"],"sortOrders": ["new", "top"],"topTimeWindow": "month","minSortCount": 2,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["username"], item["commentKarma"], item["foundInSortsText"])
Export to spreadsheets or CRM
Download the dataset as CSV directly from the Apify Console or via the API's dataset export endpoint, and map username, profileUrl, postKarma, commentKarma, foundInSortsText and sourceSubreddit straight into spreadsheet columns or CRM contact fields — the field names in the CSV header match the JSON keys exactly.
Is it legal to scrape Reddit?
Yes — scraping publicly accessible Reddit posts and comments is generally lawful; this data is public by design, since Reddit publishes it for anyone to read without logging in. That does not remove other obligations. The rows this Actor returns are tied to identifiable Reddit accounts — usernames, karma history, and account-creation dates — which can constitute personal data under GDPR and CCPA when linked to a natural person. You are responsible for establishing a lawful basis before storing, enriching, or acting on it at scale, honoring deletion requests, and complying with Reddit's own terms of service for automated access. Consult legal counsel for commercial applications involving bulk storage of personal data.
❓ FAQ
What happens to accounts that get suspended, banned, or deleted after being discovered?
The Actor never invents a stale flag — it reports what actually happened on request. If a participant's profile page later 404s, profileFetchStatus is set to "not_found"; if the sidebar loads but carries no karma data, it's "no_sidebar". Authors already shown as [deleted] or [removed] on the feed itself are skipped before they're ever recorded as a participant.
Does it return the text of the posts and comments, or just the participants?
Just the participants and their provenance — no post title, comment body, or permalink is captured for the specific item that surfaced an account. Each row tells you who posted or commented, in which feed, and how often, plus their karma and account age from their profile sidebar; it does not carry the content of what they wrote.
Can I get comment authors along with post authors in the same run?
Yes. includeCommentFirehose (default true) sweeps /r/<sub>/comments/ for repliers and merges them into the same deduplicated participant list, tagged discoverySurface: "comment_firehose". This surface consistently adds accounts the post feeds miss, since it captures people replying rather than submitting.
How accurate is the karma and account-age data?
It's read exactly as it appears on the account's public old.reddit.com profile sidebar at request time, so it's as current as Reddit's own page. totalKarma, isGold and iconImg are always null because the only endpoint that ever exposed them, about.json, returns HTTP 403 on every request as of 2026 — they are kept as columns for compatibility but never populated with a guess.
How many participants can I get per run?
There's no fixed ceiling beyond what you configure: maxParticipants caps total charged rows (default 0, meaning uncapped, up to 100000), while maxPosts (up to 1000) and maxComments (up to 1000) bound how deep each feed is paginated, in chunks of up to 100 items per request the way old.reddit itself paginates. A run also stops pushing rows early if the Actor's remaining charge allowance for the row_result event runs out, so it never produces a row it can't bill for.
What's the most useful filter for narrowing down to real regulars?
minSortCount. Set it to 2 or higher to keep only accounts that surfaced in at least that many swept feeds — a much smaller, more consistently active set than everyone who appeared once across a large sweep, and it's applied before any profile request or charge.
Can I sweep a private, quarantined, or banned subreddit?
Not meaningfully. The Actor only reads logged-out public pages; a private, quarantined, or banned subreddit either serves no listing content or a block-style page, which the Actor classifies as blocked or not found rather than as an empty result — you'll see it in the run log and the per-feed stopReason, not a silent zero.
Does Reddit Subreddit Scraper By Time Window work with Claude, ChatGPT, and AI agent frameworks?
Yes, as a standard HTTP endpoint. Any agent framework that can call the Apify API or the apify-client SDK can start a run, poll for completion, and read the dataset back as structured JSON — no Reddit-specific integration required.
Can I use it without a Reddit account, API key, or developer app?
Yes. The Actor reads only logged-out public pages and needs no Reddit credentials at all. You need an Apify account to run it; a residential proxy is required and is supplied by default through Apify Proxy.
Conclusion
Reddit Subreddit Scraper By Time Window turns a subreddit's scattered feeds into one deduplicated, typed list of the accounts actually posting and commenting there, with per-feed yield reporting so you know which sort orders were worth sweeping. It's built for community managers, agencies running recurring audits, and researchers who need a defensible activity sample rather than a subscriber number Reddit no longer publishes. Configure your subreddits, sort orders and time window, and run it directly on the Apify platform to get structured JSON back in minutes.