Reddit Scraper avatar

Reddit Scraper

Pricing

from $0.84 / 1,000 result-items

Go to Apify Store
Reddit Scraper

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

BonCross API

Maintained by Community

Actor 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 parentComment body, score and submitter flag
Subreddit, id, type and subscriber countCommunity stats and description
👤 User karma, account age and verificationLocked, stickied, NSFW and Reddit's removal category
Awards and gildingYour own custom labels

How to scrape Reddit

There's nothing to install. You fill in a form and download a file.

  1. Create a free Apify account and open Reddit Scraper.
  2. Add keywords, subreddit names or Reddit URLs. You can mix all three in one run.
  3. Want comments? Set "Max comments per post" above 0. It starts at 0, which returns posts only.
  4. Choose how many posts you want and add any date, flair or keyword filters.
  5. 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 pasteYou get
A postThe post and its comments
A subreddit or feedIts posts
A user profileThe profile plus that user's posts and comments. A /submitted or /comments link narrows it
A search results pageThat 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, maxCommentsPerSearch and maxCommentsPerPost are the per-target limits and maxItems is the run-wide one (default 0, no limit). Error rows don't count toward maxItems.
  • maxCommentDepth (default 50, 0 to 100) is the deepest reply level kept, and 0 keeps top-level comments only. commentSort (default confidence, also top, new, controversial, old and qa) 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. postedAfter and postedBefore (and commentedAfter and commentedBefore for 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, new and top. With searchSort set to hot or comments it falls back to relevance.
  • feedTime is the window for the Top and Controversial feeds, and for userSort when that's top or controversial. userContent is overview, submitted or comments, and a /submitted or /comments link overrides it.
  • dedupStoreName names 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 as raw on 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 long sidebar text, over18, lang, icon and banner image links, headerTitle, submitText, submissionType, advertiserCategory, suggestedCommentSort, and the community's settings as true/false flags: allowImages, allowVideos, allowVideogifs, allowGalleries, allowPolls, spoilersEnabled, originalContentTagEnabled, linkFlairEnabled, wikiEnabled, restrictPosting and restrictCommenting.
  • removedBy, bannedBy, removalReason and modReasonTitle are moderator columns. Reddit doesn't publish them to outside readers, and they were empty on all rows in our release check. removedByCategory is the public one.
  • Any custom labels you set are added to each row as extra columns.

How much does it cost?

EventFree planStarterScaleBusiness
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?

RunResult
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 records3,916 results (107 posts, 3,791 comments, 10 users, 8 communities) in 15 seconds
Comment search, newest, cap 6060 comments in 7 seconds, each a full comment record
Two subreddits, 40 top posts of the week each, up to 20 comments per post1,211 results (80 posts, 1,131 comments) in 7 seconds
Eight subreddits, 20 top posts of the month each, up to 10 comments per post1,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 and removedByCategory when 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 input and an error message. Those rows aren't charged.

FAQ

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

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.