👽 Reddit Scraper - Posts, Comments, Search & Subreddits avatar

👽 Reddit Scraper - Posts, Comments, Search & Subreddits

Pricing

from $3.50 / 1,000 results

Go to Apify Store
👽 Reddit Scraper - Posts, Comments, Search & Subreddits

👽 Reddit Scraper - Posts, Comments, Search & Subreddits

Bulk Reddit scraping without an API key or login: paste hundreds of post, subreddit, user or search URLs, mine whole subreddits, expand nested comment threads, and stream clean posts, comments, communities and users to your dataset.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

16 hours ago

Last modified

Security

Limited permissions

Share

What is Reddit Scraper - Posts, Comments, Search & Subreddits?

Reddit Scraper - Posts, Comments, Search & Subreddits is a Reddit scraper that extracts posts, comments, communities and user profiles from public Reddit pages, with no Reddit login and no API key. Add keywords, Reddit links or subreddit names, then export the rows as JSON, CSV or Excel for Reddit brand monitoring and Reddit lead generation. It also fits Reddit sentiment analysis data. Pricing starts at $0.005 per result on the Free plan and falls to $0.0035 on Gold.

It is a Reddit data scraper for people who need clean rows without writing code. Typical jobs:

  • 🎯 Reddit brand monitoring - search your brand names and catch new mentions in posts and comments.
  • 🧲 Reddit lead generation - find people asking for tools like yours by searching problem keywords.
  • 🧪 Reddit sentiment analysis data - collect post and comment text with scores for analysis or model training.
  • 📈 Reddit market research - compare how communities talk about a product, a competitor or a trend.
  • 🧑 Audience research - pull user profiles with karma and recent activity from profile links.

As an Apify Actor it also gives you the Apify API, scheduling, webhooks, integrations and export to JSON, CSV, Excel, XML or HTML.

What can Reddit Scraper - Posts, Comments, Search & Subreddits do?

  • 🔎 Three ways to start - search by keyword (searchTerms), paste Reddit links (startUrls) or list whole subreddits (subredditUrls).
  • 🧵 Full comment threads - turn on crawlCommentsPerPost to add comments with score and depth, up to 500 per post.
  • 📚 Four row types - posts, comments, communities and user profiles land in one dataset, each labelled by dataType.
  • 🧭 Filters - sort order, time range, posted-after and posted-before dates, flair-only and NSFW switches.
  • 📊 Engagement metrics - every post carries ageHours, scorePerHour, commentsPerHour and isHighEngagement.
  • 🔄 Live results - each row is saved to the dataset as soon as it is ready, so you can watch the run fill up.
  • 🛑 Spend control - set a maximum spend per run and the Actor stops cleanly, keeping everything saved.

What data can Reddit Scraper - Posts, Comments, Search & Subreddits extract?

Every row has a dataType of post, comment, community or user. All field names below are saved exactly as written.

