Skip to main content

How to Scrape Reddit Posts and Comments on Apify

Reddit Scraper Lite pulls posts, comments, communities and user profiles from public Reddit pages without you needing Reddit API credentials or managing Reddit's official API quotas. It bills per result stored, and the real number is $4.00/1,000 results subject to change · verified 2026-09-09 on the free plan. The Store page advertises $3.40, but that is the Business-plan discount price. Two things will surprise you on the first run: three separate limits default to 10, and upvote counts are switched off.

Quick Answer

Open Reddit Scraper Lite in the Apify Store, paste a subreddit URL, raise maxItems, maxPostCount and maxComments from their default of 10, switch on includeMediaLinks, and run. Export the dataset as CSV, Excel or JSON. Cost is $4.00 per 1,000 results stored on the free plan.

Time~5 min
Cost$4.00 / 1K results (free plan)
DifficultyBeginner
OutputCSV / Excel / JSON

What does it actually cost to scrape 1,000 Reddit results?​

The Actor charges a result stored event for every row that lands in your dataset, and that price is tiered by your Apify subscription. The Store listing shows only the cheapest tier, so the headline you see is not the price most readers will pay.

Apify planStore discount tierPer resultPer 1,000 results
Free ($0/mo)none$0.0040$4.00
Starter ($19/mo, $17 annual)Bronze$0.0038$3.80
Scale ($199/mo)Silver$0.0036$3.60
Business ($999/mo)Gold$0.0034$3.40

Prices read from the Actor's pricing record via api.apify.com/v2/acts/trudax~reddit-scraper-lite on 2026-09-09; the plan-to-tier mapping is from apify.com/pricing, fetched the same day. The Actor's pricing object also lists Platinum and Diamond tiers, both at $0.0034, which the public pricing page does not name.

Two smaller charges sit on top. Each run pays $0.02 per gigabyte of memory allocated at start, once, and every run has a $0.04 floor. So a 4 GB run that returns 500 posts on the free plan costs about $2.08, not $2.00.

The free plan's $5 monthly credit therefore buys roughly 1,200 Reddit results before you pay anything. That is enough to validate your input configuration and your field mapping, and not enough for a real dataset. Read the Apify free plan breakdown if you want the full credit arithmetic, or how pay-per-event billing works for the model itself.

Which Reddit Actor should you run?​

This page uses Reddit Scraper Lite because it is the maintained one. Its sibling matters for a reason that is easy to miss:

  • trudax/reddit-scraper is marked deprecated in Apify's API, still shows a $45/month flat price today, and switches to pay-per-event on 2026-09-21. Do not budget against its current monthly figure.
  • apify/reddit-scraper no longer resolves as an Actor. Apify redirects it to Reddit Scraper Lite, which is Apify itself naming the successor.

If you have not settled on an Actor yet, the Reddit scraper comparison runs several of them against the same subreddit and puts cost per 1,000 results next to what each one actually returns. Come back here once you have picked one; the configuration below applies to Reddit Scraper Lite specifically.

When the official Reddit Data API is the better choice​

Be honest about this before you spend anything. Reddit's own Data API is the right tool when you need a first-party integration your legal review can point at, when you need write access or authenticated user context, or when you are building a product feature rather than a dataset. An Actor gives you neither an OAuth identity nor a contractual relationship with Reddit.

Scraping wins on bulk export, on setup time, and on not having to run credential rotation. It does not win on compliance posture. Pick accordingly, and see is Apify legal for how we think about the boundary.

Why does your first run only return 10 rows?​

Because three separate caps all ship at 10, and they compound. This is the single most common reason a Reddit run looks broken when it is working exactly as configured.

Read from the Actor's input schema (build 5.7.9) via Apify's API on 2026-09-09:

InputShips asWhat it limits
maxItems10Total rows saved to the dataset for the whole run
maxPostCount10Posts pulled per subreddit, search or user page
maxComments10Comments pulled per post; set to 0 to skip comments
maxCommunitiesCount2Community pages visited
maxUserCount2User pages visited
includeMediaLinksfalseUpvotes, upvote ratio, comment count, image and video URLs
includeNSFWtrueNSFW results are included unless you turn this off
sortnewAlso accepts Relevance, Hot, Top and Comments
proxyApify Proxy, RESIDENTIAL groupThe residential group is the shipped default

maxItems is the one that bites. Raising maxPostCount to 500 while leaving maxItems at 10 still gives you 10 rows.

Why is upVotes empty in your output?​

Because includeMediaLinks is off by default, and it gates more than its name suggests. Its own schema description says it controls upVotes, upVoteRatio, imageUrls, videoUrls and numberOfComments. Leave it off and every engagement signal in your dataset is null, which quietly ruins any ranking, sentiment-weighting or "top threads" analysis you were planning.

The trade-off is real: the schema warns that enabling it "will use a more detailed extraction method, which may affect performance." Slower runs, but usable data. Turn it on.

Step-by-step: a Reddit run that returns what you asked for​

  1. Open the Actor. Go to Reddit Scraper Lite and click Try for free to land in the run console.
  2. Set your input. Paste a subreddit into startUrls, for example https://www.reddit.com/r/webdev, or use searches with an optional searchCommunityName to scope a query to one subreddit. Search can target posts, comments, communities, users or media through the searchPosts / searchComments / searchCommunities / searchUsers / searchMedia switches.
  3. Raise the three tens. Set maxItems to your real target, then maxPostCount and maxComments to match. If you only want post metadata, set maxComments to 0 and save yourself the rows.
  4. Enable includeMediaLinks. See the section above.
  5. Narrow by date if you can. postDateLimit and commentDateLimit cut old content before it is stored, which is the cheapest optimisation available: you are billed per row saved, so filtering server-side is money not spent.
  6. Run a 50-row test first. Check the field mapping against your target schema, confirm the cost in the run's billing panel, then scale.
  7. Export. Open Storage → Dataset, preview, then download CSV, Excel or JSON. For anything recurring, drive it from the Apify API instead of clicking.

