Reddit Scraper - Posts, Comments, Subreddits & Users
Pricing
from $1.50 / 1,000 results
Reddit Scraper - Posts, Comments, Subreddits & Users
Reddit scraper with upvotes included. Posts, comments, subreddits & users from any subreddit, no Reddit API key and no login. Scores, upvote ratios and comment counts included. AI-ready JSON. Export JSON/CSV/Excel.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
deusex machine
Maintained by CommunityActor stats
2
Bookmarked
157
Total users
15
Monthly active users
12 hours
Issues response
6 days ago
Last modified
Categories
Share
Reddit Scraper: Posts, Comments, Subreddits & Users API
Reddit Scraper gives you posts, comments, subreddits and users from any subreddit or Reddit search query, without a Reddit API key and without login. You get structured JSON ready for LLM pipelines, AI training, sentiment analysis, lead generation, market research and brand monitoring.
No OAuth setup and no app registration, which since 2026 Reddit only grants for moderation use cases. Give it a list of subreddits or a search query and you get clean, normalized Reddit data in JSON, CSV or Excel.
Posts · Comments · Nested threads · Image galleries · Search any query · Pagination beyond 100 · Export to JSON/CSV/Excel
✨ What you get
- ✅ No Reddit API key needed. No app registration, no OAuth, no credentials to manage.
- ✅ No login. Public Reddit data, anonymously.
- ✅ Up to 500 posts per subreddit or query, past the usual 100-result ceiling.
- ✅ Engagement metrics included by default on most runs:
score,upvoteRatio,numComments,flair,awards, and per-commentscore,depth,created,isSubmitterandparentId. See Engagement metrics for exactly when. - ✅ Nested comment threads, with each comment's parent so you can rebuild the discussion.
- ✅ Organic results only. Promoted and sponsored posts never arrive as results.
- ✅ Same results wherever the run executes. Text comes back in English and the posts and their order do not change with the run's location. Verified on September 2, 2026 against the same subreddit collected from Mexico and from the United States: identical posts, identical order.
- ✅ AI-ready JSON. Straight into an embedding pipeline, a RAG system or a sentiment model.
- ✅ JSON, CSV, Excel (XLSX), or the Apify Dataset API.
- ✅ Unknown is never reported as zero. Anything Reddit does not publish comes back as
null, never0, so a filter or a sort onscorecannot mistake a missing value for a real one. - ✅ An incomplete run says so. If a run is cut short, every result it delivered carries
isPartialResult: true, the run ends flagged rather than reported as a success, and the log names what is missing.
📊 Engagement metrics
score, upvoteRatio, numComments and the per-comment numbers are included automatically whenever they are worth the extra wait. You do not have to set anything.
| What you ask for | Engagement metrics |
|---|---|
Posts only (includeComments: false) | ✅ included |
| Posts plus up to 25 comments each | ✅ included |
| Posts plus more than 25 comments each | not included, ask for them with useRichData: true |
useRichData: true | ✅ always included |
useRichData: false | never included, the run finishes sooner |
When they are included, posts carry score, upvoteRatio, numComments, flair, awards, postLanguage and subredditWeeklyActiveUsers, comments carry score, depth, created, isSubmitter and parentId, and you can ask for up to 1000 comments per post instead of 100.
When they are not, you get every other field exactly as always, with those ones null.
If the metrics cannot be collected on a given run, you still get your posts and comments, with those fields null and a line in the log saying so. It never costs you results you would otherwise have had.
What this costs. From September 17, 2026, a comment that arrives with its metrics costs $0.70 per 1,000 comments. A comment that arrives without them is free, so the rows above that say "not included" cost exactly what they cost today. If a run starts with the metrics and loses them halfway, only the comments that actually carried them are billed, and the run log gives you the count both ways.
Some fields come back null either way, because Reddit does not publish them at all: subredditSubscribers, isNSFW, isSpoiler, isPinned, numCrossposts and controversiality.
📤 Output fields
Every Reddit post comes back with 29 normalized fields covering text, media, engagement, flairs, subreddit metadata and timestamps. When you ask for comments, each post also carries its comment thread as structured JSON.
Post fields (29)
| Field | Description |
|---|---|
id | Reddit post ID (e.g. t3_1s6e3dp) |
subreddit | Subreddit name (e.g. technology) |
title | Post title |
author | Reddit username of the post author |
score | Net upvotes. ✅ with engagement metrics |
upvoteRatio | Share of votes that were upvotes. ✅ with engagement metrics |
numComments | Total comments on the post. ✅ with engagement metrics |
url | Reddit permalink to the post |
selftext | Post body for text posts (up to 5,000 chars) |
thumbnail | Thumbnail preview URL |
imageUrls | All image URLs from galleries and image posts |
media | Video URL + duration, or image URL |
created | Post creation time (ISO 8601) |
edited | Last edit timestamp, or false |
isVideo | Video post flag |
isSelf | Text post (true) vs link post (false) |
isGallery | Multi-image gallery post |
domain | Source domain (e.g. youtube.com, self.technology) |
linkUrl | External URL for link posts |
flair | Post flair. ✅ with engagement metrics |
awards | Awards on the post. ✅ with engagement metrics |
postLanguage | Language Reddit assigns to the post. ✅ with engagement metrics |
subredditWeeklyActiveUsers | Reddit's own community-size number. ✅ with engagement metrics. It is not a subscriber count and must not be read as one |
isNSFW | ⚠️ Always null. Reddit does not publish it |
isSpoiler | ⚠️ Always null. Reddit does not publish it |
isPinned | ⚠️ Always null. Reddit does not publish it |
numCrossposts | ⚠️ Always null. Reddit does not publish it |
subredditSubscribers | ⚠️ Always null. Reddit does not publish it (see the FAQ) |
postType | Classification: text, link, video, image, gallery |
scrapedAt | Scraping timestamp (ISO 8601) |
comments | Array of comments (when you ask for them) |
Comment fields (10)
| Field | Description |
|---|---|
id | Comment ID |
author | Commenter Reddit username |
body | Comment text (up to 2,000 chars) |
score | Net upvotes on the comment. ✅ with engagement metrics |
created | Comment time, ISO 8601. ✅ with engagement metrics |
depth | Position in the thread, 0 for top level. ✅ with engagement metrics |
isSubmitter | Whether the commenter is the post author. ✅ with engagement metrics |
parentId | The comment this one replies to. ✅ with engagement metrics |
controversiality | ⚠️ Always null. Reddit does not publish it |
replies | Number of direct replies |
🎯 Use cases
1. AI & LLM training data
Reddit posts and comments are a gold mine for training conversational AI, instruction-tuning LLMs and building RAG systems. You get clean JSON that drops straight into your embedding pipeline. Use searchQuery to narrow it to your domain (medical, legal, finance).
2. Sentiment analysis & brand monitoring
Collect Reddit posts and comments mentioning your brand, product or competitors, feed them into VADER, RoBERTa or an LLM, and track sentiment over time. You get full discussion threads, not isolated quotes.
3. Lead generation
Find people asking for what your product solves, with filters like searchQuery: "best CRM for small business" or sort: top, timeFilter: month. Combine with the author field to build contact lists.
4. Market research
Monitor entire subreddits (r/smallbusiness, r/saas, r/entrepreneur) for trending topics, pain points and recurring questions, segmented by engagement and recency.
5. Academic research
Reproducible, timestamped Reddit data for computational social science, public health monitoring and linguistic analysis, without the Reddit API's OAuth flow.
6. Content discovery & trend spotting
Surface emerging topics before they hit mainstream media. Sort by rising or top/day to catch conversations at the right moment.
7. Competitor intelligence
Pull discussions about competitor products to extract feature requests, complaints and comparison threads, ranked by the engagement they actually got.
🚀 How to use
Example 1. Hot posts from multiple subreddits
{"subreddits": ["technology", "programming", "webdev"],"maxPosts": 50,"sort": "hot"}
maxPosts applies per subreddit, so this returns up to 150 Reddit posts across the 3 subreddits, with engagement metrics included.
Example 2. Search across all of Reddit
{"searchQuery": "best CRM for small business","maxPosts": 100,"sort": "top","timeFilter": "month"}
The month's top posts matching your query, from anywhere on Reddit.
Example 3. Posts with nested comments
{"subreddits": ["AskReddit"],"maxPosts": 25,"sort": "top","timeFilter": "week","includeComments": true,"maxCommentsPerPost": 20}
25 top posts from r/AskReddit this week, each with up to 20 nested comments, engagement metrics included on both the posts and the comments.
Example 4. Full comment threads
{"subreddits": ["AskReddit"],"maxPosts": 10,"includeComments": true,"maxCommentsPerPost": 500,"useRichData": true}
Up to 500 comments per post, with every comment's score and position in the thread.
Example 5. From Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run_input = {"subreddits": ["MachineLearning", "LocalLLaMA"],"maxPosts": 200,"sort": "top","timeFilter": "week","includeComments": True,"maxCommentsPerPost": 25,}run = client.actor("makework36/reddit-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "·", item["score"], "·", item["created"])
Example 6. From Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('makework36/reddit-scraper').call({searchQuery: 'apify reddit scraper',maxPosts: 50,sort: 'top',timeFilter: 'all',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} Reddit posts`);
Example 7. From cURL
curl -X POST "https://api.apify.com/v2/acts/makework36~reddit-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"subreddits": ["news"],"maxPosts": 10,"sort": "new"}'
📥 Input
| Parameter | Type | Default | Description |
|---|---|---|---|
subreddits | array | [] | Subreddit names, no r/ prefix |
searchQuery | string | (none) | Search Reddit globally for this term |
maxPosts | integer | 50 | Max posts per subreddit (1-500) |
sort | string | hot | hot, new, top, rising |
timeFilter | string | day | Time range for top: hour, day, week, month, year, all |
includeComments | boolean | false | Return comments for each post |
maxCommentsPerPost | integer | 100 | Comments per post. Up to 1000 with engagement metrics on, up to 100 without |
useRichData | boolean | automatic | Leave it alone for the automatic behaviour in the table above. true for metrics on every run, false to skip them |
proxyConfiguration | object | (optional) | Optional. Leave it empty and the Actor uses its own, at no proxy cost to you |
About proxyConfiguration
You do not need to set it. Everything above works out of the box, at no proxy cost to you.
Set it only if you would rather the run left through an exit IP you control, for example to keep your traffic isolated or to satisfy an internal policy. Yours then takes precedence, and the run log states which one was used. If you do supply your own, it has to be a residential or ISP proxy, and the log tells you plainly when it is not, rather than quietly returning null fields.
📋 Output example
Each item in the dataset is one Reddit post. When includeComments: true, each post carries a comments array.
Real output from a run on September 2, 2026 (subreddits: ["Drizzy"], sort: "top", timeFilter: "day", includeComments: true):
{"id": "t3_1w4ne7e","subreddit": "Drizzy","title": "Combination.","author": "Viola-Intermediate","score": 245,"upvoteRatio": 0.9919678714859438,"numComments": 14,"url": "https://www.reddit.com/r/Drizzy/comments/1w4ne7e/combination/","postLanguage": "en","subredditWeeklyActiveUsers": 292024,"subredditSubscribers": null,"postType": "image","totalCommentsScraped": 13,"comments": [{"id": "t1_p78xz7j","author": "Snoo-10056","body": "siri, what's the definition of aura?","score": 36,"created": "2026-09-01T20:20:02.512000+0000","depth": 0,"isSubmitter": false,"parentId": null,"replies": 1},{"id": "t1_p79g9jh","author": "xnjr1x","body": "🗣\"something you can't fake.\"","score": 14,"created": "2026-09-01T21:49:32.861000+0000","depth": 1,"isSubmitter": false,"parentId": "t1_p78xz7j","replies": 0}]}
A gallery post
{"id": "t3_1s6gkmj","subreddit": "pics","title": "About 100,000 attended the No Kings protest in St. Paul, Minnesota","author": "katotooo","score": 48213,"upvoteRatio": 0.94,"numComments": 1204,"url": "https://www.reddit.com/r/pics/comments/1s6gkmj/about_100000_attended_the_no_kings_protest/","selftext": null,"thumbnail": "https://preview.redd.it/oy94fh2hnvrg1.jpg?width=140&height=93","imageUrls": ["https://preview.redd.it/oy94fh2hnvrg1.jpg?width=3024&format=pjpg","https://preview.redd.it/9pmbe5aqnvrg1.jpg?width=4032&format=pjpg"],"media": null,"created": "2026-03-29T00:21:20.000Z","edited": false,"isVideo": false,"isSelf": false,"isGallery": true,"domain": "reddit.com","linkUrl": "https://www.reddit.com/gallery/1s6gkmj","postType": "gallery","scrapedAt": "2026-03-29T08:05:31.904Z"}
A video post
{"id": "t3_ghi789","subreddit": "nextfuckinglevel","title": "Robot parkour demo from Boston Dynamics","score": 31877,"upvoteRatio": 0.97,"media": {"videoUrl": "https://v.redd.it/....mp4", "duration": 47},"postType": "video"}
⚡ Performance
What a run costs
$1.50 per 1,000 posts. A result is one Reddit post, with its comment thread attached.
$0.70 per 1,000 comments that carry engagement metrics, from September 17, 2026. A comment is billed only when it arrives with its score, depth, created, isSubmitter and parentId filled in. Comments that arrive without those fields cost nothing, today and after that date. Most Reddit scrapers bill every comment as a full result at around $3 per 1,000, so this stays about 4x cheaper.
No Reddit API subscription, no proxy add-ons, no hidden fees.
| Scenario | Posts | Comments with metrics | Cost | Typical runtime |
|---|---|---|---|---|
| 1,000 posts, no comments | $1.50 | none | $1.50 | ~5-10 min |
| 3 subreddits × 50 posts, no comments | $0.23 | none | $0.23 | ~1-2 min |
| 500 posts + 100 comments each (default) | $0.75 | none | $0.75 | ~20-35 min |
| 1,000 posts + 25 comments each (default) | $1.50 | 25,000 | $19.00 | ~15-25 min |
500 posts + 100 comments each, useRichData: true | $0.75 | 50,000 | $35.75 | ~20-35 min |
The third row is not a mistake: above 25 comments per post the metrics are off unless you ask for them, so those 50,000 comments arrive free. The table in Engagement metrics says exactly which runs include the metrics and which do not.
Tips to spend less:
- Set
includeComments: falsewhen you only need the posts. - Set
useRichData: falsewhen you want the comment text but not the per-comment metrics. The comments still arrive; they just cost nothing. - Use a tight
timeFilter(dayorweek) instead ofall. - Ask for the number of comments you will actually read. 10-25 per post captures most of the signal.
- Store the post IDs you already have and skip them on the next run.
- Schedule hourly instead of polling every few minutes. Reddit's
newlisting does not change fast enough to justify it.
❓ FAQ
Does this need a Reddit API key? No. No API key, no OAuth, no login, no app registration.
Do I get upvote counts?
Yes, on most runs, and without setting anything. See Engagement metrics for the two cases where you have to ask for them with useRichData: true.
Why is subredditSubscribers null?
Because the number Reddit publishes there is not the subscriber count. Measured on September 2, 2026: 292,024 for r/Drizzy, which is plausible, and 3,599,935 for r/explainlikeimfive, a subreddit with more than 20 million subscribers. Calling it a subscriber count would be wrong, so you get it as subredditWeeklyActiveUsers instead, with no claim about what else it might mean.
How is this different from the official Reddit API? The Reddit API caps you at 60 requests a minute and 10 posts per listing page, and requires OAuth. Here there are no such limits, search and comment threads come out of the box, and you get JSON, CSV or Excel.
What does maxPosts mean?
Per subreddit, not global. 3 subreddits × 50 maxPosts = up to 150 posts.
How deep do comments go?
Up to 3 levels: top level (depth 0), replies (depth 1), replies to replies (depth 2). Every comment carries its parentId so you can rebuild the thread.
How many comments can I get per post? Up to 1000 when engagement metrics are on, up to 100 when they are not.
Can I scrape NSFW subreddits? Yes, but results may include adult content.
Is this legal? Collecting public Reddit data for research, journalism and business intelligence is generally allowed under fair-use principles. Consult your legal team for your case and review Reddit's User Agreement.
Can I schedule recurring runs? Yes. Use Apify's Scheduler hourly, daily or weekly, and Apify Webhooks to push new data into your own database.
📊 Comparison
| Feature | This Reddit Scraper | Official Reddit API | Reddit PRAW library | Generic web scrapers |
|---|---|---|---|---|
| Reddit API key required | ❌ No | ✅ Yes (OAuth) | ✅ Yes (OAuth) | ❌ No |
| Rate limit | None | 60 req/min | 60 req/min | Varies |
| Comment threads | ✅ Nested up to depth 3 | ✅ Full tree | ✅ Full tree | ❌ Usually not |
| Upvotes and engagement | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Usually not |
| Search across Reddit | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Manual |
| Multiple subreddits per run | ✅ Yes | ❌ One at a time | ❌ One at a time | ❌ Manual |
| Export to JSON / CSV / Excel | ✅ All three | ❌ JSON only | ❌ Python objects | Varies |
| Maintenance burden | Apify handles it | You handle OAuth + retries | You handle OAuth + retries | You handle everything |
| Setup time | <1 minute | 30-60 minutes | 15 minutes | Hours or days |
Use this when:
- You need Reddit data now, without setting up OAuth.
- You want structured JSON without writing parsers.
- You are feeding Reddit data into an AI or LLM pipeline.
- You need several subreddits in one run.
- You need CSV or Excel for people who do not write code.
Use the official Reddit API instead when:
- You are building a bot that posts, votes or messages.
- You need real-time events.
- You are fine with 60 requests a minute and an OAuth setup.
📝 Changelog
- 3.1 (September 2, 2026)
- Engagement metrics now come included on most runs.
score,upvoteRatio,numComments,flair,awardsand the per-comment numbers arrive without setting anything, whenever you ask for posts only or for up to 25 comments per post. Above that, ask for them withuseRichData: true. SetuseRichData: falseto skip them and finish sooner. See Engagement metrics. - Up to 1000 comments per post when engagement metrics are on, instead of 100.
- Fixed: post and comment text no longer ends with a trailing footer. Earlier versions appended a fixed boilerplate string and a stray
 to the end of everyselftextand every commentbody. Text now stops where the author's text stops. - Fixed: a run that ran out of time no longer reports success. Results that were cut short carry
isPartialResult: trueand the posts still missing their comments carrycommentsIncomplete: true, so a truncated dataset cannot be mistaken for a complete one. - Fixed: runs now use the timeout you set. Longer runs were being cut at 10 minutes no matter what timeout was configured.
- Fixed: a comment fetch that failed is no longer indistinguishable from a post with no comments. Those posts now carry
commentsFetchFailed: true. - Added: promoted posts are excluded, so sponsored content never arrives as a result.
- Added:
subredditWeeklyActiveUsers, reported under its own name rather than as a subscriber count, because it is not one.
- Engagement metrics now come included on most runs.
- 3.0 (September 1, 2026) Rebuilt after Reddit changed what it publishes. Affected fields became
nullrather than0. - 1.0 Initial public release. 29 post fields, 10 comment fields, search and subreddit modes, nested comment threads, JSON/CSV/Excel export.