Reddit Scraper: Posts, Comments, Search & AI Sentiment avatar

Reddit Scraper: Posts, Comments, Search & AI Sentiment

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Reddit Scraper: Posts, Comments, Search & AI Sentiment

Reddit Scraper: Posts, Comments, Search & AI Sentiment

Scrape Reddit posts, comments and user profiles from any subreddit, search query or URL. Get score, upvote ratio, awards, media, flair, author karma and optional AI sentiment and summaries. Fast HTTP-only Reddit API. Export JSON, CSV or Excel.

Pricing

from $2.00 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

21 hours ago

Last modified

Share

Reddit Posts & Comments Scraper

Reddit Posts & Comments Scraper

Here is one real result, with the optional AI and author-profile add-ons enabled, showing every field the actor returns:

{
"recordType": "post",
"id": "1vwihzi",
"subreddit": "technology",
"subredditId": "t5_2qh16",
"subredditPrefixed": "r/technology",
"subredditType": "public",
"title": "Cheap 'Guardian' interceptors developed by Florida start-up could turn tables on Iranian drones",
"author": "Stukwan",
"authorId": "t2_4m79xcva",
"authorFlairText": null,
"selftext": null,
"body": null,
"postType": "link",
"url": "https://www.jpost.com/defense-and-tech/article-906338",
"permalink": "https://www.reddit.com/r/technology/comments/1vwihzi/cheap_guardian_interceptors_developed_by_florida/",
"domain": "jpost.com",
"score": 64,
"upvoteRatio": null,
"numComments": 42,
"numCrossposts": 0,
"totalAwards": 0,
"rank": 1,
"isSelf": false,
"isGallery": false,
"isNsfw": false,
"isSpoiler": false,
"isPinned": false,
"isLocked": false,
"isArchived": false,
"isEdited": false,
"distinguished": null,
"isOriginalContent": false,
"promoted": false,
"whitelistStatus": "all_ads",
"thumbnail": "https://external-preview.redd.it/lkz74R3cUYq-x8sAheK2a0cSGTKyn3wegD7eVFqm5RQ.jpeg?width=140&height=78",
"mediaUrl": "https://external-preview.redd.it/lkz74R3cUYq-x8sAheK2a0cSGTKyn3wegD7eVFqm5RQ.jpeg?width=140&height=78",
"mediaUrls": ["https://external-preview.redd.it/lkz74R3cUYq-x8sAheK2a0cSGTKyn3wegD7eVFqm5RQ.jpeg?width=140&height=78"],
"createdAt": "2026-08-23T20:46:06.000Z",
"observedAt": "2026-08-26T05:43:25.974Z",
"authorKarma": 27297,
"authorPostKarma": 25412,
"authorCommentKarma": 1885,
"authorCakeDay": "2019-09-18T19:49:49+00:00",
"aiSentiment": "positive",
"aiSentimentScore": 0.7,
"aiSentimentRationale": "The post highlights affordable interceptors that could counter Iranian drones, suggesting a promising advancement in defense technology.",
"aiSummary": "A Florida start-up has developed affordable 'Guardian' interceptors that could counter Iranian drones, potentially changing drone warfare.",
"error": null
}

The most complete Reddit scraper on Apify. It returns every field Reddit exposes for each post and comment (score, upvote ratio, award counts, crosspost count, media URLs, flair, NSFW, spoiler, lock, archive, edit, pinned and OC flags), and adds fields competitors do not: post-author karma and cake day, plus optional AI sentiment and AI summaries computed in the same run. Fifteen input filters (subreddit feeds, Reddit search, direct post and user URLs, five sort orders including controversial, time window, post type, minimum score, comment depth and sort, NSFW toggle and a date range) let you target exactly the posts and comments you need. This is an HTTP-only scraper, so runs are fast and do not spend a browser-tier compute charge on your account.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

This is a Reddit scraper and Reddit data API: it pulls posts and comments from any subreddit feed, from a Reddit search query, or from direct post and user URLs, applies the filters you pass as input, and writes one normalized record per post to the run's dataset. When Include Comments is enabled it also fetches each post's full comment tree (with reply depth and parent id) and emits one record per comment. Timestamps are normalized to ISO 8601, missing source values are returned as null, and every post carries its full set of Reddit flags (self, link or media type, NSFW, spoiler, locked, archived, edited, pinned, original content) plus score, upvote ratio, comment count and crosspost count so you can sort and filter without extra parsing.

