Reddit Data Scraper: Posts, Comments, Users, Monitoring avatar

Reddit Data Scraper: Posts, Comments, Users, Monitoring

Pricing

from $1.90 / 1,000 posts

Go to Apify Store
Reddit Data Scraper: Posts, Comments, Users, Monitoring

Reddit Data Scraper: Posts, Comments, Users, Monitoring

Scrape Reddit posts, comment trees, search results and user history as clean JSON. Fast public-endpoint fetching, honest documented rate limits, no start fee.

Pricing

from $1.90 / 1,000 posts

Rating

0.0

(0)

Developer

ActorForge

ActorForge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

12 hours ago

Last modified

Share

Scrape Reddit as clean JSON: subreddit feeds (hot / new / top / rising), full comment threads, keyword search, and — the part most scrapers get wrong — user post & comment history and date-range filtering. It reads Reddit's own public JSON endpoints the way a logged-out visitor's browser does — 100 posts per request, no page rendering, no scrolling — with built-in pacing that stays inside the quota Reddit itself announces for each visitor session.

What you get

The dataset contains two kinds of item, tagged by a type field: posts and comments. Comments link back to their post via postId, and to their parent comment via parentId, so you can rebuild the whole thread tree.

Post:

{
"type": "post",
"id": "1mk2qwe",
"subreddit": "explainlikeimfive",
"author": "curious_user",
"title": "ELI5: Why does ice float on water?",
"score": 1543,
"numComments": 214,
"url": "https://i.redd.it/example.jpg",
"permalink": "https://www.reddit.com/r/explainlikeimfive/comments/1mk2qwe/eli5_why_does_ice_float_on_water/",
"domain": "i.redd.it",
"createdUtc": "2026-08-07T14:32:05.000Z",
"nsfw": false,
"spoiler": false,
"stickied": false,
"flair": "Physics"
}

selfText (the full body of a text post) is included wherever Reddit returns it — feed rows, search results and the post's own page alike. For link posts url is the external link; for text posts it is omitted rather than filled with the post's own address.

Comment:

{
"type": "comment",
"id": "n8x1abc",
"postId": "1mk2qwe",
"subreddit": "explainlikeimfive",
"author": "helpful_redditor",
"score": 87,
"body": "Water is one of the few substances that expands when it freezes...",
"createdUtc": "2026-08-07T15:01:44.000Z",
"permalink": "https://www.reddit.com/r/explainlikeimfive/comments/1mk2qwe/eli5_why_does_ice_float_on_water/n8x1abc/",
"depth": 2,
"parentId": "t1_n8wzdef"
}

Two honesty details worth knowing before you buy:

  • When Reddit hides a comment's score, score is absent — we do not substitute a fake 0.
  • Deleted authors come through as [deleted], exactly as Reddit shows them.

What it can scrape

ModeInputWhat comes out
Subreddit feedssubreddits + listingSort (hot/new/top/rising)Posts, paginated up to Reddit's own ~1,000-post feed ceiling
Comment threadsa post URL in startUrlsThe post itself (with selfText) plus its comment tree with depths and parent links
Searchsearches, optionally scoped with searchCommunityNameMatching posts, newest first — global or within one subreddit, with the same full field set as feed rows
User historyusersThe user's public posts and comments, mixed, paginated
Monitoringany of the above on an Apify ScheduleFrequent small runs cost exactly what they scrape — there is no per-run start fee

Date filters (postedAfter / postedBefore for posts, commentedAfter / commentedBefore for comments) apply to every mode.

Use cases

  • Brand & keyword monitoring. Run a search or a subreddit feed on a schedule. Because billing has no start fee, a 25-post check costs 25 × $0.0019 = $0.0475 — every time, with no per-run surcharge. Many scrapers in this niche charge a start fee per run (sometimes multiplied by memory GB), which quietly dominates the bill in exactly this scenario.
  • User research. Pull a redditor's public post and comment history in one run — a mode that is notoriously unreliable across this niche.
  • Period analysis & backtesting. postedAfter + postedBefore give you a real date window, not just Reddit's "past week / past month" presets.
  • Community research. Feed sorts (hot/new/top/rising) with time filters, NSFW filtering off by default and flair captured per post.
  • LLM & dataset building. Clean, typed JSON with stable ids, ISO timestamps and thread structure (postId, parentId, depth) — ready to reassemble into conversation trees.

