Reddit Scraper — Posts & Comments | from $2/1K avatar

Reddit Scraper — Posts & Comments | from $2/1K

Pricing

from $1.94 / 1,000 reddit results

Go to Apify Store
Reddit Scraper — Posts & Comments | from $2/1K

Reddit Scraper — Posts & Comments | from $2/1K

Collect public Reddit posts and comments from the Arctic Shift archive. Get structured records with scores, timestamps, links, authors, and quality fields. Run with subreddit or user targets; no buyer API key or OAuth login. Pricing: $0.002 per Reddit result on Free, plus $0.00005 per Actor Start.

Pricing

from $1.94 / 1,000 reddit results

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

180

Total users

54

Monthly active users

32 minutes ago

Last modified

Features

Limited permissions

Share

Reddit Scraper for Posts, Comments, and Users

Reddit Scraper extracts public Reddit posts, comments, and user activity from the Arctic Shift Reddit archive into flat records with 25+ fields. No buyer API key, OAuth login, or proxy is required; Free-plan runs return at most 10 records.

  • Monitor brands, products, and discussions across subreddits.
  • Find product questions for lead generation and sentiment analysis.
  • Export scores, timestamps, links, authors, flair, and quality indicators.
  • Search archived posts and comments by date window.
  • Call the Actor from MCP-compatible AI agents through Apify’s hosted MCP server.

What you get

The only source is the Arctic Shift Reddit archive. Records are flat post or comment rows; unavailable source values are null.

Field familyFieldsTypeWhen empty or mode-specific
Identityid, type (post or comment)stringid is null when unavailable.
Contentsubreddit, title, body, authorstringBlank text is null; title is null on comments.
Engagementscore, upvote_ratio, num_commentsinteger; numberupvote_ratio and num_comments are null on comments.
Time and linkscreated_utc, permalink, url, scraped_atISO 8601; stringMissing or unreadable time is null; comment url equals permalink.
Post attributesis_self, over_18, spoiler, stickied, flair_text, domainboolean; stringOn comments, is_self, over_18, spoiler, and domain are null; stickied and author flair_text can be filled.
Community contextsubreddit_subscribersintegernull when unavailable.
Comment contextparent_id, link_id, depth, is_submitterstring; integer; booleanOn posts these are null; comment depth can be null.
Qualityparse_confidence, warningsnumber; string arraywarnings is empty when nothing is missing.

parse_confidence starts at 1.0; deductions are missing ID 0.5, title 0.15, date 0.1, removed comment body 0.1, deleted author 0.05, and missing subreddit 0.05 for posts. warnings lists deduction codes.

Optional features:

  • extendedFields: true adds archive details such as media URLs, linked-post data, deletion metadata, and score snapshot time.
  • addSignals: true adds English-only, rule-based sentiment and intent signals; it is not AI.
  • addMarkdown: true adds labeled markdown with title, author, subreddit, date, score, permalink, and body.
  • includeUserProfiles: true adds one profile summary row per user when available.
  • includeCommunityInfo: true adds one subreddit summary row when available.

Sample output

Shortened sample: minor fields are omitted, but every shown value is copied exactly from one dataset record.

{
"id": "1xpezob",
"type": "post",
"subreddit": "Python",
"title": "Python Notebook: a notebook where the file is just a .py with # %% cells (no dependencies)",
"body": null,
"author": "compleathorseplayer",
"score": 1,
"upvote_ratio": 1,
"num_comments": 1,
"created_utc": "2026-11-06T15:03:31+00:00",
"permalink": "https://www.reddit.com/r/Python/comments/1xpezob/python_notebook_a_notebook_where_the_file_is_just/",
"url": "https://www.reddit.com/r/Python/comments/1xpezob/python_notebook_a_notebook_where_the_file_is_just/",
"parse_confidence": 1,
"warnings": [],
"scraped_at": "2026-11-06T19:54:05.839503+00:00"
}

Pricing

You pay per event. Pricing differs by Apify plan and applies to these events:

Apify planActor Start eventReddit result event
Free$0.00005 per event$0.00200 per event
Bronze$0.0000495 per event$0.00198 per event
Silver$0.000049 per event$0.00196 per event
Gold$0.0000485 per event$0.00194 per event
Platinum$0.000048 per event$0.00192 per event
Diamond$0.0000475 per event$0.00190 per event
  • Actor Start is charged when the Actor starts. Start events depend on Actor memory, with a minimum of one event.
  • Reddit result is one dataset row: a post or comment. Optional profiles or subreddit summaries are also rows. Comments are billed at the same rate and can be returned by includeComments, commentKeywords, userContent set to comments or both, or exact posts up to maxCommentsPerPost each, default 50.
  • The Actor sends no charge event of its own: each Reddit result is billed once, as the dataset row it is. A post or comment appears once per run, also when two targets reach it.
  • At your run's charge limit (max total charge) the run stops reading and says so.
  • 1,000 results = $2.00005 on Free when the minimum one Actor Start event applies.
  • 10,000 results = $20.00005 on Free when the minimum one Actor Start event applies.
  • The Apify Free plan includes $5 of monthly platform usage credit; with the minimum one Actor Start event, the $5 credit covers 249 full runs (2,490 Reddit results) at Free-plan prices.
  • You pay only for the events listed above. This Actor does not use the Pay per event + usage option, so compute, proxy traffic, and storage are not billed separately.

The Free plan limits this Actor to a 10-record preview per run. A paid Apify plan removes that output cap.

