Reddit Scraper: Posts, Comments & Change Monitor avatar

Reddit Scraper: Posts, Comments & Change Monitor

Pricing

from $0.89 / 1,000 post or search results

Go to Apify Store
Reddit Scraper: Posts, Comments & Change Monitor

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

Luka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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

  1. Open Input and keep the prefilled subreddit, or replace it with your own community name without r/.
  2. Leave Records to return on Posts only โ€” fastest.
  3. Choose a small Maximum posts per target such as 25.
  4. 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 needInput to useImportant behavior
Recent community postssubredditsEnter names without r/
Results for phrasessearchQueriesSearch queries override subreddit inputs
One thread, search page, community, or public user pagestartUrlsURLs override every other target method
Posts onlyrecordMode: "posts"Fastest and lowest-cost path
Comments or full threadscomments or postsAndCommentsOpens selected threads and adds comment rows
Only repeat-run changesstateMode: "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 reply depth.
  • Every row carries stable source and record keys, collection time, coverageStatus, warnings, and change fields.
  • matchedTargetKeys and matchedTargetChanges preserve 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 are UPDATED, and identical rows stay internal by default.
  • Enable includeUnchanged only when you need audit rows. Delivered UNCHANGED rows are free.
  • ENDED is 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.

EventPriceWhen it is charged
Verified source start$0.005Once, only after at least one target returns useful verified rows or a source-confirmed exhausted empty window
Successfully checked monitoring target$0.0067Per trustworthy, state-compatible target in Changes mode
Delivered post row$0.00099Per useful post or search-result row
Delivered comment row$0.00049Per 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.