Reddit Scraper — Posts, Comments & Search, $0.50 per 1K
Under maintenancePricing
from $0.50 / 1,000 results
Reddit Scraper — Posts, Comments & Search, $0.50 per 1K
Under maintenanceScrape Reddit posts and full comment threads: keyword search across Reddit or one subreddit, subreddit feeds, and comments from post URLs. Score, date and keyword filters keep junk off your bill. No Reddit account or API key. $0.50 per 1,000 results. Works in Claude, Cursor and ChatGPT via MCP.
Pricing
from $0.50 / 1,000 results
Rating
5.0
(4)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
4
Bookmarked
63
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Features
Share
Reddit Scraper
Scrape Reddit posts, and optionally full comment threads with replies: site-wide and subreddit search, subreddit feeds, post and comment date filters, NSFW toggle, strict phrase and token match. No Reddit account or API key needed. Legacy: deduplicated authors from subreddit listing URLs (key-value store).
How it works

Why Use This Scraper?
- Multiple starting points — site-wide keywords, one subreddit (search or feed browse), or legacy subreddit URLs for author collection.
- Post-shaped rows — search modes write one dataset item per post, with Reddit’s own nested
preview/mediawhen present. - Optional comments — separate dataset rows per comment, with configurable caps, including the replies Reddit folds behind "load more".
- Post filters that keep junk off your bill — score, comment and award floors and ceilings, upvote ratio, body length, post type (text / link / image / video / gallery), title / body / flair / author-flair matches, keyword exclusion, author allow and block lists, link domain, and one-click drops for stickied, locked, archived, spoiler, removed, deleted-author and crossposted rows. Rows that fail a filter are never written, so a filtered run only pays for what you asked for.
- Practical search options — NSFW toggle, post/comment date windows, strict phrase and token filters, “maximize coverage” budgets.
- Export-friendly — default Apify Dataset; download as JSON, CSV, Excel (CSV flattens nested keys with dots).
Overview
This actor is for research, monitoring, content analysis pipelines, and internal tools that need structured Reddit data without maintaining your own scraping stack.
- Search all of Reddit and Search one subreddit resolve into post rows in the dataset. Enable comments to add comment rows in the same dataset (
dataType: "comment", ids liket1_…). - Comments from post URLs (
postComments) takes specific post URLs and returns each post plus every comment on it (nested replies, including the ones Reddit folds behind "load more") — the focused "paste a thread, get its comments" flow. - User scraper (legacy) targets deduplicated usernames stored under the key-value key
API_DETAILS. The dataset is secondary in that mode.
The actor does not compute sentiment or topic categories; related input flags are ignored.
Supported Inputs
| You provide | When | Notes |
|---|---|---|
mode = searchGlobal | Site-wide search | Set searchQueries (string list). searchSort, searchTimeframe, includeOver18 apply. |
mode = searchSubreddit | One subreddit | subredditSearchUrl (https://…/r/name, r/name, or bare name). Empty subredditSearchQueries → feed listing; non-empty → in-subreddit search. |
mode = postComments | Comments from post URLs | postUrls — specific Reddit post URLs (e.g. https://www.reddit.com/r/webscraping/comments/1f64lbr/…). Returns each post plus all its comments (nested replies, including folded "load more" branches), capped by searchMaxCommentsPerPost. |
mode = subredditUsers | Legacy authors | startUrls — subreddit home URLs (e.g. https://www.reddit.com/r/webscraping). |
maxItems | All modes | Search: max posts (split across keyword lines). Legacy: max unique authors. |
proxy | All modes | Optional. Residential proxies recommended. The default works out of the box. |
Search options in the Console schema also include: searchIncludeComments, searchMaxCommentsPerPost, searchListingLimitPerPage, searchPostDateFrom / searchPostDateTo, searchCommentDateFrom / searchCommentDateTo, searchForceNewSortWhenDateFiltered, searchStrictPhrase, searchStrictTokenFilter, searchMaximizeCoverage, maxConcurrency / minConcurrency / maxRequestRetries (legacy crawler), etc.
Advanced (JSON input only): searchHttpTransport: "oauth" with your own Reddit app in redditClientId / redditClientSecret, and searchParallelQueryConcurrency (keyword lines run at once). Legacy aliases still read in code: queries, maxPosts, includeNsfw, scrapeComments, maxComments, dateFrom / dateTo, forceSortNewForTimeFilteredRuns, strictSearch, strictTokenFilter, maximize_coverage.
Not supported: logged-in sessions, guaranteed access to private communities, compliance with your jurisdiction’s rules for Reddit data (your responsibility).
Use Cases
| Audience | Typical use |
|---|---|
| Researchers | Post and comment samples for NLP or social science. |
| Marketing & brand | Mention tracking, campaign feedback, subreddit tone. |
| Agencies | Client-ready Reddit exports on a schedule. |
| Product & data teams | Dashboards fed from Dataset webhooks. |
| Developers | Structured Reddit data without running your own scraper. |
How It Works
- Choose
modeand fill only the inputs that apply (Console sections match this). - The actor collects the matching posts (subreddit feeds, site-wide and subreddit search) and, when asked, their comment threads. No Reddit account or API key is involved, and failed requests are retried automatically.
- Each accepted post is mapped to a flat row (legacy Reddit field names plus optional merged aliases such as
dataType,scrapedAt,thread_url). - If
searchIncludeCommentsis on, the actor also collects each post's comment thread, including replies Reddit folds behind "load more", up to the per-post limit. - You export the Dataset (and for legacy mode, read
API_DETAILSfrom the Key-value store).
Input Configuration
Search all of Reddit (minimal):
{"mode": "searchGlobal","searchQueries": ["Cheesecake"],"searchSort": "relevance","searchTimeframe": "all","includeOver18": false,"maxItems": 100,"searchIncludeComments": false}
Search one subreddit:
{"mode": "searchSubreddit","subredditSearchUrl": "https://www.reddit.com/r/technology","subredditSearchQueries": ["api"],"subredditSearchSort": "relevance","subredditSearchTimeframe": "all","maxItems": 50}
Search with post filters — only well-received text posts, no pins, about GPUs:
{"mode": "searchGlobal","searchQueries": ["best budget gpu"],"maxItems": 200,"minScore": 50,"minComments": 20,"postType": "text","excludeStickied": true,"titleContains": ["gpu", "graphics card"],"excludeKeywords": ["giveaway", "for sale"]}
Post filters
All optional. They run on each post after Reddit returns the page, so they narrow the dataset rather than the number of pages fetched. Leave a field empty to not filter on it. NSFW is governed by the existing includeOver18 toggle, which sets Reddit's request flag and the row filter together.
| Field | Keeps a post when… |
|---|---|
minScore / maxScore | score (upvotes − downvotes) is within the bounds |
minComments / maxComments | comment count is within the bounds |
minUpvoteRatio | upvote ratio is at least this (percent: 90 = 90 % upvoted) |
minAwards | it received at least this many awards |
minContentLength / maxContentLength | body length in characters is within the bounds |
postType | it is a text, link, image, video or gallery post, by Reddit's own flags |
titleContains / contentContains | title / body contains any of the listed words or phrases (case-insensitive) |
flairContains / authorFlairContains | link flair / author flair contains any of the listed values |
domainContains | the linked domain contains any of the listed values (youtube, github.com) |
excludeKeywords | title and body contain none of the listed values |
authors / excludeAuthors | the author is / is not in the list |
onlyWithFlair / onlyOriginalContent / onlyDistinguished | it has a flair / is marked OC / is by a moderator or admin |
excludeStickied / excludeLocked / excludeArchived / excludeSpoilers | it is not pinned / locked / archived / spoiler-tagged |
excludeRemoved / excludeDeletedAuthor / excludeCrossposts | its body was not removed, its author is not deleted, it is not a crosspost |
User scraper (legacy) — author list:
{"mode": "subredditUsers","startUrls": [{ "url": "https://www.reddit.com/r/webscraping" }],"maxItems": 500}
Output Overview
- Dataset — one JSON object per line item. Search runs are mostly
kind: "post"rows. Comments, when enabled, are additional items withdataType: "comment". - Legacy user mode — primary output is
API_DETAILS(unique usernames) in the default key-value store, not the same post schema. - Downloads — Apify offers JSON, CSV, Excel, etc. Nested objects (e.g.
preview.images) flatten in CSV. - Honest variability — Reddit omits or nulls fields by post type (text vs link vs gallery, removed authors, ads). Keys are stable when the mapper adds them; values are not.
Output Samples
Shortened post object (real shape; preview…resolutions trimmed for readability). The first record in repo data.json shows the full resolutions ladder.
{"kind": "post","query": "Cheesecake","id": "futnih","title": "Different kinds of cheesecake","body": "","author": "cttrv","score": 43222,"upvote_ratio": 0.95,"num_comments": 1204,"subreddit": "coolguides","created_utc": "2020-04-04T13:23:45.000Z","url": "https://i.redd.it/tczgv8mgysq41.jpg","permalink": "/r/coolguides/comments/futnih/different_kinds_of_cheesecake/","canonical_url": "https://www.reddit.com/r/coolguides/comments/futnih/different_kinds_of_cheesecake/","old_reddit_url": "https://old.reddit.com/r/coolguides/comments/futnih/different_kinds_of_cheesecake/","flair": null,"post_hint": "image","over_18": false,"is_self": false,"spoiler": false,"locked": false,"is_video": false,"domain": "i.redd.it","thumbnail": "https://b.thumbs.redditmedia.com/BjwCwDT6OG40X5VFEYWsYSUJ_lrLZvUZizm4q_WG8hk.jpg","subreddit_id": "t5_310rm","subreddit_name_prefixed": "r/coolguides","subreddit_subscribers": 6028638,"preview": {"images": [{"source": {"url": "https://preview.redd.it/tczgv8mgysq41.jpg?auto=webp&s=7b17fbc8e9050ee4b242f7ece7de63ae7b0ee43b","width": 1200,"height": 1200},"resolutions": [{"url": "https://preview.redd.it/tczgv8mgysq41.jpg?width=108&crop=smart&auto=webp&s=f1107cc1f996a0013ad8b321c6453442d5f576ea","width": 108,"height": 108},{"url": "https://preview.redd.it/tczgv8mgysq41.jpg?width=216&crop=smart&auto=webp&s=4f45cf02c049215a7462669b4e25268aba62ff49","width": 216,"height": 216}],"variants": {},"id": "FJE3K_tyrkJobmnqvZME7_YGilzr4GXSmCvMUqExuhU"}],"enabled": true},"media_metadata": null,"media": null}
Comment row (when searchIncludeComments is true) — illustrative:
{"id": "t1_xyz789","parsedId": "xyz789","dataType": "comment","query": "Cheesecake","url": "https://www.reddit.com/r/Baking/comments/abc123/title/def456/","postId": "t3_abc123","parentId": "t3_abc123","username": "commenter","body": "Comment text","createdAt": "2025-01-15T14:00:00.000Z","scrapedAt": "2026-04-16T10:00:01.000Z","upVotes": 3,"numberOfreplies": 0}
Full-field sample
For every key on the first object in data.json (including all preview.images[0].resolutions[] entries), inspect that file in the repository or re-export from a fresh run. Newer runs may add merged compatibility fields (dataType, scrapedAt, reddit_fullname, thread_url, imageUrls, …) not present in older exports.
Key Output Fields
| Group | Examples | Meaning |
|---|---|---|
| Identity | kind, id, query | Post vs comment, short id, search line. |
| Content | title, body, author, created_utc | Headline, selftext, author, ISO time. |
| Engagement | score, upvote_ratio, num_comments | Reddit score, ratio, comment count. |
| Community | subreddit, subreddit_name_prefixed, subreddit_id, subreddit_subscribers | Bare name, r/…, t5_…, subscriber snapshot. |
| URLs | url, permalink, canonical_url, old_reddit_url | Outbound link, path, www thread, old.reddit thread. |
| Flags | over_18, is_self, spoiler, locked, is_video, post_hint | NSFW, text post, spoiler, lock, video, render hint. |
| Media | thumbnail, preview, media_metadata, media | Thumb; nested previews; gallery dict; embed. |
| Job context | search_scope, subreddit_search, subreddit_fetch_mode, sorts | When the mapper adds subreddit/global metadata. |
| Compatibility | dataType, scrapedAt, reddit_fullname, parsedId, username, upVotes, thread_url, imageUrls | Extra aliases on the same object for downstream tools. |
Comments: postId, parentId, communityName, category, html, authorFlair, userId, etc.
FAQ
Which URLs work?
searchGlobal uses keywords, not URLs. searchSubreddit needs a subreddit URL or r/name. subredditUsers needs subreddit home URLs in startUrls.
Posts or users?
Search modes → posts (+ optional comments). Legacy mode → usernames in API_DETAILS.
Are comments always in the dataset?
No. Turn on searchIncludeComments (or legacy scrapeComments). maxItems caps posts only; use searchMaxCommentsPerPost / maxComments for comment volume.
Why are some fields null?
Data is whatever Reddit returns for that post type and state.
Private or logged-in content?
Not supported: public posts and comments only.
Sentiment or categories?
Not implemented.
Support
- Issues — use the Issues tab for this actor in the Apify Console.
- Website — https://muhamed-didovic.github.io/
- Email — muhamed.didovic@gmail.com
- Store — https://apify.com/memo23
Additional Services
- Customization or full dataset delivery: muhamed.didovic@gmail.com
- Other scraping needs or actor changes: muhamed.didovic@gmail.com
- API-style usage: muhamed.didovic@gmail.com
Explore More Scrapers
Browse the author’s Apify store: https://apify.com/memo23
Reddit API alternative — works in Claude, Cursor & ChatGPT
No Reddit API keys, no app registration, no quota paperwork. This actor returns public Reddit posts and comments as structured rows, so it's a drop-in Reddit API alternative for market research, brand/complaint monitoring, and idea validation. Because it runs on Apify, it's automatically available over Apify's MCP server — call it as a tool directly from Claude, Cursor, ChatGPT, VS Code, or any MCP client, and pipe subreddit posts and comment threads straight into your agent or app.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/reddit-scraper).
Purpose: Scrapes public Reddit posts and (optionally) full comment threads — site-wide keyword search, single-subreddit search or feed browse, and comments-from-post-URLs — with no Reddit API key or OAuth.
Minimal input:
{"mode": "searchGlobal","searchQueries": ["cheesecake"],"maxItems": 25}
For other modes: searchSubreddit uses subredditSearchUrl (empty subredditSearchQueries browses the feed), postComments uses postUrls, and subredditUsers (legacy) uses startUrls.
Output: one dataset row per post — kind, query, id, title, body, author, score, upvote_ratio, num_comments, subreddit, created_utc, url, permalink, canonical_url, old_reddit_url, flair, post_hint, over_18, is_self, spoiler, locked, is_video, domain, thumbnail, subreddit_id, subreddit_name_prefixed, subreddit_subscribers, preview {images}, media_metadata, media. Comment rows carry id (t1_…), parsedId, dataType, query, url, postId, parentId, username, body, createdAt, scrapedAt, upVotes, numberOfreplies.
Behaviors an agent should know:
modeis required and selects which input block is read; sections for other modes are ignored at runtime.maxItemscaps posts in search modes (split across keyword lines) and unique authors in legacy user mode; default 100 — always set it.searchIncludeComments: trueadds comment rows to the same dataset;maxItemsstill caps posts only, andsearchMaxCommentsPerPost(default 200) caps per post.- Date filters (
searchPostDateFrom/To) and strict phrase/token toggles are applied to each post before it is written. - Post filters (
minScore,postType,titleContains,excludeStickied, …) also run client-side per post; a run with none set skips them entirely. See Post filters above for the full list. - Legacy
subredditUsersmode writes usernames (API_DETAILS) to the key-value store, not the post schema in the dataset. - Pay-per-event billing — see the Pricing tab on the actor page.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Reddit, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available Reddit posts and comments — no authenticated endpoints, private subreddits, paid features, or content behind the Reddit login wall. Users are responsible for ensuring their use complies with Reddit's Terms of Service and User Agreement, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.
SEO Keywords
Reddit scraper, Reddit API alternative, Reddit API, scrape Reddit, Reddit posts scraper, Reddit comments scraper, subreddit scraper, Reddit search, Reddit data, Reddit MCP, Reddit for Claude, Reddit for Cursor, Reddit for ChatGPT, MCP Reddit tool, Reddit market research, Reddit brand monitoring, Reddit complaints, Reddit pain points, Reddit idea validation, no-auth Reddit scraper, Reddit without API key.