FieldDescription
🏷 dataType, id, parsedIdRow type, full Reddit ID and short ID.
📝 title, body, bodyHtml, flair, postTypePost text, flair and type (text, link, video or gallery).
👤 authorId, parsedAuthorId, authorName, authorFlairText, authorPremiumPost author details.
📍 communityName, communityId, parsedCommunityId, parsedCommunityName, subredditName, subredditId, parsedSubredditId, subredditSubscribersThe subreddit a post belongs to.
👍 score, upVotes, upvoteRatio, commentsCount, numCrossposts, numDuplicates, totalAwardsReceived, gilded, scoreHiddenPost votes, comments and awards.
🔗 postUrl, url, contentUrl, urlOverriddenByDest, domain, outboundUrlHost, thumbnailPost link, outbound link and domain.
🖼 images, galleryImages, galleryCount, mediaAssets, videoUrl, media, secureMedia, mediaMetadata, galleryData, mediaType, hasMedia, isVideo, isGallery, isSelfImages, galleries and video details. Each mediaAssets item holds mediaId, url, mimeType, width and height.
🔞 nsfw, over18, spoiler, locked, stickied, distinguished, isOriginalContent, isRobotIndexablePost flags.
✏ edited, editedAt, removedByCategory, removedBy, bannedBy, removalReason, modReasonTitleEdit and moderation details.
📈 ageHours, scorePerHour, commentsPerHour, engagementTotal, commentToScoreRatio, isHighEngagement, titleLength, bodyLength, wordCountCalculated engagement and length metrics.
💬 postId, parentId, linkId, depth, controversiality, ups, downs, isSubmitter, collapsed, collapsedReason, permalinkComment thread details. Comment rows also reuse body, bodyHtml, authorId, authorName, communityName, subredditId, score, scoreHidden, gilded, totalAwardsReceived, edited, stickied, distinguished, locked and removalReason.
📚 name, namePrefixed, description, descriptionHtml, publicDescription, subscribers, activeUserCount, lang, subredditType, quarantineCommunity profile and size.
🎨 communityIcon, bannerImg, headerImg, keyColor, primaryColor, submitText, submissionTypeCommunity branding and submit text.
🛠 linkFlairEnabled, allowImages, allowVideos, allowGalleries, allowPolls, wikiEnabled, restrictPosting, restrictCommenting, advertiserCategory, communityReviewedCommunity settings.
🧑 username, commentKarma, linkKarma, awardeeKarma, awarderKarma, totalKarma, iconImg, snoovatarImgUser profile and karma.
🛡 isGold, isMod, isEmployee, isBlocked, verified, hasVerifiedEmail, hasSubscribed, acceptFollowers, acceptChats, acceptPmsUser flags.
🪪 subredditDisplayName, subredditTitle, subredditPublicDescriptionThe user's own profile page.
📅 createdAt, crawledAt, searchTerm, dataSourceCreation time, collection time, the keyword that found the row, and a label for where the row came from.

Note: Fields Reddit does not show for an item are empty or null, and some rows have no score, comment count or flair. dataSource is set on every row, and rows labelled other than live can show older score and comment counts.

What data can't Reddit Scraper - Posts, Comments, Search & Subreddits extract?

Only public data that a logged-out visitor can see is collected. Private communities, deleted content, direct messages and login-only pages are not returned.


How to scrape Reddit posts and comments

  1. Create a free Apify account or log in.
  2. Open Reddit Scraper - Posts, Comments, Search & Subreddits in Apify Console.
  3. Add Reddit links to startUrls, keywords to searchTerms, or subreddits to subredditUrls.
  4. Choose what keyword search returns with searchPosts, searchComments and searchCommunities.
  5. Set limits with maxPostsCount and, to get comments, switch on crawlCommentsPerPost and set maxCommentsPerPost.
  6. Click Start and watch the run log and the live status message.
  7. Open the Dataset tab and export the rows as JSON, CSV or Excel, or read them through the API.

How much does it cost to scrape Reddit?

The Actor uses pay-per-event pricing: you pay for each result saved to the dataset, whether it is a post, a comment, a community or a user profile. The price per result depends on your Apify plan, and Apify platform usage is billed in addition.

PlanPrice per resultPrice per 1,000 results
🆓 Free$0.005$5.00
🥉 Bronze$0.0045$4.50
🥈 Silver$0.004$4.00
🥇 Gold$0.0035$3.50

Each run also has a start event of $0.00005 per GB of memory, minimum one. The Actor's default memory is 256 MB, which is below 1 GB, so the start event is the minimum of 1 event = $0.00005.

Worked example: 2,000 results on the Silver plan cost 2,000 x $0.004 = $8.00, plus the $0.00005 start event and platform usage.

See the live pricing page for current tiers.

Is scraping Reddit free?

You can try it without paying first. The $5 monthly credit on the Apify Free plan covers about 1,000 results at $0.005 each, before platform usage. Set a maximum spend per run to keep costs under control while you test.


Input

You need at least one of startUrls, searchTerms or subredditUrls. A run with none of them stops with a message and saves nothing. Every link, keyword and subreddit gets its own independent limit. The full list of fields is on the input schema page.

