Reddit Scraper - Posts, Comments & Search avatar

Reddit Scraper - Posts, Comments & Search

Pricing

from $7.50 / 1,000 results

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

Reddit Scraper - Posts, Comments & Search

Scrape Reddit posts, comments, subreddits, user profiles and keyword search results. Filter by flair, score and date; export reply trees, text and media to JSON, CSV or Excel. No Reddit API key required. Run through the Apify API or connect n8n, Make and Zapier.

Pricing

from $7.50 / 1,000 results

Rating

5.0

(1)

Developer

Dev

Dev

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

3 hours ago

Last modified

Categories

Share

Reddit Scraper — Posts, Comments, Search and Flairs

Collect public Reddit posts, comments, subreddit feeds, keyword search results, user profiles and flair metadata. Export text, scores, dates, media and reply relationships to JSON, CSV or Excel, or connect the Actor to n8n, Make, Zapier and the Apify API.

This version includes operator-managed Reddit access. Customers do not need to supply Reddit cookies or configure a proxy. It uses Reddit's web-facing routes, not the official Reddit developer API, and is not affiliated with Reddit.

Quick start

  1. Choose What do you want to collect? (leave Auto for ordinary URLs).
  2. Enter Subreddits such as n8n, or use Reddit URLs instead.
  3. Optionally enter a keyword, then set Maximum output rows; start with 10. Choose Posts and their comments if you want reply trees.
  4. Start the Actor and inspect or export the dataset.
{
"subreddits": ["n8n"],
"sort": "new",
"maxItems": 10
}

Result pricing

Current status (September 8, 2026): $7.50 per 1,000 saved results for both ordinary and keyword scraping, plus the existing startup fee. The requested lower tariff below is not yet active or scheduled: Apify rejected its submission because pricing was changed too recently. The Actor's Pricing tab is authoritative; the billing code does not charge an unregistered keyword event.

The requested tariff is $3 per 1,000 ordinary results and $5 total per 1,000 keyword-search results, plus the existing Actor start event ($0.0005 at the default 512 MB; the number of start events scales with allocated memory). The table below describes this requested tariff, not the current one.

Activation: check this Actor's Pricing tab for the active tariff and any scheduled effective date. If Apify applies a notice period, the preceding tariff remains in effect until that date; a run uses the pricing snapshot assigned when it starts. Billing-capable builds (1.8 and later) apply the new split automatically when the keyword event becomes active. Use latest; older pinned builds do not implement the keyword surcharge.

Saved resultBase result chargeKeyword surchargeTotal per result
Ordinary subreddit/profile/post scraping, comment trees and flair metadata$0.003None$0.003
Post, community or user search-query results; comment keyword-search results$0.003$0.002$0.005

Keyword billing follows each result's source, including complete Reddit search URLs with a query. It does not depend on whether an ordinary scraped post happens to contain the word. In mixed-source runs, ordinary rows stay at the ordinary rate. Flat comments retrieved from searched posts inherit the search source rate; they are not necessarily keyword-matching comments unless you use Comment keyword search.

Only saved dataset rows are result-billed. Duplicates, filtered-out candidates, scanned pages and unavailable comments are not result-billed. A post containing nested comments/commentsFlat is one dataset row; nested replies are not billed separately. The start event still applies to runs returning no rows.

Apify may display two result events for keyword output: the base result event plus keyword-result. Their sum is $5/1,000, not $8/1,000. SUMMARY.billing reports row categories, active unit prices, and budget stops. Runs stop before another result would exceed the configured spending limit. Taxes or account-specific discounts, if any, are handled by Apify.

Supported sources

  • Subreddits: /r/n8n/new/, /hot/, /top/?t=week, /rising/ and /controversial/.
  • Direct posts: canonical Reddit post URLs or supported t3_ post identifiers.
  • Public user profiles: /user/username/ for profile details, /submitted/ for posts, /comments/ for comment history and /overview/ for mixed history.
  • Reddit keyword search: add a keyword to subreddit names or subreddit feed URLs to search within those communities. With no sources, the keyword runs a global search. Complete search URLs also work on their own.
  • Community details: /r/n8n/about/.
  • Flair templates: choose Flair templates with subreddit names, or use /r/n8n/flairs/.