What breaks, and what it looks like​

Reddit's 1,000-item ceiling. The Actor's own documentation states that Reddit's 1,000-item limit applies to lists — a subreddit's post listing, a search result page — but not to the comments inside an individual post. You cannot pull the 5,000th-newest post in a subreddit in one pass. Work around it by splitting the job: multiple runs scoped by sort and time window, or by search term, rather than one run with a large maxPostCount.

Residential proxies are the default for a reason. The Actor ships with apifyProxyGroups: ["RESIDENTIAL"] and its Store page says plainly that "while some results can be obtained with datacenter proxies, residential proxies are preferred for Reddit scraping." Under pay-per-event you are not billed for that proxy traffic — the price you pay is per result stored — but switching to datacenter proxies to feel clever will cost you success rate. If you are seeing empty runs, see why scrapers get blocked.

Concurrency, where Apify contradicts itself. If you split a large job across parallel runs, note that Apify's two tier-1 pages disagree on the free plan's limit: apify.com/pricing lists 5 maximum concurrent runs, while docs.apify.com/platform/limits lists 25. Both fetched 2026-09-09. Plan for 5 and you will never hit the wall.

What you get back​

The dataset schema returns one flat object per item, with a dataType field marking it as post, comment, community or user. Field names below are from the Actor's published dataset schema, fetched 2026-09-09.

Output Data Fields
FieldDescriptionExample
dataTypepost, comment, community or userpost
idUnique identifier of the itemt3_1b8k2mx
urlDirect URL to the itemhttps://www.reddit.com/r/webdev/comments/1b8k2mx/...
usernameReddit username of the authordev_sarah_codes
authorFlairUser flair in that subredditfull-stack
titleTitle of the postMigrating a monolith to microservices
communityNameSubreddit name prefixed with r/r/webdev
bodyText contentAfter 8 months of planning...
upVotesUpvotes. Null unless includeMediaLinks is on2847
upVoteRatioUpvotes over total votes. Same switch0.94
numberOfCommentsComment count. Same switch312
parentIdParent post or comment, on comment rowst3_1b8k2mx
createdAtISO timestamp of creation2026-03-15T14:32:08.000Z
scrapedAtISO timestamp of the scrape2026-03-15T14:35:12.409Z
Sample post row

Field names are from the Actor's dataset schema; the values are illustrative.

{
"dataType": "post",
"id": "t3_1b8k2mx",
"parsedId": "1b8k2mx",
"url": "https://www.reddit.com/r/webdev/comments/1b8k2mx/migrating_a_monolith/",
"username": "dev_sarah_codes",
"userId": "t2_9x1qk",
"authorFlair": "full-stack",
"title": "Migrating a monolith to microservices",
"communityName": "r/webdev",
"parsedCommunityName": "webdev",
"body": "After 8 months of planning and execution, we finally completed the migration...",
"numberOfComments": 312,
"upVotes": 2847,
"upVoteRatio": 0.94,
"isVideo": false,
"isAd": false,
"over18": false,
"imageUrls": [],
"createdAt": "2026-03-15T14:32:08.000Z",
"scrapedAt": "2026-03-15T14:35:12.409Z"
}

Comment rows carry parentId, postId and numberOfReplies instead of title and numberOfComments. Community rows carry numberOfMembers. User rows carry postKarma and commentKarma.

What changed recently​

  • 2026-06-30 — the current pay-per-event pricing record took effect, adding the Store discount tiers that make the Free-plan price ($0.0040) different from the advertised one ($0.0034).
  • 2026-07-31 — build 5.7.9, the version whose input schema is documented above.
  • 2026-09-21 — the deprecated trudax/reddit-scraper moves off its $45/month flat price to pay-per-event. If you are running that Actor, your billing changes on that date.
Ready to run it

Reddit Scraper Lite is free to try, and a 50-row test costs well under a cent of your free credit.

Open Reddit Scraper Lite on Apify →

Still comparing? The Reddit Actor comparison has the cheaper alternatives and what you give up to get them.

Frequently Asked Questions

No. The Actor works from public Reddit pages, so you do not supply Reddit API credentials and you are not subject to Reddit's official API quotas. That is not the same as being unlimited: Reddit can still throttle or block scraping traffic, which is why the Actor defaults to residential proxies. You remain responsible for complying with applicable law and Reddit's terms.

Because maxItems defaults to 10 and caps the whole run. maxPostCount and maxComments also default to 10, per page. Raise all three. If you only want posts, set maxComments to 0 so comment rows do not eat your maxItems budget — you are billed per row stored.

On the free plan, 10,000 results stored is $40.00 at $0.0040 per result, plus $0.02 per GB of run memory and a $0.04 per-run floor. On Business (Gold tier) the same job is $34.00. Verified against Apify's API on 2026-09-09.

Not in a single listing pass. The Actor's documentation notes Reddit's 1,000-item limit on lists such as subreddit listings and search results, though it does not apply to comments within a single post. Split the work across runs using different sort orders, time windows or search terms.

It depends on jurisdiction, how you access the data, Reddit's terms, and whether you process personal data. This is not legal advice. See our web scraping legal guide and Is Apify legal?, and take counsel for regulated use.

Yes. Save the configured run as a task and attach a schedule, or trigger it from the Apify API or n8n, Make and Zapier. See Apify tasks and schedules for the setup.