Reddit Scraper
Pricing
from $0.84 / 1,000 result-items
Reddit Scraper
Scrape Reddit posts, comment trees, subreddit feeds, user profiles and communities by keyword search or URL. Get title, body, author, score, upvote ratio, comment count, flair, media and timestamps. Filter by date, flair or keyword, or run only-new, with no proxy to set up. $1.20 per 1,000 items.
Pricing
from $0.84 / 1,000 result-items
Rating
0.0
(0)
Developer
BonCross API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
What is Reddit Scraper?
Reddit Scraper gets you Reddit posts with their whole comment trees, the replies behind "load more" included, along with subreddit feeds, user histories and community details. Paste keywords, subreddit names or any Reddit URL. You don't need a Reddit account or an API key, and there's no proxy to set up.
Why people choose it:
- Whole threads arrive quickly. A 2,571-comment thread, a 50-post feed with its comments, a search and a user profile returned 3,916 results in 15 seconds.
- You can search comments by keyword across all of Reddit, not only posts. A keyword finds the comments that mention it, each as a full comment record.
- You pay for what you keep. Duplicates, items you've already had and anything your filters drop are free. A target that can't be read gives you a row saying why, and that row isn't charged.
- The engagement maths is done for you. Posts and comments come with score per hour, comments per hour and total engagement next to the raw score.
- It costs $1.20 per 1,000 posts on the Free plan, and half that for comments read from a thread, with proxy usage and platform usage included.
BonCross Verified means we tested this actor against the live site before release and kept the record:
- 38 of 38 live checks on its inputs and filters passed on 7 October 2026
- 14 targets run the same day, searches, subreddits, a user and two links: 145 posts, 11 comments, 1 user, 1 error row
- Charges matched the 157 rows
- An unreadable target gets an uncharged row saying why
What you can do with it:
- Search Reddit by keyword, or inside one subreddit, and sort by relevance, hot, top, new or comment count
- Read a subreddit feed by new, hot, top, rising or controversial, with a time window, or its latest comments across all its threads
- Expand a post's full comment tree, collapsed branches included
- Collect user profiles with karma, account age and history: posts, comments or both, by new, hot, top or controversial
- Find the communities and users that match a search term
- Filter by date range, post flair or keyword before anything is charged
- Tag rows with your own labels for campaign or client tracking
- Return only what you haven't seen before, for daily monitoring
Most runs are brand or product monitoring across a few subreddits, market research on what buyers ask before they purchase, or lead generation from questions your product answers. People also use it to track competitors inside industry communities and to spot trends for content research. The comment trees suit sentiment and topic analysis, academic work on discussion structure, and training or evaluation data for language models.
What Reddit data do you get?
| Post title and body, plain and HTML | 🔗 Post URL, permalink and external link |
| Author, author id and premium status | 🏷 Post and author flair |
| Score and upvote ratio | 💬 Comment count and crosspost count |
| 📅 Created and edited timestamps | 🖼 Media, galleries, video and thumbnails |
| 🧵 Full comment tree with depth and parent | Comment body, score and submitter flag |
| Subreddit, id, type and subscriber count | Community stats and description |
| 👤 User karma, account age and verification | Locked, stickied, NSFW and Reddit's removal category |
| Awards and gilding | Your own custom labels |
How to scrape Reddit
There's nothing to install. You fill in a form and download a file.
- Create a free Apify account and open Reddit Scraper.
- Add keywords, subreddit names or Reddit URLs. You can mix all three in one run.
- Want comments? Set "Max comments per post" above 0. It starts at 0, which returns posts only.
- Choose how many posts you want and add any date, flair or keyword filters.
- Click Start, then download the results as Excel, CSV, JSON, XML or HTML.
⬇️ Input
Three boxes take your targets, and one run can use all of them: "Search terms" for keywords, "Subreddits" for feeds, and "Start URLs" for any Reddit link. What a link returns depends on where it points:
| You paste | You get |
|---|---|
| A post | The post and its comments |
| A subreddit or feed | Its posts |
| A user profile | The profile plus that user's posts and comments. A /submitted or /comments link narrows it |
| A search results page | That search |
Start URLs can also load links in bulk from a file, a Google Sheet or a remote list. Search terms accept Reddit's own search syntax: quotes, subreddit:, author:, title:, self:yes and flair:.
Limits. "Max posts per search / subreddit / user" (1 to 1,000, default 100) applies to each target on its own. Ten targets at 50 each returns 500. Comments have their own caps: "Max comments per post" (0 to 5,000, default 0, which means posts only) and "Max comments per search" (1 to 5,000, default 100). "Maximum results for the whole run" caps the lot. Nothing past it is fetched or charged for, and 0 means no cap.
Search extras. "Also search communities" and "Also search users" are off by default. Switch them on and each search term also returns the matching subreddits as community records and the matching user profiles. "Search within subreddit" restricts your search terms to one subreddit, by name or URL. Leave it empty to search all of Reddit.
Dates and NSFW. "Posts posted after" and "Posts posted before" keep posts created within those dates, and the two "Comments posted" fields do the same for comments. A bare date in a "before" field means the end of that day. "Include NSFW" is on by default and keeps posts, comments and communities marked over 18.
Profiles and communities. "Fetch author profiles" (off by default) adds a user record with karma, account age and description for each distinct author the run saw, up to "Max users" (default 50) per run. "Fetch community details" (off by default) adds a community record with subscribers, description and type for each subreddit seen.
Keyword search across Reddit, newest first:
{"searches": ["nigara hamono"],"searchSort": "new","searchTime": "month","maxPosts": 100}
A subreddit feed with full comment trees:
{"subreddits": ["TrueChefKnives"],"feedSort": "new","maxPosts": 50,"maxCommentsPerPost": 500,"commentSort": "top"}
One thread, expanded as deep as it goes:
{"startUrls": [{ "url": "https://www.reddit.com/r/AskReddit/comments/1wa3b2m/" }],"maxCommentsPerPost": 1500,"maxCommentDepth": 10}
Comment search by keyword:
{"searches": ["nigara hamono"],"searchComments": true,"searchSort": "new","maxCommentsPerSearch": 60}
A subreddit's newest comments across all its threads, and one user's top comments of all time:
{"subreddits": ["TrueChefKnives"],"feedSort": "comments","startUrls": [{ "url": "https://www.reddit.com/user/spez/" }],"userContent": "comments","userSort": "top","feedTime": "all","maxPosts": 100}
A daily brand monitor with date, flair and keyword filters:
{"subreddits": ["TrueChefKnives", "chefknives"],"feedSort": "new","maxPosts": 300,"postedAfter": "2026-09-01","onlyWithFlair": ["Question", "State of the collection"],"filterKeywords": ["nigara", "kurosaki"],"filterKeywordMode": "any","customLabels": { "campaign": "q3-monitor" },"dedupStoreName": "reddit-brand-seen"}
For developers
maxPosts,maxCommentsPerSearchandmaxCommentsPerPostare the per-target limits andmaxItemsis the run-wide one (default 0, no limit). Error rows don't count towardmaxItems.maxCommentDepth(default 50, 0 to 100) is the deepest reply level kept, and 0 keeps top-level comments only.commentSort(defaultconfidence, alsotop,new,controversial,oldandqa) is how Reddit ranks the tree before it's read.- Scan guards: with a comment date, keyword or only-new filter, a tree stops being read once five pages of comments in a row match nothing. A comment search stops after five such pages. Reddit gives about 9 comment-search hits per page.
- Reddit search has no date parameter.
postedAfterandpostedBefore(andcommentedAfterandcommentedBeforefor comments) are applied to the rows: on newest-first listings paging stops at the lower bound, and on other sorts the listing is read up to Reddit's cap before filtering. - Comment search only knows
relevance,newandtop. WithsearchSortset tohotorcommentsit falls back torelevance. feedTimeis the window for the Top and Controversial feeds, and foruserSortwhen that'stoporcontroversial.userContentisoverview,submittedorcomments, and a/submittedor/commentslink overrides it.dedupStoreNamenames a key-value store that remembers what was returned. Set it on a scheduled run and each run yields only new posts, comments and profiles.includeRawData(default off) attaches Reddit's original record asrawon posts, communities and users. It makes records large.maxConcurrency(Parallel requests, default 4, 1 to 8) is how many requests run at once. The default is the fastest level measured clean. Lower it only if a run reports refusals or errors.- Results are saved as they arrive. If the platform interrupts and restarts a run, it carries on without saving or charging any result twice.
⬆️ Output
One dataset holds the whole run. Each row has a dataType of post, comment, user or community, which is how you split it afterwards. A post:
{"dataType": "post","id": "1r0t58w","fullName": "t3_1r0t58w","url": "https://www.reddit.com/r/castiron/comments/1r0t58w/used_my_cast_iron_so_much_its_bad_for_my_health/","permalink": "/r/castiron/comments/1r0t58w/used_my_cast_iron_so_much_its_bad_for_my_health/","externalUrl": null,"title": "Used My Cast Iron So Much It's Bad For My Health","body": "I had my blood results follow up today after two years of putting it off. She was going through all my levels and when she came to Iron, I had more th…","bodyHtml": "<div class=\"md\">…</div>","author": "cleverusername143","authorId": "t2_1rjj7ol","authorFlair": null,"authorIsPremium": false,"subreddit": "castiron","subredditId": "t5_2s8x6","subredditType": "public","subredditSubscribers": 740229,"createdAt": "2026-02-10T06:15:16.000Z","editedAt": null,"score": 590,"upvoteRatio": 0.68,"numComments": 292,"numCrossposts": 0,"awards": 0,"gilded": 0,"flair": "Humor","flairCss": null,"postHint": null,"domain": "self.castiron","isSelf": true,"isVideo": false,"isGallery": false,"isNsfw": false,"isSpoiler": false,"isOriginalContent": false,"locked": true,"stickied": false,"pinned": false,"archived": false,"distinguished": null,"quarantine": false,"thumbnail": null,"media": null,"crosspostParent": null,"crosspostParentUrl": null,"removedByCategory": null,"suggestedSort": null,"removedBy": null,"bannedBy": null,"removalReason": null,"modReasonTitle": null,"isRobotIndexable": true,"hidden": false,"edited": false,"mediaType": "text","hasMedia": false,"videoUrl": null,"galleryCount": null,"galleryImages": null,"ageHours": 5175.17,"scorePerHour": 0.114,"commentsPerHour": 0.056,"engagementTotal": 882,"commentToScoreRatio": 0.495,"isHighEngagement": false,"titleLength": 48,"bodyLength": 815,"wordCount": 173,"outboundUrlHost": null,"searchTerm": "cast iron","searchInput": "cast iron","scrapedAt": "2026-09-13T21:25:16.049Z"}
A comment row:
{"dataType": "comment","id": "o4kqgjs","fullName": "t1_o4kqgjs","url": "https://www.reddit.com/r/castiron/comments/1r0t58w/used_my_cast_iron_so_much_its_bad_for_my_health/o4kqgjs/","permalink": "/r/castiron/comments/1r0t58w/used_my_cast_iron_so_much_its_bad_for_my_health/o4kqgjs/","postId": "1r0t58w","parentId": "t3_1r0t58w","parentCommentId": null,"depth": 0,"body": "Donate blood and use cast iron all you want.","bodyHtml": "<div class=\"md\">…</div>","author": "Normal_Fun","authorId": "t2_1p3p8702","authorFlair": null,"authorIsPremium": false,"isSubmitter": false,"subreddit": "castiron","subredditId": "t5_2s8x6","createdAt": "2026-02-10T07:00:49.000Z","editedAt": null,"score": 353,"scoreHidden": false,"controversiality": 0,"awards": 0,"gilded": 0,"locked": false,"stickied": false,"distinguished": null,"collapsed": false,"collapsedReason": null,"archived": false,"removedByCategory": null,"postTitle": "Used My Cast Iron So Much It's Bad For My Health","parentKind": "post","edited": false,"ageHours": 5174.41,"scorePerHour": 0.068,"commentsPerHour": 0,"engagementTotal": 353,"commentToScoreRatio": 0,"isHighEngagement": false,"titleLength": null,"bodyLength": 44,"wordCount": 9,"outboundUrlHost": null,"searchTerm": "cast iron","searchInput": "cast iron","scrapedAt": "2026-09-13T21:25:16.049Z"}
A few things to know before you build on these rows:
- Comments found by keyword comment search have
source: "search". That's how you tell them from comments read out of a thread. - User rows (
dataType: "user") have karma, account creation date and verification. Community rows (dataType: "community") have subscribers, description and type. - A community row also has
descriptionHtml, the longsidebartext,over18,lang,iconandbannerimage links,headerTitle,submitText,submissionType,advertiserCategory,suggestedCommentSort, and the community's settings as true/false flags:allowImages,allowVideos,allowVideogifs,allowGalleries,allowPolls,spoilersEnabled,originalContentTagEnabled,linkFlairEnabled,wikiEnabled,restrictPostingandrestrictCommenting. removedBy,bannedBy,removalReasonandmodReasonTitleare moderator columns. Reddit doesn't publish them to outside readers, and they were empty on all rows in our release check.removedByCategoryis the public one.- Any custom labels you set are added to each row as extra columns.
How much does it cost?
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
actor-start, per run | $0.001 | $0.001 | $0.001 | $0.001 |
result-item, per post, feed comment, community or user returned | $0.0012 | $0.00108 | $0.00096 | $0.00084 |
thread-comment, per comment read from a post's comment tree | $0.0006 | $0.00054 | $0.00048 | $0.00042 |
comment-search-item, per comment found by keyword comment search | $0.0012 | $0.00108 | $0.00096 | $0.00084 |
Enterprise plans pay the Business price.
$1.20 per 1,000 results on the Free plan, $0.84 on Business, for posts, feed comments, users and communities. Comments from a post's comment tree are $0.60 per 1,000 ($0.42 on Business), and comment-search hits are $1.20 per 1,000 ($0.84 on Business). That's the whole price: there are no proxy charges or platform usage on top. Duplicates, already-seen items and filtered items are free.
- 10,000 comments from a handful of big threads: $0.001 + 10,000 × $0.0006 = $6.001 ($4.201 on Business).
- A daily brand monitor over five subreddits, about 50 new posts and 100 comments from their threads a day: 30 × ($0.001 + 50 × $0.0012 + 100 × $0.0006) = $3.63 for the month ($2.55 on Business).
- 1,000 comment-search hits for a keyword: $0.001 + 1,000 × $0.0012 = $1.201 ($0.841 on Business).
Apify's Free plan includes $5 of credits a month, which covers about 4,100 posts in runs of 100, or about 8,300 comments read from threads, before you pay anything.
How fast is it, and how far back can you go?
| Run | Result |
|---|---|
| One search, a 50-post subreddit feed with comments, a 2,571-comment thread capped at 1,500, one user profile, plus author and community records | 3,916 results (107 posts, 3,791 comments, 10 users, 8 communities) in 15 seconds |
| Comment search, newest, cap 60 | 60 comments in 7 seconds, each a full comment record |
| Two subreddits, 40 top posts of the week each, up to 20 comments per post | 1,211 results (80 posts, 1,131 comments) in 7 seconds |
| Eight subreddits, 20 top posts of the month each, up to 10 comments per post | 1,742 results in 26 seconds |
These are whole runs on Apify, start-up included. The last two were measured on 2 and 3 October 2026.
Big jobs are paced to Reddit's published request rate. A run that reads many comment trees gets through roughly 6,000 posts with comments an hour, and posts alone go far faster. Comment trees for a page of posts are fetched together, which is why comments add little time per post.
How far back you can go is Reddit's call. It ends any listing, whether search, feed or user history, at roughly 1,000 items. To reach further, narrow the time window or split the query. Comment trees aren't subject to that cap and expand as deep as "Max comments per post" allows.
Monitor Reddit daily, or call it from your own code
For brand monitoring we'd set it up like this: an Apify Schedule that runs once a day, the subreddits you care about on the New feed, and a name in "Only-new store name". Each run then returns only the posts and comments you haven't had yet. A webhook fires when the run ends, and the new rows can go straight into Slack or a Google Sheet. Zapier, Make and Airbyte connect the same way.
From code, one request runs the actor and returns the dataset:
POST https://api.apify.com/v2/acts/boncross~reddit-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN
Send the input JSON as the body. That call suits short runs, and the standard run endpoints handle long ones. The apify-client packages on NPM and PyPI wrap both.
An AI agent can read Reddit through it too. Point an MCP client at mcp.apify.com and reference the actor as boncross/reddit-scraper. Because each row says whether it's a post, comment, user or community, an agent can route the results without guessing.
Limitations
- Reddit ends any listing at roughly 1,000 items.
- Reddit search has no date filter of its own. The date fields are applied to the rows after Reddit answers, which means a date-filtered search sorted by anything other than newest reads up to Reddit's cap first.
- Deleted and removed content is returned as Reddit serves it, with
[deleted]or[removed]bodies andremovedByCategorywhen Reddit gives a reason. The moderator-only columns stay empty. - There's no sentiment analysis or AI tagging. You get Reddit's data and the engagement figures computed from it.
- Access depends on Reddit continuing to make this data available. If that changes, runs return error rows until access is restored.
- A search, feed or URL that can't be read, or a URL the actor doesn't recognise, gives you a row with
inputand anerrormessage. Those rows aren't charged.
FAQ
Is it legal to scrape Reddit?
The actor collects publicly visible posts and comments. That content includes personal data such as usernames, which means you need a lawful basis to collect and store it. You're responsible for complying with Reddit's terms and applicable law.
Do I need proxies or a Reddit account?
Neither. Posts, comments, feeds, users and communities need no proxy at all. Comment search has its proxy cost inside the per-hit price, and there's still nothing for you to configure.
Why did I get posts but no comments?
"Max comments per post" is 0 until you change it, and 0 means posts only. Set it to the number of comments you want from each post, up to 5,000.
How do I get all the comments on one post?
Paste the post's URL into Start URLs and set "Max comments per post" high enough to cover the thread. The tree is expanded through its collapsed branches, down to the reply depth you allow.
How do I find comments that mention a keyword?
Switch on "Also search comments" and set "Max comments per search". You get full comment records, charged at the comment-search rate of $1.20 per 1,000 on the Free plan ($0.84 on Business).
How do I pull posts from a date range?
Fill in "Posts posted after" and "Posts posted before". For comments, use the two "Comments posted" fields. On a newest-first listing the run stops as soon as it passes your earlier date, and you aren't charged for anything outside the range.
Can I keep only posts with a certain flair, or that mention a word?
"Only posts with flair" keeps posts whose flair matches one you name, ignoring case. "Filter keywords" matches titles, post bodies and comment bodies, and "Keyword mode" decides whether a row needs any of your words, all of them, or none. With comments switched on, the keyword filter keeps only the comments in a thread that mention your terms. Filtered items aren't charged.
How do I get only what's new since the last run?
Give "Only-new store name" any name and schedule the run. The actor remembers what it has returned under that name, and later runs give you only new posts, comments and profiles.
Why does my search stop at about 1,000 posts?
That's Reddit's ceiling on any one listing. Split a broad search into narrower ones (by subreddit, by time window, or by sort) and run them together. Results that turn up in two of them are returned and charged once.
More from BonCross
- Reed.co.uk Jobs Scraper: Reed.co.uk jobs by keyword and location with Reed's own filters: salary, contract,…
- UK Government & NHS Jobs Scraper: NHS Jobs, Civil Service Jobs (every department) and Ministry of Justice vacancies in…
- Workday Jobs Scraper: Every open job from a Workday careers board.
- Ashby Jobs Scraper: Every open job on an Ashby careers board.
- ATS Jobs Scraper: Jobs from any company careers page.
- CharityJob Scraper: UK charity and non-profit jobs from CharityJob.
Your feedback
Missing a field Reddit shows, or got a thread that looks short? Send us the link you ran on the Issues tab in Apify Console. We read every report and answer there. If there's a feed, a sort or a column you'd want added, ask for it in the same place.