Input

FieldTypeDescription
startUrlsarrayReddit URLs of any supported kind: subreddit feed, post, user page, or search page (www.reddit.com and old.reddit.com links both work). Mode is detected from each URL.
subredditsstring[]Subreddit names without r/, e.g. ["programming"].
listingSortstringhot (default), new, top, rising.
timestringTime window for top listings and search: hour, day, week, month, year, all (default).
searchesstring[]Search queries. Alias: searchTerms — inputs written for other popular Reddit scrapers work unchanged.
searchCommunityNamestringRestrict search to one subreddit. Alias: withinCommunity.
usersstring[]Usernames without u/ — scrapes their public post/comment history.
postedAfter / postedBeforestringISO date bounds for posts. Applied after fetching (see Limits).
commentedAfter / commentedBeforestringISO date bounds for comments.
includeNSFWbooleanDefault false — NSFW posts are skipped unless you opt in.
maxItemsintegerMax items per subreddit / search query / user history (default 100, hard cap 1,000 — Reddit's own feed ceiling). Each request returns up to 100 items, so 1,000 posts cost 10 requests. Does not limit comment threads: a post URL always delivers the post plus its fetched comment page of up to 500 comments (see Limits).
proxyConfigurationobjectDefaults to Apify residential proxies, no country pin needed: Reddit keys its per-session quota to a visitor cookie, not to the address, and the same session answered from US, German and unpinned addresses alike in our 2026-09-03 measurement.

How to use it

  1. Click Try for free / Start on this page.
  2. Enter subreddit names, search queries, usernames — or paste Reddit URLs directly into Start URLs (feeds, posts, user pages and search pages are all recognized).
  3. Optionally set the sort, the time window, date bounds and Max items.
  4. Run it. Posts and comments land in the dataset as separate typed rows; export as JSON, CSV, Excel, or pull them over the API.

To run it on a schedule, use Apify Schedules — this Actor's pricing has no per-run start fee, so scheduled monitoring costs the same per item as one big run. To call it from code, use the Apify API or an official client.

Rate-limit etiquette (built in, with numbers)

This Actor is deliberately polite to Reddit's servers, and the numbers are fixed in code, not left to chance:

  • At most 10 requests per minute per session — a hard 6-second spacing between requests. That is exactly the quota Reddit announces for a visitor session in its x-ratelimit-* headers (100 requests per 10 minutes), so the Actor never runs into it by design.
  • Each feed, search or profile request carries up to 100 items, and one comment-page request carries up to 500 comments — a 1,000-post feed is 10 requests, not 40.
  • On an HTTP 429 the Actor waits 30 seconds, opens a fresh session and retries; on any other transient refusal it backs off (3 s, then 6 s, then 9 s), rotates to a fresh proxy session and retries — at most 3 times. A definitive answer from Reddit (a subreddit that does not exist, is banned or private) is not retried at all: the task fails immediately with the reason in the log.
  • If five sources in a row fail, the run stops instead of grinding through the rest of the plan.

The Actor stays inside what Reddit's own throttling tolerates, by design — it imposes no undue burden on the target servers.

Limits (honest)

  • ~1,000 posts per feed is Reddit's ceiling, not ours. Reddit serves at most about 1,000 posts for any listing, and no scraper can page past that. maxItems is capped there.
  • Date filters do not reduce the number of requests. Reddit has no server-side date-range API, so postedAfter/postedBefore filter items after fetching. When a date bound is set, items whose timestamp cannot be read are dropped rather than guessed.
  • Very deep comment branches may be incomplete. A thread is fetched as one page of up to 500 comments (sorted by top); branches Reddit collapses behind "load more comments" are not expanded in this version.
  • User-history comments arrive flat. On a profile Reddit does not expose thread position, so those comments have depth: 0; parentId and postId are still filled in. Comments scraped from a post's own page carry the full tree structure.
  • A non-existent, banned or private subreddit or user fails that task immediately, with Reddit's own reason in the run log (404, banned, gold_only…) — no retries, no silent empty dataset, no wondering where your data went.
  • No login, no captcha solving. The Actor reads only what Reddit serves to any logged-out visitor: it opens a session the way a browser does, completes Reddit's lightweight automated visitor check (a short script every visitor's browser runs), and then reads the public JSON endpoints with that session. If the check ever changes shape, a real Chrome completes it instead — data still flows over plain HTTP. If Reddit refuses a session, the Actor opens a new one from a fresh address; it will fail honestly rather than fabricate data.
  • If more than 5% of tasks in a run fail, the run log says so loudly; a run in which every fetch failed is marked failed, not "succeeded with 0 items". (A run whose filters legitimately match nothing — say, a strict date window — still succeeds, with an empty dataset and an empty bill.)