How to use

  1. Choose subreddit names, Reddit URLs, usernames, or exact post references.
  2. Set maxItems and sort (new, old, or top; top also needs postedAfter or postedBefore).
  3. Add searches, time windows, comment options, or client-side filters.
  4. Enable comments, signals, extended fields, profiles, or community summaries when needed.
  5. Run the Actor and review parse_confidence, warnings, and the terminal status.
  6. Repeat runs through Apify Schedules; daily is a reasonable starting point for brand monitoring.
{
"subreddits": ["python"],
"sort": "new",
"maxItems": 50,
"searchQuery": "async",
"includeComments": true,
"commentsMode": "perPost",
"maxCommentsPerPost": 10
}

Export the dataset as JSON or CSV, or read it through the Apify dataset API.

Input parameters

ParameterWhat it doesDefault
subreddits, urls, users, postsTargets: subreddit names, Reddit listing/profile URLs, usernames, or exact post IDs/URLs. A post URL in urls scrapes its whole subreddit; use posts for one thread.Not set
maxItemsMaximum rows per subreddit or user; discovery shares the total across communities. Accepts 1 through 50000.100
sortnew, old, or top; top ranks the posted window by archive snapshot score and needs a date bound.new
searchQuerySearches post titles; requires a subreddit or user target.Not set
searchQueriesSearches multiple post terms, merges with searchQuery, and removes duplicates.Not set
searchInSearches archive title, body, or both.Not set; title behavior
commentKeywordsSearches comment bodies for each subreddit or user and can return comments without includeComments.Not set
filterKeywords, filterKeywordModeCase-insensitive client-side matching using any, all, or exactPhrase.Not set; any when terms are supplied
discoverCommunitiesFinds up to three communities per keyword by name prefix and searches them.Not set
postedAfter, postedBefore, commentedAfter, commentedBeforeBounds post or comment rows using UTC dates, ISO datetimes, or relative periods.Not set
includeComments, commentsModeAdds comments. subreddit is the subreddit-wide stream; perPost fetches comments for returned posts. Without commentsMode, comments are read per returned post, one archive request each, so a large maxItems makes the run longer.false; mode not set
maxCommentsPerPost, maxCommentDepthPer-post/exact-thread comment limit and nesting-depth filter.50; depth not set
minScore, minComments, flairsClient-side post filters; flair passes are deduplicated.Not set
includeNsfwSet to false to remove posts marked over_18.Not set; preserves current results
excludeAuthors, skipStickied, skipBots, excludeRemovedOmits selected authors, stickied rows, likely bots, or archive-marked removed/deleted rows.Not set
userContentFor users, selects posts, comments, or both.Not set
includeUserProfiles, includeCommunityInfoAdds profile or subreddit summary rows when available.Not set
onlyNew, watchNameEnables incremental runs; watchName is required with onlyNew and accepts 1–40 letters, digits, or dashes.Not set
extendedFields, addSignals, trackTerms, addMarkdownAdds archive fields, rule-based signals, matched terms, or markdown.Not set
proxyConfigurationAccepted but not used; archive requests are sent without a proxy.Not set
disableUsageStatsSet to true to turn off the run summary described in Usage statistics.false

Limits and edge cases

ConditionWhat you seeWhat to do
Free Apify planOutput is capped at 10 records per run.Use a paid Apify plan for unrestricted output.
maxItems or maxCommentsPerPost is out of rangeValues below 1, above 50000, or above 1,000 are rejected.Use values within the accepted ranges.
An after/before pair is invalidThe run fails before a result is charged.Make the after value earlier than the before value.
No target, or keyword search without a subreddit or userThe run fails with a target-required message.Provide a target or use name-prefix discovery without explicit targets.
The archive returns no postsThe run succeeds with zero rows and an explained status.Check spelling, broaden the search, or remove the term.
sort is top without a date bound, or perPost lacks includeComments: trueThe run ends Failed before an archive request and nothing is charged; the reason is also stored in the OUTPUT record.Add a date bound, use new or old, or enable comments.
The archive fails, a later page fails, or title search uses its bounded fallbackRows already pushed remain in the dataset; delivered partial results are marked in status and OUTPUT.partial.Run again, lower maxItems, or broaden the input.
More than 100 archive rows share one secondRows after the first 100 in that second can be missed.Narrow the time window or run again with a different window.
Score or comment-count filters are usedValues are archive snapshots taken about 36 hours after posting, not live values.Treat them as archive snapshots.
A deleted body is unavailableA removed/deleted post body is null; a removed/empty comment body is null with removed_body and a 0.1 deduction.Filter using parse_confidence and warnings.
Exact post references are invalid or unknownInvalid references are not sent to the archive; unknown IDs produce no rows.Use a bare ID, t3_<id>, https://redd.it/<id>, or a supported comments URL.
onlyNew is enabledThe first run sets the starting point; later runs return oldest unseen rows first and retain up to 5,000 seen IDs. Rows arriving over one hour late may be missed.Keep a stable watchName, schedule the Actor, and avoid changing targets or filters.
Several terms or flairs use a small scan budgetRows may be slightly out of order; status can report Scan limit reached.Narrow targets or filters, or run again.
Discovery is enabled with explicit targetsDiscovery is ignored and the status says so.Remove explicit targets when using discovery.

FAQ

How much does it cost to scrape a Reddit subreddit?

See the Pricing table for plan-labelled rates. 1,000 results = $2.00005 on Free when the minimum one Actor Start event applies.

Why did my run return no results or fail?

See Limits and edge cases for validation, empty responses, and archive failures. Check the run status and OUTPUT record, then correct the target, input, or date window and run again.

Are the archive’s scores live?

No. score and num_comments are archive snapshots taken about 36 hours after posting.

The Actor retrieves public data from the Arctic Shift Reddit archive. Whether a particular use is legal or allowed by source terms and applicable law depends on your use case, so review the relevant terms and applicable law.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields

⌂ 换网址