Record types written to the dataset: post records and, when a direct user URL is scraped, user records (both charged as the result event); comment records (charged as the details event). Use recordType to tell them apart. Optional paid add-ons enrich each post in place: scrapeUserProfiles adds the author's karma and cake day, analyzeSentiment adds an AI sentiment label and score, and summarizePost adds a one-line AI summary.

How we compare

Reddit scrapers on Apify differ mostly in how many fields they return and whether they run in a browser. Here is an honest comparison with the most-used alternatives.

scrapers_lat/reddit-scraper (this actor)trudax/reddit-scraper-litetrudax/reddit-scraperbovi/reddit-scraper
Posts + full comment treesYesYesYesYes
Subreddit feed + search + direct URLsYesYesYesYes
Sort ordershot, new, top, rising, controversialhot, new, top, relevance, commentshot, new, top, relevance, commentshot, new, top
Upvote ratio, crosspost count, award countYesPartialPartialPartial
Post-author karma + cake day (inline)Yes (add-on)NoNoSeparate user records
AI sentiment + AI summary in the same runYes (add-on)NoNoNo
Comment depth + comment sort filtersYesPartialPartialPartial
EngineHTTP-only (fast, no browser charge)Headless browserHeadless browserHTTP
Price per 1,000 postsabout $2.00$3.40$45/month rental + usage$1.50
AdoptionNewer, growingLargest (about 39k users)About 14k usersSmaller

Where competitors win, honestly: trudax/reddit-scraper-lite has by far the largest user base and the longest track record, and bovi/reddit-scraper lists a lower per-result price and MCP support. Choose this actor when you want the richest per-post field set (upvote ratio, crosspost and award counts, author karma) and optional AI sentiment or summaries computed in the same run, without paying a browser-tier compute charge.

Use cases

  • Market and sentiment research. Pull posts and comments for a product, ticker or topic across subreddits, then turn on analyzeSentiment to score how the community feels without a separate NLP step.
  • Brand and reputation monitoring. Track mentions of your brand or competitors with search mode, filter by minScore to focus on posts gaining traction, and use createdAfter for daily monitoring.
  • Trend and topic discovery. Read top, rising and controversial feeds with a time window to surface what is breaking out in a niche.
  • Lead generation and audience research. Capture the authors behind high-scoring posts and, with scrapeUserProfiles, their karma and account age to qualify active, credible community members.
  • Content sourcing and curation. Collect the highest-scoring posts and their media URLs for newsletters, dashboards or content pipelines.
  • AI training and RAG datasets. Export clean JSON, CSV or Excel of posts and threaded comments to build datasets for models and retrieval systems.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 hottest posts in r/technology plus their top comments.

{
"maxPosts": 10,
"includeComments": true,
"mode": "subreddit",
"subreddits": ["technology"],
"sort": "hot",
"time": "day",
"commentsLimit": 10,
"commentSort": "top",
"postType": "any",
"excludeNsfw": false
}

Set includeComments to false to collect posts only. Switch mode to search and set searchQuery to query across Reddit instead of reading a subreddit feed.

Input reference

Every field is optional. With an empty input the actor reads the default subreddit feed.

FieldTypeRequiredDefaultDescription
maxPostsintegerno10Maximum number of posts to collect across all sources.
includeCommentsbooleannotrueWhen enabled, also fetch each post's comments and emit one record per comment.
modeenumnosubredditWhere to read posts from: subreddit (a community feed) or search (a query across Reddit).
subredditsstring[]no["technology"]Subreddit names to scrape when mode is subreddit. Enter names without the r/ prefix, for example technology, worldnews.
startUrlsstring[]no(empty)Direct Reddit URLs to scrape: post links (.../comments/...), subreddit links (reddit.com/r/name) or user profiles (reddit.com/user/name). Works alongside or instead of the mode inputs.
searchQuerystringno(empty)Search terms to query when mode is search, for example artificial intelligence.
searchSubredditstringno(empty)When mode is search, restrict the search to this single subreddit (name without r/). Empty searches all of Reddit.
sortenumnohotSort order. Subreddit mode: hot, new, top, rising, controversial. Search mode: relevance, new, top, comments.
timeenumnodayTime window for top sort and search: hour, day, week, month, year, all. Ignored for hot, new and rising.
commentsLimitintegerno50Maximum comments to collect per post when Include Comments is enabled.
commentSortenumnotopHow comments are ordered on each post: best, top, new, controversial, old, qa.
maxCommentDepthintegerno(all)Only keep comments up to this reply nesting depth (0 = top-level only). Empty keeps all depths.
minScoreintegerno(none)Skip posts whose net vote score is below this number. Empty keeps every post.
postTypeenumnoanyKeep only one kind of post: text (self posts), link (external links) or media (image, gallery or video). any keeps all.
excludeNsfwbooleannofalseWhen enabled, posts flagged NSFW (over 18) are skipped.
createdAfterstringno(none)Keep only posts created on or after this date, for example 2026-01-01 or a full ISO timestamp.
createdBeforestringno(none)Keep only posts created on or before this date, for example 2026-06-30 or a full ISO timestamp.
scrapeUserProfilesbooleannofalsePaid add-on (paid Apify plans only). Add each post author's karma, cake day and verified/gold flags to the post record. Charged only when a profile is genuinely fetched.
analyzeSentimentbooleannofalsePaid add-on. Add an AI sentiment label (positive / neutral / negative), score and rationale per post. Charged only on usable AI output.
summarizePostbooleannofalsePaid add-on. Add a one to two sentence AI summary per post. Charged only on usable AI output.

