Reddit Scraper: Posts, Comments & Change Monitor
Pricing
from $0.89 / 1,000 post or search results
Reddit Scraper: Posts, Comments & Change Monitor
Scrape Reddit posts, search results, subreddits, public user activity, and nested comments without a Reddit account or API key. Export stable IDs with clear coverage, or rerun the same scope to receive NEW, UPDATED, and safely confirmed ENDED changes.
Pricing
from $0.89 / 1,000 post or search results
Rating
0.0
(0)
Developer
Luka
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Use this Reddit scraper to collect public Reddit posts and comments as clean, relationship-aware dataset rows. For a Reddit thread scraper run, provide an exact Reddit URL; you can also start from a subreddit or search phrase, then choose a current snapshot or a safe changefeed for repeat monitoring.
The Actor keeps stable Reddit IDs, post-to-comment relationships, per-target coverage, and explicit NEW, UPDATED, UNCHANGED, or cautiously proven ENDED states. It uses a fixed Apify Residential route because Datacenter access is not reliable enough for this product; there is no buyer proxy setup to configure.
๐ Start in 60 seconds
- Open Input and keep the prefilled subreddit, or replace it with your own community name without
r/. - Leave Records to return on Posts only โ fastest.
- Choose a small Maximum posts per target such as
25. - Click Start. Open the Posts and comments dataset when the run finishes.
{"subreddits": ["apify", "webscraping"],"maxItemsPerTarget": 25,"recordMode": "posts"}
For one exact conversation, paste its URL instead:
{"startUrls": [{ "url": "https://www.reddit.com/r/apify/comments/1vxgygp/weekly_wild_ideas/" }],"recordMode": "postsAndComments","maxCommentsPerPost": 100,"maxDepth": 10}
๐ฏ Choose the right workflow
| What you need | Input to use | Important behavior |
|---|---|---|
| Recent community posts | subreddits | Enter names without r/ |
| Results for phrases | searchQueries | Search queries override subreddit inputs |
| One thread, search page, community, or public user page | startUrls | URLs override every other target method |
| Posts only | recordMode: "posts" | Fastest and lowest-cost path |
| Comments or full threads | comments or postsAndComments | Opens selected threads and adds comment rows |
| Only repeat-run changes | stateMode: "changes" | First comparable run emits observed rows as NEW |
Choose only one target method. The fixed precedence is:
startUrls โ searchQueries โ subreddits
๐ฆ What you get
Every dataset row has recordType: "post" or recordType: "comment".
- Post rows include title, body, author, subreddit, score, comment count, flair, links, timestamps, and exposed media metadata.
- Comment rows include body, author, score, root
postId,parentId, and zero-based replydepth. - Every row carries stable source and record keys, collection time,
coverageStatus, warnings, and change fields. matchedTargetKeysandmatchedTargetChangespreserve attribution when the same Reddit record matches more than one requested target.
Use the Overview dataset view for daily review and the Full export view for JSON, CSV, integrations, and audits. RUN_SUMMARY contains per-target coverage, row counts, charge totals, and run-wide warnings.
{"recordType": "post","redditId": "t3_example","subreddit": "apify","title": "Example post","permalink": "https://www.reddit.com/r/apify/comments/example/","coverageStatus": "COMPLETE","changeStatus": null}
๐๏ธ Input guide
Targets. Use subreddits, searchQueries, or startUrls. A direct thread returns at most one post plus requested comments. maxItemsPerTarget limits posts independently for every subreddit, search, or public user target.
Comments. recordMode is the canonical switch. Comments-only still reads the parent post so relationships remain valid. maxCommentsPerPost and maxDepth bound traversal; reaching either ceiling produces CAPPED coverage when more replies may remain.
Sorting and time. Reddit supports different controls on different target types. The time window mainly applies to Search and Top. Direct-thread comment sorting preserves New and Top; other selections map to Reddit Best and are reported in warnings.
Filters and metadata. Exclude exposed NSFW labels or exact flair labels, and keep or remove source-exposed media/link metadata. The Actor does not download media files.
Limits. Page, request, runtime, and projected-charge ceilings stop a broad run before it grows unexpectedly. A reached limit is visible as CAPPED or PARTIAL; it is never silently presented as complete.
Repeat runs & monitoring
Set stateMode to changes, keep the same target and row-affecting settings, and rerun sequentially with the same stateNamespace.
- The first run in Changes mode emits observed rows as
NEW; this creates the comparable baseline. - Later comparable run: new rows are
NEW, meaningful edits areUPDATED, and identical rows stay internal by default. - Enable
includeUnchangedonly when you need audit rows. DeliveredUNCHANGEDrows are free. ENDEDis emitted only after comparable complete snapshots. Capped, partial, or failed runs do not prove disappearance.
Do not run the same monitor in parallel. Use a different namespace for each independent monitor, even when the Reddit target is identical.
๐ฐ Pricing
This Actor uses pay per event. Platform usage is included in the configured event prices.
| Event | Price | When it is charged |
|---|---|---|
| Verified source start | $0.005 | Once, only after at least one target returns useful verified rows or a source-confirmed exhausted empty window |
| Successfully checked monitoring target | $0.0067 | Per trustworthy, state-compatible target in Changes mode |
| Delivered post row | $0.00099 | Per useful post or search-result row |
| Delivered comment row | $0.00049 | Per useful comment row |
Examples:
- 25 Current post rows:
$0.005 + 25 ร $0.00099 = $0.02975 - One post and 100 comments:
$0.005 + $0.00099 + 100 ร $0.00049 = $0.05499 - One Changes target with 3 changed post rows:
$0.005 + $0.0067 + 3 ร $0.00099 = $0.01467
Invalid input is rejected before source work. Blocked or failed access, a run with no usable target collection, and an unverified empty result do not receive the start charge. Failed, skipped, unverified, or incompatible monitoring targets also do not receive the monitoring-target charge. Coverage rows, summaries, warnings, duplicate candidates, failed targets, and unchanged observations are free.
โ Coverage you can trust
Every requested target receives a coverage result:
COMPLETEโ the configured target window was exhausted without a known cap.CAPPEDโ a result, page, comment, depth, reply, request, runtime, or charge ceiling was reached.PARTIALโ useful rows were delivered, but part of the requested work could not be completed.EMPTYโ the selected source window returned zero rows and the Actor corroborated that empty result.FAILEDโ the Actor could not obtain trustworthy rows or verify an empty result.
COMPLETE describes the configured bounded window, not all historical Reddit content. Coverage and warnings remain available even when the dataset has no paid result rows.
๐ API and automation
Run the Actor with the Apify API by replacing ACTOR_ID and APIFY_TOKEN:
curl -X POST \"https://api.apify.com/v2/acts/ACTOR_ID/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"subreddits":["apify"],"maxItemsPerTarget":25,"recordMode":"posts"}'
The default dataset is available as JSON, CSV, Excel, XML, RSS, or JSONL through Apify dataset endpoints. Save a stable Changes input as an Apify Task before adding a schedule, and keep executions sequential for the same monitor.
โ FAQ and support
Do I need a Reddit account, API key, or proxy settings?
No. The Actor uses a managed, fixed Residential-only route. Datacenter is intentionally not offered because it did not meet the reliability bar for this product.
Why did I receive posts but no comments?
Check recordMode. The default is Posts only. Choose Comments only or Posts and comments, then review the comment and depth limits.
Why did my first Changes run label everything NEW?
That run creates the comparison baseline. Repeat the same scope sequentially to receive later changes.
Why are there fewer rows than my limit?
The limit is a maximum, not a promise. Review coverageStatus, coverageWarnings, and RUN_SUMMARY to distinguish a complete smaller window from a capped, partial, empty, or failed target.
For support, share the Apify run ID, the input with sensitive values removed, the affected target, and the relevant coverage warning.