Use an explicit public subreddit such as r/all instead of an account-personalized home feed. Use canonical post URLs rather than browser-resolved share links. Private, quarantined or unverified-visibility content is not returned through managed access.

Search, ranking and filters

{
"subreddits": ["n8n"],
"search": "workflow",
"sort": "top",
"time": "month",
"minScore": 5,
"maxItems": 25
}

Post searches support relevance, hot, top, new and most-comments ordering. Time windows include hour, day, week, month, year and all time. Without a keyword, explicit feed URL ordering takes precedence. Adding a keyword turns a subreddit feed into a search and uses Result order, not the feed's /new/ or /hot/ path. Explicit search URLs retain their own sort/time parameters. User histories and subreddit feeds support their respective Reddit sort options.

Post keywords use Reddit's indexed search semantics, not a guaranteed literal substring filter. Comment keyword search separately verifies literal matching against the full current comment body.

Simple form and existing JSON inputs

The main form has seven controls: collection mode, subreddits, URLs, keyword, row limit, result order and time range. Date/flair/score filters, comment-tree settings, comment matching and page limits are in optional collapsible sections. There is no prefilled subreddit URL to accidentally consume your search limit.

Legacy aliases and technical controls remain available in JSON, including searchMode, subreddit, profile, postUrls, maxPosts, postSort, timeRange, includeComments, outputFormat, flairId, excludeFlairs, authorFlair, discoverFlairs, includePromoted, skipRemoved, includePostBody, pageSize, repairMissing, repairThreshold and requestDelayMs. Managed access still rejects customer credentials/proxy overrides and custom code.

Migration note: combining a keyword with subreddit feeds now searches those communities. To intentionally retain the old independent URL jobs plus global search, supply "searchScope": "independent" in JSON. Those jobs still share one row cap and earlier sources may consume it. A keyword combined with a profile or direct post URL now produces a clear error instead of silently running an unrelated global search. All existing field names remain supported, but this ambiguous combined-input behavior is intentionally changed.

Available filters include post flair text or template ID, excluded flairs, author flair, minimum score, minimum comment count, before/after timestamps, NSFW selection and removed/deleted-comment exclusion. Filters are applied before consuming the output limit. Pagination continues until the cap, page limit or available listing ends.

{
"startUrls": ["https://www.reddit.com/r/n8n/new/"],
"flair": "Help",
"postedAfter": "2026-01-01",
"minComments": 2,
"maxItems": 20,
"endPage": 5
}

Comments and reply trees

{
"startUrls": ["https://www.reddit.com/r/SUBREDDIT/comments/POST_ID/TITLE/"],
"mode": "posts-and-comments",
"maxItems": 1,
"maxComments": 100,
"maxCommentsPerPost": 100,
"commentSort": "new"
}

Replace the placeholder with a real public post URL. Enriched posts contain comments and commentsFlat, retaining parent IDs, post context and depths. Comment sorts include confidence, top, new, controversial, old and Q&A. Reddit's displayed count may include replies that are deleted, removed, unavailable or not returned by its web routes.

For comment-only output, use mode: "comments" with postUrls or supported Start URLs and a comment limit. Original subreddit, profile, maxPosts, postUrls and maxComments inputs remain supported. Original non-URL posts-and-comments inputs retain flat post/comment rows; compatible URL inputs keep their nested output convention. Overlapping sources are deduplicated within a run.

Comment keyword search across subreddits

Available in version 1.6 and later. Earlier versions do not include this mode.

Use mode: "comment-search" (or searchMode: "comment") to search comment text directly, without first searching parent posts. Clear Start URLs and supply a literal keyword/phrase and subreddit names:

{
"mode": "comment-search",
"search": "workflow",
"subreddits": ["n8n", "automation"],
"keywordMatch": "whole-word",
"caseSensitive": false,
"sort": "new",
"time": "all",
"postedAfter": "2026-09-01T00:00:00Z",
"postedBefore": "2026-09-07T23:59:59.999Z",
"maxItems": 100,
"endPage": 20,
"maxScannedComments": 10000
}