Pricing

Pay-per-event, two events, nothing else:

EventRate
post-scraped$1.90 per 1,000 ($0.0019 each)
comment-scraped$0.75 per 1,000 ($0.00075 each)
Run startfree — there is no start event

Comments cost less than half a post because they are cheaper to fetch (hundreds arrive in one request) — most competitors bill a comment at the full post price.

What you get for $1: ~526 posts, or ~1,333 comments, or any mix. Platform usage (compute, proxy) is charged to us, not to you — the per-item price above is the whole bill. There is no subscription, no minimum charge and no per-gigabyte start fee, so billing is strictly proportional to data delivered: autonomous AI agents can call this Actor through the Apify MCP server and pay per item. Rates shown as of the last README update; the Store page stays authoritative.

FAQ

Do I need a Reddit account or an API key? No. The Actor reads only publicly available data as a logged-out visitor, never logs in, and does not use Reddit's developer API or anyone's credentials.

Why is there no start fee? What's the catch? No catch — it is a deliberate design choice. Start fees (especially per-GB ones) punish the monitoring scenario: frequent small runs. We want scheduled monitoring to be priced exactly like one big run, per item delivered.

Does it use a browser? Not for the data. Everything is fetched over plain HTTP from Reddit's public JSON endpoints — fast, cheap and free of the render-and-scroll timeouts that browser-based scrapers show by the tens of thousands per month in their public run statistics. A real Chrome is kept on standby for exactly one job: completing Reddit's automated visitor check if its shape changes, once per session, so a change on Reddit's side degrades the Actor by a few seconds, not to zero.

I'm migrating from another Reddit scraper — do I have to rewrite my input? Probably not. The common field names are accepted directly (searchTerms, withinCommunity), and startUrls takes the same URL-list format other actors use.

Can I get every comment of a huge thread? Up to 500 comments per thread request, with full tree structure. Branches Reddit hides behind "load more comments" are not expanded in this version — if you need exhaustive multi-thousand comment threads, this Actor will give you the top 500 by rank, honestly labeled as such.

Are NSFW posts included? Only if you set includeNSFW: true. The default is off.

Where is my data stored? In your run's dataset on your Apify account, under your control. The Actor keeps no copy of scraped data outside your run and sends nothing to any third party.

Other Actors by ActorForge

Missing a Reddit surface you need? Open an issue from the Actor's page and tell us.

This is an unofficial scraper. It is not affiliated with, endorsed by, or connected to Reddit, Inc. in any way, and it does not use Reddit's developer API. It reads only data that Reddit serves publicly to any logged-out visitor — no login, no credentials, no captcha solving. Website terms of service are a contractual matter between a website and its visitors, not criminal law; you are responsible for ensuring that your use of the collected data complies with the laws that apply to you and with Reddit's terms. Post and comment content belongs to its authors.

Personal data

Reddit is a pseudonymous platform: the author field contains the public username a person chose to publish under, not their real identity. This Actor collects no emails, no real names, no private messages, and performs no deanonymization — it stores exactly what any visitor sees on a public page. Scraped data lives only in your own Apify dataset and is not retained by us outside your run. If the data you collect contains personal data under the laws of your jurisdiction (for example the GDPR), you act as its controller: it is your responsibility to have a legal basis for processing and to honor data-subject requests, including deletion.

Changelog

See the repository CHANGELOG.md.