Output reference

One dataset item per post or per comment. Use recordType to distinguish them. Types: string, integer, number, boolean, string[], or null when the source value is absent.

FieldTypeDescription
recordTypestringpost, comment or user.
idstringReddit thing id of the post or comment.
namestringUsername (user records from a direct user URL).
titlestringPost title (post records).
selftextstringBody text of a self (text) post, or null.
bodystringComment text (comment records), or null.
subredditstringSubreddit name without prefix.
subredditIdstringReddit subreddit id (t5_...).
subredditPrefixedstringSubreddit name with r/ prefix.
subredditTypestringSubreddit type, for example public.
authorstringUsername of the post or comment author.
authorIdstringReddit author id (t2_...).
authorFlairTextstringAuthor flair text, or null.
postTypestringtext, link or media (post records).
urlstringOutbound or content URL of the post.
permalinkstringFull reddit.com permalink of the post or comment.
domainstringDomain of the linked content.
scoreintegerNet vote score.
upvoteRationumberFraction of votes that are upvotes (post records).
numCommentsintegerComment count on the post.
numCrosspostsintegerNumber of crossposts.
totalAwardsintegerTotal awards received.
rankintegerPosition of the post within the collected feed.
linkFlairstringRaw link flair, or null.
linkFlairTextstringHuman-readable link flair text, or null.
isSelfbooleantrue for text (self) posts.
isGallerybooleantrue for gallery posts.
isVideobooleantrue for native video posts.
isNsfwbooleantrue when the post is flagged NSFW.
over18booleanReddit over_18 flag.
isSpoilerbooleantrue when marked spoiler.
spoilerbooleanRaw spoiler flag.
isPinnedbooleantrue when pinned.
isLockedbooleantrue when the post is locked.
lockedbooleanRaw locked flag.
isArchivedbooleantrue when archived.
archivedbooleanRaw archived flag.
isEditedbooleantrue when the post or comment was edited.
editedAtstringISO 8601 edit timestamp, or null.
distinguishedstringDistinguished marker (moderator, admin), or null.
isOriginalContentbooleantrue when marked OC.
promotedbooleantrue when the post is a promoted/ad unit.
whitelistStatusstringReddit ad-whitelist status, for example all_ads.
thumbnailstringThumbnail image URL, or null.
mediaUrlstringPrimary media URL, or null.
mediaUrlsstring[]All media URLs on the post.
numRepliesintegerNumber of direct replies (comment records).
postIdstringParent post id (comment records).
postTitlestringParent post title (comment records).
parentIdstringReddit id of the parent thing (comment records).
depthintegerReply nesting depth (comment records; 0 = top-level).
isSubmitterbooleantrue when the comment author is the post's OP.
isStickiedbooleantrue when the comment is stickied.
createdAtstringISO 8601 creation timestamp.
observedAtstringISO 8601 timestamp of when the record was collected.
authorKarmaintegerAuthor total karma (post + comment). Populated only with the scrapeUserProfiles add-on, else null.
authorPostKarmaintegerAuthor post (link) karma, with the scrapeUserProfiles add-on.
authorCommentKarmaintegerAuthor comment karma, with the scrapeUserProfiles add-on.
authorCakeDaystringAuthor account creation date (ISO 8601), with the scrapeUserProfiles add-on.
authorIsVerifiedbooleantrue when the author account is verified, else null.
authorIsGoldbooleantrue when the author has Reddit premium/gold, else null.
aiSentimentstringpositive, neutral or negative. Populated only with the analyzeSentiment add-on, else null.
aiSentimentScorenumberSentiment score from -1 to 1, with the analyzeSentiment add-on.
aiSentimentRationalestringOne-line explanation of the sentiment, with the analyzeSentiment add-on.
aiSummarystringOne to two sentence AI summary of the post, with the summarizePost add-on.
errorstringnull on success. On a failed source, a single item with a populated error field is written instead.

