Reddit Scraper – Posts, Comments & User History
Pricing
from $0.75 / 1,000 reddit results
Reddit Scraper – Posts, Comments & User History
Export Reddit posts and comments by subreddit or user, with UTC date filters and CSV/JSON downloads. No Reddit API key, login, or proxy setup. Uses Arctic Shift archives; recent content may lag. $0.75 per 1,000 results, plus a small start charge.
Pricing
from $0.75 / 1,000 reddit results
Rating
0.0
(0)
Developer
Anas Nadeem
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
2
Monthly active users
17 days ago
Last modified
Categories
Share
Export Reddit posts and comments from subreddits and public user histories into structured datasets for research, AI/RAG ingestion, and content analysis. Choose your targets, set a UTC date range, and download JSON, CSV, or Excel.
This Actor uses Arctic Shift archives. Recent content, available records, and engagement values can differ from live Reddit. Global keyword search, direct post-thread URLs, and live rankings are not supported.
$0.75 per 1,000 output rows, plus a small memory-based start charge. No Reddit API key, Reddit login, cookies, or proxy setup is required. An Apify account is required to run the Actor on Apify.
Moving from our old Reddit Scraper?
Our old Actor is obsolete. Use this Actor for supported subreddit and user post/comment exports. Input names, output fields, and data coverage have changed; changing only the Actor name in an existing integration is insufficient.
- Move supported subreddit or user-profile URLs into
targets, or user/nameandu/nameshorthand. - Choose
posts,comments, or both and provide a date range and a small result cap. - Run the example below and inspect the output before reconnecting downstream steps.
- Create a new saved task or update your API calls to
whoareyouanas/reddit-faster-actor. Reconfigure schedules, webhooks, and integrations for the new task and output fields. - Disable obsolete schedules once your supported replacement workflow is ready.
| Previous input or workflow | Use here |
|---|---|
Subreddit URL in startUrls | Move the URL to targets, or use targets: ["r/Python"] |
User-profile URL in startUrls | Move the URL to targets, or use targets: ["u/username"] |
skipComments: true | datasets: ["posts"] |
| Posts and comments | datasets: ["posts", "comments"] |
| User comments | User target with datasets: ["comments"] |
postDateLimit, commentDateLimit | Shared startDate and endDate; use separate runs for different post/comment windows |
time presets | Explicit UTC date bounds |
maxItems, maxPostCount, maxComments | Set maxItemsPerKind; it applies separately to every target and dataset |
debugMode | verboseLog |
| Proxy and browser timeout/scroll settings | Remove; this Actor requests the archive directly |
skipCommunity | No direct equivalent; skipMetadata skips separate archive metadata requests |
searches, search flags, direct post/comment URLs | Unsupported |
| Live sort, NSFW filtering, community discovery, profile rows | No direct equivalents |
Comments are exported for the selected subreddit or author. They are not fetched as the comment trees of the selected post rows. This Actor does not output normalized community or user-profile rows.
| Previous output field | New output field or action |
|---|---|
dataType | kind (post or comment) |
parsedId | redditId |
username | author |
body | description (post selftext or comment text; can be null) |
createdAt, title, url | Same names; review nullability and URL semantics below |
upVotes, community name, parent identifiers | Inspect available source fields in rawData; normalized legacy names are not provided |
scrapedAt, normalized profile/community rows | No equivalent |
Quick start: subreddit posts and comments
This bounded historical example requests up to 100 posts and 100 comments. It demonstrates an export, not current Reddit freshness.
{"targets": ["r/Python"],"datasets": ["posts", "comments"],"startDate": "2024-01-01","endDate": "2024-01-07","maxItemsPerKind": 100,"limit": "100","resumeFromState": false}
For one target and two datasets, the maximum is 200 rows: $0.15 in result charges if both caps are reached, plus startup. Date ranges and archive availability can produce fewer rows.
startDate is the lower UTC bound. A date-only endDate includes that calendar day by setting the upper bound to the next UTC midnight. For example, "endDate": "2024-01-07" means before 2024-01-08T00:00:00Z. Use an ISO datetime for an exact upper boundary. "now" sets an upper time boundary; it does not guarantee the archive contains current content.
What can you use it for?
- Subreddit research: export dated discussions from known communities for topic and audience analysis.
- Reddit comments datasets: collect available comment text with source identifiers for downstream sentiment or language analysis.
- Public user history: export an author's available posts and comments within a selected period.
- AI/RAG ingestion: obtain text, timestamps, links, and original source fields for your own filtering and retrieval pipeline.
- Content and SEO research: study questions, terminology, and post text from relevant communities.
- Historical backfills: query explicit date windows instead of relying on Reddit's current feed listings. Coverage depends on the archive.
The Actor collects data; it does not generate sentiment scores, embeddings, leads, or summaries.
User history example
Replace the example username with your target:
{"targets": ["u/spez"],"datasets": ["posts", "comments"],"startDate": "2024-01-01","endDate": "2024-01-31","maxItemsPerKind": 100,"limit": "100","resumeFromState": false}
Comments-only example
{"targets": ["r/Python"],"datasets": ["comments"],"startDate": "2024-01-01","endDate": "2024-01-07","maxItemsPerKind": 100,"limit": "100","resumeFromState": false}
Output
Each dataset row is one post or one comment. The following is an illustrative schema example, not a measured run result:
{"createdAt": "2024-01-03T12:00:00Z","author": "example_author","title": "Example discussion title","link_flair_text": "Discussion","description": "Example post text.","url": "https://www.reddit.com/r/Python/comments/example/example_discussion/","kind": "post","redditId": "example","rawData": {"id": "example","author": "example_author","subreddit": "Python","created_utc": 1704283200,"title": "Example discussion title","selftext": "Example post text.","link_flair_text": "Discussion","permalink": "/r/Python/comments/example/example_discussion/"}}
| Field | Meaning |
|---|---|
createdAt | Source creation time formatted in UTC |
author | Source author, potentially a deleted marker or null |
title | Post title; for comments, source parent-title information when present |
link_flair_text | Source flair when present |
description | Post selftext or comment body; link posts without selftext can be null |
url | Source permalink expanded to a Reddit URL; a comment may fall back to its parent-post permalink; can be null |
kind | post or comment |
redditId | Source Reddit identifier |
rawData | Original archive row, including additional fields when available |
Text and metadata fields can be null. Scores, subreddit names, post/parent identifiers, and other fields may be available inside rawData; their presence is source-dependent. Use JSON export when you need the nested source payload. The default Output tab includes the record kind and Reddit ID alongside readable text, date, author, flair, and link fields.
The run's key-value store contains OUTPUT (summary), METADATA-r_Python or equivalent target metadata when enabled, and STATE-r_Python-posts / STATE-r_Python-comments or equivalent checkpoints.
Input reference
The default export selects posts from the past 30 days, capped at 100 rows per target, with endDate: "now" and API limit: "100". Archive freshness still applies. Use explicit dates and caps for repeatable research jobs. The Input tab describes advanced controls.
| Field | Type | Purpose |
|---|---|---|
targets | string array, required | r/name, u/name, user/name, or exact Reddit subreddit/user-profile URLs; post, search, and nested listing paths are not accepted |
datasets | string array | posts, comments, or both |
startDate | string | UTC lower bound; defaults to 30 days ago. Accepts N days ago, dates, ISO datetimes, epoch seconds/milliseconds, none, or all |
endDate | string | UTC upper bound; defaults to now; date-only includes that day |
maxItemsPerKind | positive integer | Maximum new rows per target per selected dataset; not a global cap |
maxPagesPerKind | positive integer | Optional cap on non-empty fetched pages per target/dataset |
limit | string | Archive API page-size parameter; separate from total result cap |
windowDays | number | Maximum request date-window span; 0 disables windowing |
minWindowSeconds | positive integer | Minimum window after oversized-range responses |
requestDelayMs | integer | Delay between successful non-empty page requests |
timeoutSeconds | number | Timeout for each HTTP request |
retries, retrySleepSeconds | integer / number | Transient request retry controls |
skipMetadata | boolean | Skip archive metadata lookup; provide an explicit start date |
dryRun | boolean | Preview request URLs and summary without fetching dataset rows; startup can still be charged |
resumeFromState | boolean | Read checkpoints in the current run's default key-value store when present |
verboseLog | boolean | More detailed progress logs |
baseUrl | string | Advanced archive endpoint override; leave the default for normal use |
For two targets and both datasets, maxItemsPerKind: 100 permits up to 400 rows. Smaller page limits affect request size, not that overall maximum. Avoid broad unbounded ranges when testing.
Pricing
The configured result event is $0.00075 per row, or $0.75 per 1,000 posts or comments. One post and one comment are two rows. The same rate applies to both kinds.
| Returned rows | Result charges, excluding startup |
|---|---|
| 100 | $0.075 |
| 1,000 | $0.75 |
| 10,000 | $7.50 |
| 100,000 | $75.00 |
The configured apify-actor-start price is $0.00005 per startup event unit. Apify determines the number of units from allocated run memory, with a minimum of one unit. This is not a universal flat fee for every memory setting. Review the Pricing tab and your run's charge details for the exact total.
Failed requests, empty windows, metadata requests, and skipped duplicates do not create billable result rows. A run with no rows, including a dry run, can still incur startup charges. Already returned rows remain billable if a later request fails. No proxy is configured by default.
API and integrations
Use the replacement Actor identifier and the new input shape. An Apify API token is needed for authenticated API calls; a Reddit API key is not needed.
curl -X POST \'https://api.apify.com/v2/acts/whoareyouanas~reddit-faster-actor/run-sync-get-dataset-items' \-H 'Authorization: Bearer YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"targets": ["r/Python"],"datasets": ["posts", "comments"],"startDate": "2024-01-01","endDate": "2024-01-07","maxItemsPerKind": 100,"limit": "100","resumeFromState": false}'
For larger exports, use the asynchronous run endpoint or an Apify client, wait for completion, and retrieve the run's default dataset. Keep your token in a secret manager or environment variable in production. The Actor's API tab provides client examples.
In n8n, Make, or Zapier, select this Actor or a new saved task and map the new dataset fields. Inspect one successful dataset before enabling downstream automation.
Schedules and checkpoints
Use fixed dates for reproducible backfills and delayed resumption: relative dates such as 30 days ago are resolved when the run starts. Checkpoints are stored in the current run's default key-value store. A new scheduled run gets its own storage: resumeFromState: true does not automatically continue a previous scheduled run or provide deduplication across runs.
For recurring exports, explicitly advance your UTC date bounds in your workflow. Allow overlap when appropriate for archive ingestion delays, then deduplicate downstream using kind and redditId. Validate missing IDs before using them as keys. A capped export may not cover its whole date range; inspect the summary before advancing the next window. No fixed overlap duration guarantees all late-arriving archive content.
Coverage and troubleshooting
Why fewer rows than requested? A result cap is a maximum, not a promise. Check target spelling, date bounds, page caps, and the run summary. The archive may lack recent, deleted, removed, private, banned, or otherwise unavailable content. A zero-row result does not establish that Reddit has no matching content.
Why are current scores or posts different from Reddit? This Actor exports an archive snapshot. It does not refresh records or engagement values against live Reddit and has no guaranteed freshness interval.
Can I get a complete subreddit or comment thread? You can request available subreddit or user rows across date windows. Archive completeness is not guaranteed. Direct post-thread URLs, live comment expansion, and complete-thread guarantees are not supported.
Can I search Reddit by keyword? There is no global or scoped keyword-search input. Export a known subreddit/date range and filter returned text downstream if that meets your needs.
Why did a run fail? Check the log for invalid input, source errors, or exhausted retries. Correct input errors before rerunning. For source failures, try a smaller historical window and a bounded result cap. Inspect any partial dataset before retrying to avoid treating repeated rows as new data.
What does a saturated timestamp error mean? If the archive returns a full page at one timestamp and cannot advance safely, the run fails with partial results saved. This prevents silently skipping records. Try a larger supported page limit or a narrower target, and inspect the checkpoint and partial dataset before retrying.
Need migration help? Open an issue from this Actor's Issues tab with your use case, input without secrets, and a run link you are comfortable sharing. Mention whether you need subreddit posts, comments, user history, or an unsupported legacy mode.
This is an unofficial Actor, unaffiliated with Reddit. It exports data available through Arctic Shift; use the data consistently with applicable source terms and privacy requirements.