Reddit Scraper
Pricing
from $2.50 / 1,000 posts
Reddit Scraper
Scrape Reddit posts, comments, communities, and user profiles without a login or API key. Search any subreddit or keyword to see what people say about a brand or topic, with full comment threads and the scores that show what landed.
Pricing
from $2.50 / 1,000 posts
Rating
5.0
(6)
Developer
Apify
Maintained by ApifyActor stats
4
Bookmarked
86
Total users
57
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Reddit posts, comments, communities, and user profiles at scale without a login or API keys, for market research, social listening, and LLM training data.
What does Reddit Scraper do?
Reddit Scraper extracts structured data in four modes: posts, comments, communities, and users. Point it at subreddit URLs, permalinks, user pages, or search URLs and pick a mode. No login, no API keys, no rate limits to juggle.
- 📋 Posts mode for titles, text, scores, upvote ratio, flairs, media
- 💬 Comments mode for full threads with replies, depth, parent chain
- 🏠 Communities mode for subscriber counts, rules, icons, banners
- 👤 Users mode for karma, account age, verification flags
- 🔍 Search-driven discovery of what to scrape
- 🔁 Residential proxy rotation and retries built in
What data can you extract from Reddit?
| Post data | Community info | User details |
|---|---|---|
| Title, body, flair | Name and URL | Username, URL |
| Score, upvote ratio | Subscriber count | Karma breakdown |
| Comment count, dates | Description, rules | Account age |
| Media, thumbnails | NSFW and access flags | Verified, mod flags |
Can I use it for market research, sentiment analysis, and lead generation?
Yes. Pull a subreddit's posts to map a category, a comment tree for sentiment work, community sizes for market sizing, or active users for audience discovery.
Accepted inputs: subreddit URLs like /r/python, post and comment permalinks, user pages like /user/spez, search URLs, or plain names.
Why use Reddit Scraper?
| What you need | Doing it yourself | Reddit Scraper |
|---|---|---|
| Access | Register an app, manage OAuth credentials | None, no login or keys |
| Reliability | Handle throttling and retries yourself | Rotation and retries built in |
| Four entity types | Stitch several endpoints together | One Actor, one mode switch |
| Whole comment threads | Paginate nested children by hand | Full threads with depth and parent chain |
| Ready-to-use data | Normalize raw payloads first | Flat records, ready to export |
| Delivery | Build scheduling and webhooks yourself | Schedules, webhooks, integrations |
What can you do with the data after scraping?
Market and product research. Track what customers say about a product or competitor across niche communities. Weekly runs suit category mapping.
Trend monitoring. Watch a subreddit's new or rising feeds and pipe results to Slack, Sheets, or a database. Hourly for fast communities, daily otherwise.
Sentiment and social listening. Pull full comment trees into NLP models, weighted by score.
Audience research and RAG. Snapshot subscriber counts month over month, profile active users, or drop structured text into embeddings pipelines.
Run search mode with a low result cap first, then scrape only the communities it surfaces.
How to use Reddit Scraper
- Sign in to Apify Console and open the Actor.
- Pick a Scrape mode: posts, comments, communities, or users.
- Paste Start URLs, or fill in names, usernames, or queries.
- Set volume limits such as max posts per community.
- Click Save & Start, then download from Storage.
How much will it cost?
Reddit Scraper is pay per result. You pay for each item in the dataset: a post, a comment, a community, or a user, plus a small Actor start fee per run. Compute and proxy traffic are included. Current prices are on the Pricing tab.
Each source is scraped on its own, so a post or comment reached through two inputs, say its post URL and its own permalink, lands in the dataset twice and is charged twice.
Some of what you ask for returns nothing: a deleted community, a search with no hits, a post with no comments. Each of those gets one item explaining why, priced below a real result.
You get one of those per thing you asked for: per community, username, post URL or query. Never one per page of a listing, and never for a post found inside a community you asked about. Input rejected before any request, such as a link that is not a Reddit URL, costs nothing.
Three levers move the total:
maxPostsPerCommunityandmaxCommentsPerPostleft empty mean scrape everything.maxCommentDepthstops the crawl at the depth you analyze.- A low
maxSearchResultsPerQuerykeeps discovery cheap.
⬇️ Input
Scrape mode is required. Each mode needs at least one source: URLs, names, or queries.
| Field | Type | Description |
|---|---|---|
scrapeMode | string | posts, comments, communities, users. Default: posts. Required. |
startUrls | array | Reddit URLs. Meaning depends on the mode. |
includeNsfw | boolean | Include adult content. Default: false. |
searchQueries | array | Queries to find what to scrape. |
communityNames | array | Names like python or r/webdev. |
communityQueries | array | Queries scoped to those communities. |
usernames | array | Like spez or u/AutoModerator. |
includeCommunityRules | boolean | Get rules with the details. Default: false. |
includeCommentReplies | boolean | Comment permalinks only. Pulls the thread. Default: false. |
maxCommentDepth | integer | Depth from top-level comments. Empty means all. |
maxPostsPerCommunity | integer | Posts per community. Empty means all. |
maxCommentsPerPost | integer | Comments per post. Empty means all. |
maxPostsPerUser | integer | Posts per user. Empty means all. |
maxCommentsPerUser | integer | Comments per user. Empty means all. |
maxSearchResultsPerQuery | integer | Results per query. Empty means all. |
Sort and time window are set per mode via communitySort, commentSort, userSort, and searchSort, each with a time filter from hour to all.
{"scrapeMode": "posts","startUrls": [{ "url": "https://www.reddit.com/r/python" }],"includeNsfw": false,"maxPostsPerCommunity": 25,"communitySort": "hot"}
⬆️ Output
Results land in the dataset and export as JSON, CSV, Excel, HTML, or XML. Each mode writes its own record shape.
Posts:
{"id": "1v8nkjz","title": "Nothing quite like a good Nolan twist.","authorName": "Arch_Lancer17","communityName": "TheOdysseyMovie","score": 4127,"commentCount": 98,"createdAt": "2026-07-28T04:21:17.000Z","flairText": "HUMOUR | Χιούμορ","isNsfw": false}
Comments:
{"id": "p07c4tq","body": "He definitely telegraphed it with Troy soldiers being all in white and ...","authorName": "TheJuiceBoxS","postId": "1v8nkjz","parentCommentId": null,"depth": 0,"score": 190,"createdAt": "2026-07-28T04:39:55.000Z"}
Communities:
{"id": "d6xzz7","name": "TheOdysseyMovie","title": "Christopher Nolan's The Odyssey","subscriberCount": 22558,"rules": []}
Users:
{"username": "i_was_a_person_once","totalKarma": 351487,"linkKarma": 554,"commentKarma": 350933,"createdAt": "2018-02-16T17:13:52.000Z","isVerified": true,"isSuspended": false}
When there is nothing to return
If something you asked for produced no result, the dataset gets one item explaining why.
{"url": "https://www.reddit.com/r/thisdoesnotexist123","reasonCode": "not-found","reasonDescription": "Community r/thisdoesnotexist123 does not exist or was deleted"}
reasonCode | What it means |
|---|---|
not-found | It doesn't exist, or it was deleted. |
empty | Reddit served it, but nothing came out of it: a community with no posts or only NSFW posts, a search with no hits, a post with no comments. |
nsfw-skipped | The community (communities mode) or post you asked for is adult content and Include NSFW is off. |
unavailable | Reddit won't serve it: private, banned, quarantined, or gated. |
The url is the exact page that came up empty, so two queries on the same community stay apart. To keep only real results, drop every item that has a reasonCode.
These are the items the pricing section covers: one per thing you asked for, priced below a real result.
How to run it via the Apify API
curl -X POST "https://api.apify.com/v2/acts/tri_angle~reddit-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"scrapeMode":"posts","startUrls":[{"url":"https://www.reddit.com/r/python"}],"maxPostsPerCommunity":25}'
Use the token from your Apify Integrations page. The apify-client packages wrap the same endpoints.
Troubleshooting
| Issue | Solution |
|---|---|
| Blocked-request error | Rotation and retries are built in, not configurable. Retry, then use the Issues tab |
| Permalink returned one comment | The default. Enable Include replies for the thread |
| Deep comment came back empty | Leave maxCommentDepth empty from a permalink, since depth counts from top-level |
| Time window had no effect | Sort and time filter only interact for top and controversial |
| NSFW content missing | Set includeNsfw to true |
| Some sources produced no results | Look for items with a reasonCode field, they say what happened to each one |
Limitations
- Deleted users and users that never existed are indistinguishable, because Reddit answers the same for both.
- Posts inside private, banned, or gated communities are not served. In communities mode you still get the community record; in posts or comments mode you get an
unavailableitem. - Restricted communities and suspended users return partial records. A community limited to Reddit Premium members comes back with
typeset togold_onlyand none of the restriction flags set. - Proxy groups, concurrency, and retries are fixed, not inputs.
- A comment more than 8 levels deep, scraped from its own permalink, comes back with
depthempty, as do its replies. Scrape the post URL to get every depth.
What else can you scrape from social media?
- Instagram Scraper for posts, profiles, and hashtags
- Facebook Posts Scraper for page and group posts
- TikTok Scraper for videos, profiles, and hashtags
FAQ
Can I scrape Reddit data behind a login?
No. Only public content is read. Private and gated communities return the community record, not the posts inside.
Can I get historical Reddit data?
Yes, within what Reddit still serves. Use top or controversial sort with a year or all time filter.
What happens to deleted, private, or banned content?
If Reddit still serves the data, you get a result. If not, you get an item with reasonCode and reasonDescription explaining why, and the run finishes anyway. Deleted posts and comments return body as [deleted] or [removed], suspended users are flagged isSuspended, and restricted communities carry isPrivate, isBanned, isQuarantined, or isGated.
Can I use it with integrations like Zapier, Make, or n8n?
Yes. Every Apify Actor supports Schedules, webhooks, and the Apify integrations catalog: Zapier, Make, n8n, Slack, Google Sheets, LangChain.
Can I use Reddit Scraper with the Apify API?
Yes. See the API section above, or the API tab for snippets.
Can I use Reddit Scraper through an MCP server?
Yes. Every Apify Actor is reachable through the Apify MCP server, so an MCP-capable agent can run it as a tool.
Is it legal to scrape Reddit data?
Scraping public Reddit content is generally legal. Personal data is protected by GDPR, so don't scrape or store it without a legitimate reason. See our post on the legality of web scraping, and consult a lawyer if unsure.
Your feedback
Missing a field or hitting a bug? Open the Issues tab. Custom work is available through Apify's custom solutions team.
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Reddit, Inc. or any of its subsidiaries.