Example output record

Real comment record from the same run (input {"subreddits": ["technology"], "includeComments": true}):

{
"recordType": "comment",
"id": "p2tcd3h",
"body": "Anyone remember all the \"dating coaches\" in the early 2000s? What's old is new again.",
"author": "RottenPingu1",
"authorId": "t2_vr2wdzpw",
"authorFlairText": null,
"score": 503,
"totalAwards": 0,
"numReplies": 0,
"postId": "1vkhkcw",
"postTitle": "The 'Manosphere' Isn't a Movement. It's a Multibillion-Dollar Grievance Industry | Many young men are driven to resentment and are financially exploited as influencers sell them classes, pills, and the illusion of clout, a new report reveals.",
"subreddit": "technology",
"subredditId": "t5_2qh16",
"subredditType": "public",
"parentId": "t3_1vkhkcw",
"depth": 0,
"isSubmitter": false,
"isStickied": false,
"isEdited": false,
"editedAt": null,
"distinguished": null,
"permalink": "https://www.reddit.com/r/technology/comments/1vkhkcw/the_manosphere_isnt_a_movement_its_a/p2tcd3h/",
"createdAt": "2026-08-10T11:20:25+00:00",
"observedAt": "2026-08-10T14:40:49.980Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~reddit-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"subreddit","subreddits":["technology"],"sort":"hot","maxPosts":25,"includeComments":false}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~reddit-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"search","searchQuery":"artificial intelligence","sort":"top","time":"week","maxPosts":100,"analyzeSentiment":true}'

Apify CLI:

apify call scrapers_lat/reddit-scraper \
--input '{"subreddits":["worldnews"],"sort":"top","time":"day","includeComments":true,"commentsLimit":20}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. Post and user records are charged as the result event; comment records are charged as the details event. See the pricing tab for the current per-record prices.
  • Optional add-on events. scrapeUserProfiles charges a user_profile event only when an author profile is genuinely fetched; analyzeSentiment and summarizePost charge ai_sentiment and ai_summary events only when the model returns usable output. All three are off by default.
  • No charge on failure. If a source errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing. An add-on that returns nothing is never charged.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable records.
  • Free Apify plans are capped at 10 posts per run, and the paid add-ons are disabled for free accounts. Upgrade for higher maxPosts and the enrichment add-ons.
  • Comments are optional. Set includeComments to false to collect and pay for posts only.

FAQ and troubleshooting

A run returned 0 records. Why? The subreddit is empty or private, the search matched nothing, or your filters (for example minScore, postType, excludeNsfw or the date range) excluded everything. Loosen the filters or confirm the subreddit name. Zero-result runs are not charged.

How do I collect posts without comments? Set includeComments to false. Only post records are written and only the result event is charged.

What is the difference between subreddit mode and search mode? Subreddit mode reads a community feed (r/<name>) using hot, new, top, rising or controversial. Search mode queries across Reddit (or a single subreddit via searchSubreddit) using relevance, new, top or comments.

How do I limit comment depth? Set maxCommentDepth. 0 keeps only top-level comments; a higher number keeps deeper replies. Leave it empty to keep the full tree up to commentsLimit.

Why is selftext null on some posts? Only text (self) posts carry selftext. Link and media posts have their content in url, mediaUrl and mediaUrls instead.

How do I get sentiment or summaries? Turn on analyzeSentiment and summarizePost (paid Apify plans). Each post then carries aiSentiment, aiSentimentScore, aiSentimentRationale and aiSummary. These run in the same pass, so you do not need a second tool or a separate NLP pipeline.

Can I scrape specific posts or a user by URL? Yes. Put post links, subreddit links or user profile links in startUrls. Post links return the full post plus comments; user links return a user record with karma and cake day. For bulk user-history scraping, see the dedicated Reddit User Scraper.

Is it fast? Does it use a browser? It is HTTP-only, so it does not launch a headless browser and does not add a browser-tier compute charge to your account. Reddit rate-limits automated traffic, so the actor routes through rotating residential IPs and retries when Reddit serves its interstitial. Occasionally a single source can still be rate-limited within a run; that source is written as an error item and is not charged, and re-running usually clears it.

Is this an official Reddit tool? No. This actor is independent and has no affiliation with Reddit. It reads only data that is publicly available on Reddit. Use it in accordance with Reddit's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Reddit. Accesses only publicly available Reddit data. Use in accordance with Reddit's terms.