The prefilled example below starts with a subreddit link and one keyword. The prefill also sets the optional network setting, and every other field uses its default:

{
"startUrls": [{ "url": "https://www.reddit.com/r/technology/" }],
"searchTerms": ["artificial intelligence"]
}
FieldTypeRequiredDefaultDescription
startUrlsarrayNononePost, subreddit, user or search links.
searchTermsarray of stringsNononeOne keyword or phrase per line, each searched on its own.
searchPostsbooleanNotrueInclude posts in keyword search.
searchCommentsbooleanNofalseInclude comments in keyword search.
searchCommunitiesbooleanNofalseInclude subreddits in keyword search.
withinCommunitystringNoemptyLimit keyword search to one subreddit (name, r/name or link).
searchSortstringNonewrelevance, hot, top, new or comments.
searchTimestringNoallall, hour, day, week, month or year.
subredditUrlsarray of stringsNononeSubreddits to mine in full.
onlyWithFlairbooleanNofalseKeep only flaired posts.
includeNSFWbooleanNofalseInclude posts marked 18+.
postedAfterstring (date)NononeOnly posts from this UTC day onward.
postedBeforestring (date)NononeOnly posts up to the end of this UTC day.
commentedAfterstring (date)NononeOnly comments on or after this UTC date.
commentedBeforestring (date)NononeOnly comments on or before this UTC date.
crawlCommentsPerPostbooleanNofalseAdd the comment thread for every post found.
maxCommentsPerPostintegerNo10Comment cap per post, 0 to 500.
maxPostsCountintegerNo10Post cap per link, keyword or subreddit, 0 to 50,000.
maxCommentsCountintegerNo10Cap for comments found by keyword search and for comments on a user link.
maxCommunitiesCountintegerNo2Cap for communities found by keyword search.
proxyConfigurationobjectNodefaultNetwork settings. The default works for most runs.
maxRetriesintegerNo3Retries per request, 1 to 10.
requestDelayMinnumberNo1.0Shortest pause between requests in seconds, 0 to 10.
requestDelayMaxnumberNo2.5Longest pause between requests in seconds, 0 to 15.
postConcurrencyintegerNo3Posts whose comments load at once, 1 to 10.

Paste post, subreddit, user profile or search-result links into startUrls.

  • ✅ Good: https://www.reddit.com/r/technology/ returns posts from that subreddit, up to maxPostsCount.
  • ✅ Good: a post link returns that post, and its comments when crawlCommentsPerPost is on.
  • ✅ Good: a user link returns the profile, posts up to maxPostsCount and comments up to maxCommentsCount.
  • ❌ Bad: a link to a page that is not on Reddit. It is skipped with a message in the log.

Warning: With maxPostsCount set to 0, a subreddit link returns only the community row and no posts.

Search by keyword

Add keywords to searchTerms. Use searchPosts, searchComments and searchCommunities to choose what comes back, withinCommunity to stay inside one subreddit, and searchSort and searchTime to rank and limit results.

  • ✅ Good: searchSort set to new with searchTime set to week for recent mentions.
  • ✅ Good: withinCommunity set to one subreddit when you also switch on searchComments.
  • ❌ Bad: switching on searchComments and setting maxCommentsCount to 0. No comments are returned.

Warning: Searching comments across all of Reddit is not always available. If it returns nothing, set withinCommunity to search the comments of one subreddit.

Mine a full subreddit

Add names, r/name or links to subredditUrls to collect more posts from one community. Each post is saved once.

  • ✅ Good: AskReddit, r/AskReddit or https://www.reddit.com/r/AskReddit/.
  • ❌ Bad: a link to a single post or user. It is skipped with a message; put it in startUrls instead.

Warning: Raise maxPostsCount to match the size you want, because the default is 10 posts per subreddit.

Dates and limits

postedAfter and postedBefore use a UTC day such as 2026-01-01. Setting either one switches results to newest first.

  • ✅ Good: postedAfter and postedBefore together to keep a time window.
  • ❌ Bad: expecting maxPostsCount to be a shared total. Each link, keyword and subreddit has its own limit.

