Reddit Scraper — Posts & Comments | from $2/1K
Pricing
from $1.94 / 1,000 reddit results
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
Maintained by CommunityActor stats
0
Bookmarked
180
Total users
54
Monthly active users
32 minutes ago
Last modified
Categories
Features
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 family | Fields | Type | When empty or mode-specific |
|---|---|---|---|
| Identity | id, type (post or comment) | string | id is null when unavailable. |
| Content | subreddit, title, body, author | string | Blank text is null; title is null on comments. |
| Engagement | score, upvote_ratio, num_comments | integer; number | upvote_ratio and num_comments are null on comments. |
| Time and links | created_utc, permalink, url, scraped_at | ISO 8601; string | Missing or unreadable time is null; comment url equals permalink. |
| Post attributes | is_self, over_18, spoiler, stickied, flair_text, domain | boolean; string | On comments, is_self, over_18, spoiler, and domain are null; stickied and author flair_text can be filled. |
| Community context | subreddit_subscribers | integer | null when unavailable. |
| Comment context | parent_id, link_id, depth, is_submitter | string; integer; boolean | On posts these are null; comment depth can be null. |
| Quality | parse_confidence, warnings | number; string array | warnings 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: trueadds archive details such as media URLs, linked-post data, deletion metadata, and score snapshot time.addSignals: trueadds English-only, rule-based sentiment and intent signals; it is not AI.addMarkdown: trueadds labeled markdown with title, author, subreddit, date, score, permalink, and body.includeUserProfiles: trueadds one profile summary row per user when available.includeCommunityInfo: trueadds 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 plan | Actor Start event | Reddit 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,userContentset tocommentsorboth, or exactpostsup tomaxCommentsPerPosteach, default50. - 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
- Choose subreddit names, Reddit URLs, usernames, or exact post references.
- Set
maxItemsandsort(new,old, ortop;topalso needspostedAfterorpostedBefore). - Add searches, time windows, comment options, or client-side filters.
- Enable comments, signals, extended fields, profiles, or community summaries when needed.
- Run the Actor and review
parse_confidence,warnings, and the terminal status. - 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
| Parameter | What it does | Default |
|---|---|---|
subreddits, urls, users, posts | Targets: 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 |
maxItems | Maximum rows per subreddit or user; discovery shares the total across communities. Accepts 1 through 50000. | 100 |
sort | new, old, or top; top ranks the posted window by archive snapshot score and needs a date bound. | new |
searchQuery | Searches post titles; requires a subreddit or user target. | Not set |
searchQueries | Searches multiple post terms, merges with searchQuery, and removes duplicates. | Not set |
searchIn | Searches archive title, body, or both. | Not set; title behavior |
commentKeywords | Searches comment bodies for each subreddit or user and can return comments without includeComments. | Not set |
filterKeywords, filterKeywordMode | Case-insensitive client-side matching using any, all, or exactPhrase. | Not set; any when terms are supplied |
discoverCommunities | Finds up to three communities per keyword by name prefix and searches them. | Not set |
postedAfter, postedBefore, commentedAfter, commentedBefore | Bounds post or comment rows using UTC dates, ISO datetimes, or relative periods. | Not set |
includeComments, commentsMode | Adds 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, maxCommentDepth | Per-post/exact-thread comment limit and nesting-depth filter. | 50; depth not set |
minScore, minComments, flairs | Client-side post filters; flair passes are deduplicated. | Not set |
includeNsfw | Set to false to remove posts marked over_18. | Not set; preserves current results |
excludeAuthors, skipStickied, skipBots, excludeRemoved | Omits selected authors, stickied rows, likely bots, or archive-marked removed/deleted rows. | Not set |
userContent | For users, selects posts, comments, or both. | Not set |
includeUserProfiles, includeCommunityInfo | Adds profile or subreddit summary rows when available. | Not set |
onlyNew, watchName | Enables incremental runs; watchName is required with onlyNew and accepts 1–40 letters, digits, or dashes. | Not set |
extendedFields, addSignals, trackTerms, addMarkdown | Adds archive fields, rule-based signals, matched terms, or markdown. | Not set |
proxyConfiguration | Accepted but not used; archive requests are sent without a proxy. | Not set |
disableUsageStats | Set to true to turn off the run summary described in Usage statistics. | false |
Limits and edge cases
| Condition | What you see | What to do |
|---|---|---|
| Free Apify plan | Output is capped at 10 records per run. | Use a paid Apify plan for unrestricted output. |
maxItems or maxCommentsPerPost is out of range | Values below 1, above 50000, or above 1,000 are rejected. | Use values within the accepted ranges. |
| An after/before pair is invalid | The 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 user | The run fails with a target-required message. | Provide a target or use name-prefix discovery without explicit targets. |
| The archive returns no posts | The 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: true | The 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 fallback | Rows 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 second | Rows 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 used | Values are archive snapshots taken about 36 hours after posting, not live values. | Treat them as archive snapshots. |
| A deleted body is unavailable | A 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 unknown | Invalid 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 enabled | The 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 budget | Rows may be slightly out of order; status can report Scan limit reached. | Narrow targets or filters, or run again. |
| Discovery is enabled with explicit targets | Discovery 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.
Is using this public Reddit data legal or allowed by the source’s ToS?
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.
Related actors
- Reddit Scraper — Russian-Language Subreddits — related extraction for Russian-language subreddits.
- Bluesky Scraper — Posts, Profiles & Followers — extracts posts, profiles, and followers from another social platform.
- Douyin Scraper — Hot Trends, Videos & TikTok China Data — collects trends and video data from Douyin.
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.