Reddit Scraper API - Posts, Comments & Monitoring avatar

Reddit Scraper API - Posts, Comments & Monitoring

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Reddit Scraper API - Posts, Comments & Monitoring

Reddit Scraper API - Posts, Comments & Monitoring

Scrape public Reddit posts, search, subreddits, media, and nested comments or monitor only newly observed posts. Anonymous read-only OAuth; no browser, proxy, login, cookies, or API key.

Pricing

from $0.40 / 1,000 results

Rating

5.0

(1)

Developer

Thirdwatch

Thirdwatch

Maintained by Community

Actor stats

3

Bookmarked

231

Total users

40

Monthly active users

5 hours ago

Last modified

Share

Reddit Scraper API - Posts, Comments, Search & Monitoring

Thirdwatch portfolio: 5K users across 88 public Actors, 2M+ records delivered, and >99% run success. Explore all Thirdwatch Actors.

Extract public Reddit posts, subreddit listings, global search results, self-post text, engagement, media, and nested comments through Reddit's anonymous read-only OAuth API. No browser, Reddit login, cookies, user-supplied API key, or proxy.

Why this Actor

  • Low-cost anonymous OAuth — structured JSON at 256 MB, with no stealth-browser startup fee or residential transfer.
  • 100 posts per page — paginate automatically to 1,000 posts per query.
  • Three query modes in one field — global search, subreddit listings, and search within a subreddit.
  • Full public post bodies — self-post text, media, flair, awards, crossposts, and moderation flags arrive in the structured response.
  • Comments included in the post price — embed up to 100 top or nested comments without paying per comment row.
  • Persistent new-post monitoring — the first run creates a baseline; later complete runs return only unseen post IDs.
  • Zero unchanged result charges — a scheduled monitor with no new posts writes no dataset rows.
  • No duplicate billing — overlapping queries, URLs, and subreddit pages are deduplicated by Reddit post ID across the run.

Query patterns

InputBehavior
AI agentsSearch all public Reddit posts
r/programmingBrowse a public subreddit using the selected sort
r/programming: Python 3.14Search within one subreddit
startUrlsPaginate an existing Reddit listing/search page or fetch a post URL
postUrlsFetch exact public posts and optionally their comments

Basic subreddit run

{
"queries": ["r/programming", "r/python"],
"sort": "new",
"maxResults": 100
}

Global and subreddit-specific research

{
"queries": [
"AI coding agents",
"r/SaaS: customer support automation"
],
"sort": "relevance",
"timeFilter": "month",
"maxResults": 250,
"minScore": 5
}

Scheduled new-post monitoring

{
"queries": ["r/devops: alternative to", "r/sysadmin: recommend"],
"sort": "new",
"skipPinnedPosts": true,
"maxResults": 50,
"includeComments": true,
"maxCommentsPerPost": 20,
"monitorMode": "new-posts",
"monitorStoreName": "infrastructure-buyer-signals"
}

Save that input as an Apify Task and attach a Schedule. The first successful run emits the current baseline with changeType: "baseline". Later successful runs using the same monitor name emit only unseen IDs with changeType: "new_post". The Actor commits state after publishing rows, providing at-least-once delivery. It refuses to advance state if any configured target is incomplete.

Use one monitorStoreName per independent watch and do not overlap runs that share it. Changing a query, sort, filter, or result depth changes the cohort; use a new monitor name. newerThan remains available for one-off timestamp-filtered exports but is not needed for persistent monitoring.

Post and comment extraction

{
"postUrls": [
"https://www.reddit.com/r/programming/comments/POST_ID/example/"
],
"includeComments": true,
"maxCommentsPerPost": 50,
"maxCommentDepth": 3
}

Output fields

Every post row includes:

  • identity: id, title, url, permalink, sourceQuery
  • author/community: author, subreddit, flair
  • content: selftext, post_hint, domain, mediaUrl, thumbnail, gallery_images
  • engagement: score, upvoteRatio, numComments, gildingCount
  • flags: isNSFW, is_spoiler, is_stickied, is_self, is_video, is_crosspost, is_locked, is_archived
  • timestamps: created, scrapedAt
  • monitoring: changeType, firstSeenAt when monitorMode is new-posts
  • optional comments: topComments[] with id, parentId, author, body, score, depth, created, and permalink

Example result

{
"id": "1uxtv30",
"title": "New Python type checker",
"author": "TheSeriousTrader",
"subreddit": "Python",
"url": "https://www.reddit.com/r/Python/comments/1uxtv30/new_python_type_checker/",
"permalink": "https://www.reddit.com/r/Python/comments/1uxtv30/new_python_type_checker/",
"selftext": "Was checking out some Python type checkers...",
"score": 42,
"upvoteRatio": 0.88,
"numComments": 16,
"created": "2026-07-16T05:39:00+00:00",
"flair": "Discussion",
"is_self": true,
"topComments": []
}

Live pricing

You pay only for unique post rows written to the dataset. Empty searches, duplicates, failed requests, and comments embedded inside a post row do not create additional result charges.

Apify tierPrice per 1,000 posts
FREE$1.00
BRONZE$0.80
SILVER$0.60
GOLD$0.40

There is no browser-start or proxy fee. The Pricing tab is the authoritative live price.

Reliability and responsible use

  • The Actor collects public Reddit content only. Private, banned, quarantined, removed, or login-only content is unavailable.
  • Requests are globally rate-limited with bounded retries for 429, authorization refreshes, timeouts, and transient network failures.
  • Persistent monitors keep at most 50,000 post identities. The oldest identities can eventually age out of extremely high-volume watches.
  • Monitoring visits every configured target but buffers at most 2,000 current post observations before diffing. With large watchlists, the Actor lowers maxResults evenly per listing; split broader cohorts into separate Tasks.
  • Monitoring state updates only after every configured target completes. A failed page or deadline guard fails closed instead of corrupting the baseline.
  • Reddit scores and comment counts can change between requests and may be hidden for very new posts.
  • Comment-enabled listing runs are capped at 100 posts total across all queries; exact postUrls reuse their detail response and remain separate.
  • Comments come from Reddit's initial public comment tree; hidden “load more comments” branches are not expanded.
  • Search relevance and geographic availability are controlled by Reddit.

Workflows and guides

Pairs well with Twitter/X Scraper, Google News Scraper, and YouTube Scraper for cross-channel listening.

Last verified: 2026-07