Each dataset row is a verified, currently retrievable comment matching the keyword, subreddit and comment creation time, not the parent post's date. Older threads can contain recent matching comments. Only emitted matches consume maxItems and result-row charges. Candidates may be inspected internally without being emitted.

  • Matching: substring (default), Unicode-aware whole-word, or phrase (normalizes whitespace). Case-insensitive by default. Supply plain text without Reddit operators or surrounding quotes.
  • Dates: postedAfter and postedBefore are inclusive. Date-only values mean midnight UTC. time is an additional coarse Reddit search window; use all when exact date filters should be the only time restriction.
  • Limits: maxItems is global after filtering/deduplication; 0 removes this result cap. endPage defaults to 20 per subreddit; 0 removes the page cap. maxScannedComments defaults to 10000 globally and must remain finite. These limits do not imply full historical coverage.
  • Sorting: new (default), top, or relevance. Pages alternate between subreddits; combined output is not globally sorted across sources. A small result limit may be satisfied by the first source.
  • Coverage: SUMMARY includes per-source pages/scanned/emitted counts, unavailable candidates, remaining-page indicators and result-limit, scan-limit, page-limit or search-exhausted stop reasons. Search exhaustion means no further indexed results were exposed, not that every historical comment was found. Reddit controls page size: a fetched page may contain more candidates than the remaining scan budget. searchCandidatesReturned reports received candidates; scannedComments counts those processed within the budget, and unprocessedVerifiedComments reports any verified rows left unprocessed after the result cap.

Search snippets are rechecked against public comment data before output. Removed/unavailable comments are omitted. The mode does not expand reply trees. Post URLs, post/author flair filters, score filters, NSFW filters and custom output hooks are not supported in this mode; conflicting inputs are rejected rather than ignored. Missing Reddit fields remain null. Public visibility checks, TLS verification, pacing and fail-fast access handling still apply.

Reddit search controls which candidates are discoverable; this is not an exhaustive substring scan of a subreddit's history. Deleted, private, unindexed or inaccessible comments cannot be promised. Comment-search latency includes page retrieval and public-comment verification and differs from single-post benchmarks.

Output fields

Posts include IDs, title, text and HTML when available, author, subreddit, permalink, creation/edit times, scores, upvote ratio, comment count, flair IDs/text/colors, author flair, gallery/image/video links, flags and source context.

Comments include comment/post/parent IDs, author, text and HTML, score, timestamps, depth and post context. Profiles and community records have their own metadata fields. Flair records include label, template ID, rich text and colors. Fields that Reddit does not provide remain null rather than being invented. Owner-specific saved/vote/moderation details are stripped; removed content is not restored through account privileges.

Performance and limits

The lightweight HTTP build avoids launching Chromium. It saves the first result immediately, then batches subsequent dataset writes while scraping continues. The SUMMARY key-value record reports source progress, warnings, request timings, first-result timings, committed rows and dataset batch counts.

Earlier session-backed cloud tests returned single rows in about 3–7 seconds, including three concurrent runs in 2.66–3.15 seconds. A 25-row test took 3.35 seconds. These are small-workload observations, not a guaranteed response time or sustained-capacity claim. Additional visibility checks, comment expansion, filters, Reddit throttling and platform startup can increase runtime.

maxItems limits output across all sources in a run; nested comments use separate limits. endPage applies per source. Zero means no caller-specified cap, not guaranteed retrieval of every historical item. Reddit listing/search ceilings still apply. This HTTP release does not include the original browser-based deep-pagination fallback.

Managed access is initially intended for low-volume workloads. It enforces request pacing within each run and stops on authentication failures or rate limits. It does not automatically rotate accounts to retry blocked requests, and does not yet provide a distributed account-pool scheduler across customer runs. Expired operator sessions require operator maintenance.

Security and migration notes

Customer JavaScript hooks (customMapFunction and extendOutputFunction), customer cookies, proxy overrides, custom user agents and browser overrides are disabled in this managed release. They are rejected by runtime validation, not merely hidden in the UI. Remove those fields from old tasks/API inputs before running this version. Normal scraping filters, formats and limits remain available.

Operator credentials are stored as secret runtime configuration, not in public inputs, source files, datasets or build arguments. The Actor only reads public Reddit content and does not vote, post, message or modify accounts.

For programmatic use, start the Actor with your Apify token and the same JSON input, wait for completion or use a webhook, then retrieve its default dataset. See Apify run and build options.