Output

Results go to the default Apify dataset. Export them as JSON, CSV, Excel, XML or HTML from the Dataset tab or the API. The Output tab shows five views: Overview, Posts, Comments, Communities and Users. Each row has a dataType, so one export can hold all four types. The values below are fake examples on example.com.

JSON example

A post row for the input above:

{
"dataType": "post",
"id": "t3_abc123",
"parsedId": "abc123",
"title": "Example post title",
"body": "Example post text.",
"bodyHtml": null,
"authorId": "t2_user01",
"parsedAuthorId": "user01",
"authorName": "example_user",
"communityName": "r/example",
"communityId": "t5_comm01",
"parsedCommunityId": "comm01",
"parsedCommunityName": "example",
"subredditName": "example",
"subredditId": "t5_comm01",
"parsedSubredditId": "comm01",
"postType": "text",
"flair": "Discussion",
"upVotes": 120,
"commentsCount": 14,
"postUrl": "https://www.example.com/r/example/comments/abc123/example_post/",
"url": "https://www.example.com/r/example/comments/abc123/example_post/",
"contentUrl": null,
"images": [],
"nsfw": false,
"score": 120,
"upvoteRatio": 0.96,
"subredditSubscribers": 250000,
"over18": false,
"isSelf": true,
"spoiler": false,
"locked": false,
"stickied": false,
"edited": false,
"editedAt": null,
"distinguished": null,
"scoreHidden": false,
"isOriginalContent": false,
"numCrossposts": 0,
"totalAwardsReceived": 0,
"gilded": 0,
"domain": "self.example",
"thumbnail": null,
"urlOverriddenByDest": null,
"authorFlairText": null,
"authorPremium": false,
"numDuplicates": 0,
"removedByCategory": null,
"removedBy": null,
"bannedBy": null,
"removalReason": null,
"modReasonTitle": null,
"isRobotIndexable": true,
"mediaType": "text",
"hasMedia": false,
"isVideo": false,
"isGallery": false,
"galleryCount": 0,
"galleryImages": [],
"mediaAssets": [],
"videoUrl": null,
"media": null,
"secureMedia": null,
"mediaMetadata": null,
"galleryData": null,
"ageHours": 5.5,
"scorePerHour": 21.82,
"commentsPerHour": 2.55,
"engagementTotal": 134,
"commentToScoreRatio": 0.12,
"isHighEngagement": true,
"titleLength": 18,
"bodyLength": 18,
"wordCount": 3,
"outboundUrlHost": null,
"createdAt": "2026-10-01T10:00:00+00:00",
"crawledAt": "2026-10-01T15:30:00+00:00",
"searchTerm": "artificial intelligence",
"dataSource": "live"
}

A comment row:

{
"dataType": "comment",
"id": "t1_def456",
"parsedId": "def456",
"postId": "abc123",
"parentId": "t3_abc123",
"linkId": "t3_abc123",
"depth": 0,
"body": "Example comment text.",
"bodyHtml": null,
"authorId": "t2_user02",
"authorName": "example_commenter",
"communityName": "r/example",
"subredditId": "t5_comm01",
"score": 15,
"scoreHidden": false,
"controversiality": 0,
"ups": 15,
"downs": 0,
"gilded": 0,
"totalAwardsReceived": 0,
"edited": false,
"isSubmitter": false,
"stickied": false,
"distinguished": null,
"locked": false,
"collapsed": false,
"collapsedReason": null,
"permalink": "https://www.example.com/r/example/comments/abc123/example_post/def456/",
"removalReason": null,
"createdAt": "2026-10-01T11:00:00+00:00",
"crawledAt": "2026-10-01T15:30:00+00:00",
"searchTerm": null,
"dataSource": "live"
}

A community row:

{
"dataType": "community",
"id": "t5_comm01",
"parsedId": "comm01",
"name": "example",
"namePrefixed": "r/example",
"title": "Example community",
"description": "Example description.",
"descriptionHtml": null,
"publicDescription": "Example public description.",
"subscribers": 250000,
"activeUserCount": 1200,
"over18": false,
"lang": "en",
"communityIcon": "https://www.example.com/icon.png",
"bannerImg": null,
"headerImg": null,
"keyColor": "",
"primaryColor": "",
"submitText": "",
"submissionType": "any",
"linkFlairEnabled": true,
"allowImages": true,
"allowVideos": true,
"allowGalleries": true,
"allowPolls": true,
"wikiEnabled": true,
"quarantine": false,
"restrictPosting": false,
"restrictCommenting": false,
"advertiserCategory": "",
"communityReviewed": false,
"subredditType": "public",
"createdAt": "2015-05-01T00:00:00+00:00",
"crawledAt": "2026-10-01T15:30:00+00:00",
"searchTerm": "artificial intelligence",
"dataSource": "live"
}

A user row:

{
"dataType": "user",
"id": "t2_user01",
"parsedId": "user01",
"username": "example_user",
"commentKarma": 4200,
"linkKarma": 900,
"awardeeKarma": 10,
"awarderKarma": 0,
"totalKarma": 5110,
"isGold": false,
"isMod": false,
"isEmployee": false,
"isBlocked": false,
"verified": true,
"hasVerifiedEmail": true,
"hasSubscribed": true,
"acceptFollowers": true,
"acceptChats": true,
"acceptPms": true,
"iconImg": "https://www.example.com/avatar.png",
"snoovatarImg": null,
"subredditDisplayName": "u_example_user",
"subredditTitle": "example_user",
"subredditSubscribers": 12,
"subredditPublicDescription": "",
"createdAt": "2020-01-01T00:00:00+00:00",
"crawledAt": "2026-10-01T15:30:00+00:00",
"dataSource": "live"
}

Run summary

When a run ends, the Actor also saves a run-summary record in the key-value store. It includes source, scrapedAt, searchTerms, directUrls, fullSubreddits, itemsSaved, posts, comments, communities, users, unreachableSources and durationSeconds, plus a few technical fields. The summary is not a billed result.

Notes and limitations

  • Each link, keyword and subreddit has its own maxPostsCount; limits are not shared between them.
  • A single Reddit listing returns about 6,000 posts at most, so very large pulls from one listing can return fewer than requested.
  • Fields Reddit hides or does not provide stay empty or null.
  • Some rows can have no score, comment count or flair, or show older counts. The dataSource field labels each row.
  • If nothing could be retrieved because Reddit was limiting requests, the run ends as failed with a plain message instead of succeeding with an empty dataset.
  • The run stops early if you abort it or reach your maximum spend. Saved rows are kept.

Tips and advanced usage

  • For many posts from one community, use subredditUrls and raise maxPostsCount; a date window with postedAfter keeps the run short.
  • Comment threads add run time. Keep maxCommentsPerPost low while you test and raise it when the output looks right.
  • Sort the dataset by scorePerHour or filter on isHighEngagement to see which posts are rising fast.
  • Use onlyWithFlair to keep only posts that carry a flair.
  • To scrape all comments from a Reddit post, paste its link into startUrls and switch on crawlCommentsPerPost.
  • Get Reddit comments by keyword with searchComments, and filter Reddit posts by flair with onlyWithFlair.
  • Scrape a Reddit user profile from a profile link, and get subreddit subscriber count from community rows.
  • Monitor a subreddit for new posts by scheduling runs with postedAfter.
  • Export subreddit posts to CSV, or send Reddit data to Excel for quick reviews.
  • Download Reddit posts to JSON as Reddit data for RAG, or use them for Reddit trend research.
  • If a run ends as failed because Reddit was limiting requests, start it again a little later.

Integrations and API

Can I use Reddit Scraper - Posts, Comments, Search & Subreddits as an API?

Yes. Start runs and read results with the Apify API, or use the apify-client libraries for Node.js and Python. The API tab shows ready-made calls for this Actor.

How to scrape Reddit with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/reddit-scraper-posts-comments-search-subreddits").call(run_input={
"startUrls": [{"url": "https://www.reddit.com/r/technology/"}],
"searchTerms": ["artificial intelligence"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["dataType"], item.get("title") or item.get("body"))

Can I integrate Reddit Scraper - Posts, Comments, Search & Subreddits with other apps?

Yes. Apify connects Actors to Make, Zapier, Google Sheets and Slack, and can send a webhook when a run finishes. You can also schedule runs hourly, daily or weekly. Combine a schedule with searchTime or postedAfter to collect only recent posts.

Can I use Reddit Scraper - Posts, Comments, Search & Subreddits with AI agents (MCP)?

Yes. Apify exposes Actors to MCP-compatible AI assistants. Open the MCP tab of this Actor for the connection details.


Other Reddit scrapers

ActorUse it to
💬 Reddit Post Comments ScraperScrape every comment from a Reddit post or thread, with nested replies, scores, authors and timestamps.
👽 Reddit Post & Subreddit ExtractorScrape Reddit posts, comments, communities and user profiles by keyword, URL or full subreddit.
🔗 X (Twitter) Scraper Unlimited – No LimitsScrape X (Twitter) posts, profiles, articles, threads and analytics from links, handles or search terms.
🔗 Google Trends : Trending Search ScraperScrape real-time Google Trends trending searches — search volume, growth %, categories, related queries and related news — one clean row per...
🔗 X (Twitter) Profile Posts ScraperScrapes posts from public X (Twitter) profiles without login.

FAQ

Scraping publicly available Reddit pages is generally treated differently from accessing private data, but the rules depend on your country, your purpose and how you handle personal data such as usernames. Review Reddit's terms and laws such as GDPR, and read Is web scraping legal?. This is not legal advice.

How does Reddit Scraper work?

You give it Reddit links, keywords or subreddit names plus limits and filters. The run collects public posts, comments, communities and user profiles that match, saves each row to the dataset as soon as it is ready, and writes a short run summary. Then you export the rows as JSON, CSV or Excel, or read them through the API.

Do I need a Reddit account, cookies or an API key?

No. The Actor needs no Reddit login, no cookies and no API key. You only need an Apify account. Paste links, keywords or subreddits, click Start and read the results from the dataset. Only public content that a logged-out visitor can see is collected, so private communities are not included.

Why scrape Reddit data?

Reddit holds honest discussion about products, tools and problems. Teams scrape it for brand monitoring, lead research, market research, customer feedback and sentiment analysis, or to build text datasets for AI projects. Scheduling the Actor turns one-off research into a steady feed of new posts and comments.

How many posts and comments can I get per run?

You decide with the limit fields. maxPostsCount accepts up to 50,000 per link, keyword or subreddit, and maxCommentsPerPost accepts up to 500 comments per post. Real totals depend on what Reddit shows for each source, and one listing returns about 6,000 posts at most. Speed is not guaranteed.

Can I export Reddit data to CSV or Excel?

Yes. Open the Dataset tab after a run and download the rows as JSON, CSV, Excel, XML or HTML. You can also pull them through the Apify API. Every row has a dataType, so you can filter a combined export into posts, comments, communities and users in a spreadsheet or a script.

Why am I getting fewer results than expected?

Common reasons are low limits (maxPostsCount defaults to 10), strict filters such as onlyWithFlair, date ranges, or includeNSFW being off. Reddit also hides some content and ends long listings early. Raise the limits, loosen the filters and try a full subreddit run through subredditUrls for more posts.

Reddit Scraper not working?

First check the run log, which explains skipped links and empty results in plain English. Confirm that your links are Reddit post, subreddit, user or search URLs and that at least one input is filled. If the problem continues, open the Issues tab on the Actor page with your run link and we will look into it.


Support and feedback

Found a bug or need a feature? Open an issue in the Issues tab. For custom solutions, integrations or questions, email hello.dataminds@gmail.com. Built and maintained by the data_minds team on Apify.

Reddit Scraper - Posts, Comments, Search & Subreddits is independent and not affiliated with Reddit; trademarks belong to their owners. It collects publicly available data only, and you are responsible for complying with applicable laws and the site's terms.