Reddit Scraper API - Posts, Comments, Subreddits, Users avatar

Reddit Scraper API - Posts, Comments, Subreddits, Users

Pricing

from $0.50 / 1,000 posts

Go to Apify Store
Reddit Scraper API - Posts, Comments, Subreddits, Users

Reddit Scraper API - Posts, Comments, Subreddits, Users

Reddit scraper for posts and full comment trees from subreddits, search, post URLs and user profiles. Your OAuth credentials (official Data API) or keyless public JSON; keyless runs need own proxies or a Reddit app key (Apify shared pools get 403s). $0.50 per 1,000 posts, $0.25 per 1,000 comments.

Pricing

from $0.50 / 1,000 posts

Rating

0.0

(0)

Developer

OFFGRID LABS

OFFGRID LABS

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Reddit scraper API: posts and comments from subreddits, search, threads and user profiles

TL;DR: Reddit Scraper API reads Reddit posts and full comment trees from subreddits (hot, new, top, rising, controversial), search queries, post URLs and user profiles and returns them in one unified schema: title, text, author, subreddit, score, upvote ratio, comment count, timestamps, flair, reply depth, permalink and deleted/removed flags. It reads Reddit's public JSON endpoints out of the box, or Reddit's official Data API when you add your app credentials, with built-in proxy routing (rotation, fail-over, per-proxy health) for reliable access. You pay $0.50 per 1,000 posts and $0.25 per 1,000 comments; demo mode returns a free, clearly labelled sample.

With credentials, requests go to oauth.reddit.com (the Reddit Data API) using application-only OAuth. Without credentials, requests go to the public JSON endpoints (www.reddit.com/*.json). No logins, no proxies, no IP rotation.

What data you get

One dataset row per post or comment (recordType).

FieldWhat it isExample
recordTypepost or comment (one charged event each)comment
id, fullnameReddit ID and fullname (t3_ post, t1_ comment); fullname is the dedupe key1abc2de, t3_1abc2de
subreddit, authorSubreddit and author (null if deleted)webscraping, some_user
title, bodyPost title; post self-text or comment text (markdown)Best way to use the Reddit API?
url, linkUrl, domainPermalink, external link of link posts, link domainhttps://www.reddit.com/r/...
score, upvoteRatio, numCommentsScore, upvote share (posts), comment count (posts)128, 0.96, 42
createdAt, createdUtc, editedAtISO 8601 / Unix creation time, last edit2026-11-03T00:00:00.000Z
flair, over18, spoiler, stickied, locked, isSelf, isVideoFlair and post flagsQuestion, false
postId, postTitle, parentId, depth, isSubmitterThread position: post, parent (t3_/t1_), reply depth, written by OPt1_c1, 1, true
isDeleted, isRemoved, removedByDeleted by author / removed by mods or Reddit, and by whomfalse, true, moderator
source, sourceUrlInput that produced the row and the API endpoint usedsubreddit:webscraping/hot
demo, scrapedAttrue only for the uncharged demo sample; read timefalse

Fields that do not apply to a record type are null. Run statistics are saved in the key-value store record RUN_SUMMARY: posts and comments saved, duplicates/deleted skipped, duration, records per second, API requests, retries and HTTP 429 responses.

Input sourceAPI endpointNotes
Subreddits/r/<sub>/{hot,new,top,rising,controversial}100 posts per request; Reddit stops listings at about 1,000
Search queries/search or /r/<a+b>/search?restrict_sr=1Reddit search syntax ("phrase", title:, author:, OR)
Post URLs/comments/<id> + /api/morechildrenFull comment tree, depth and size limits, "load more" expanded
Usernames/user/<name>/submitted, /user/<name>/commentsPublic profile posts and comments

Use cases

  • Market and product research: collect what a community says about a product category, with scores and full threads.
  • Social listening datasets: export subreddits or search results on a schedule into Sheets, BigQuery or a data lake.
  • AI and NLP: build clean, deduplicated post/comment corpora with thread structure (parentId, depth) for RAG or classification.
  • Academic research: reproducible pulls with the endpoint stored on every row (sourceUrl).
  • Thread archiving: save a discussion with all comments before it gets locked or removed.

For "only new mentions since the last run" alerts, use the sibling actor Reddit Keyword Monitor.

How to use the Reddit scraper

  1. (Optional) To use the official Data API, create a Reddit app at https://www.reddit.com/prefs/apps → create another app → type web app (or script), any redirect URI (e.g. http://localhost). Copy the client ID (under the app name) and the secret, then paste them into Reddit client ID and Reddit client secret. Leave both empty to use the public JSON path instead.
  2. For reliable live access, either add your own proxies under Proxy routing (any HTTP/SOCKS list; rotation, fail-over and per-proxy health checks are built in — see ./PROXY.md), or create a free Reddit app (step 1, 2 minutes) and use the official Data API.
  3. Add sources: Subreddits, Search queries, Post URLs and/or Usernames. Pick Sort and Time filter.
  4. Set Max posts per source; switch on Also fetch comments of listed posts if you want comment trees for listings.
  5. Click Start and download JSON, CSV, Excel or HTML, or read the dataset via API.

Turn on Demo mode to get a small fixed sample (demo: true) that shows the output format and is never charged.

Input example

{
"clientId": "<optional: your Reddit app client ID>",
"clientSecret": "<optional: your Reddit app secret>",
"subreddits": ["webscraping", "datascience"],
"sort": "top",
"timeFilter": "week",
"searchQueries": ["\"reddit api\" pricing"],
"postUrls": ["https://www.reddit.com/r/redditdev/comments/abc123/example/"],
"users": ["some_user"],
"maxItemsPerSource": 100,
"includeComments": true,
"maxCommentsPerPost": 200,
"commentDepth": 5,
"publicRequestBudget": 300
}

Output example

{
"recordType": "comment",
"id": "democ02",
"fullname": "t1_democ02",
"subreddit": "demo",
"author": "demo_user_1",
"title": null,
"body": "Thanks, that is helpful. How do you handle rate limits?",
"url": "https://www.reddit.com/wiki/api/",
"score": 17,
"createdAt": "2026-11-03T00:15:00.000Z",
"postId": "demo001",
"postTitle": "[DEMO] Which open-source web scraping framework do you use in 2026?",
"parentId": "t1_democ01",
"depth": 1,
"isSubmitter": true,
"isDeleted": false,
"isRemoved": false,
"source": "demo",
"demo": true,
"scrapedAt": "2026-11-03T12:00:00.000Z"
}

(Shortened demo row; live rows have demo: false, real permalinks and the endpoint used in sourceUrl. Full samples: samples/ in the source.)

Pricing: how much does it cost to scrape Reddit?

Pay per event, flat on every Apify plan:

EventPricePer 1,000
Post saved$0.0005$0.50
Comment saved$0.00025$0.25
Actor start$0.00005Apify default
  • 1,000 posts from 10 subreddits = $0.50.
  • 200 threads with 10,000 comments = $0.10 + $2.50 = $2.60.
  • Not charged: demo rows, duplicates (deduplicated by fullname), skipped deleted/removed or NSFW items, and failed runs (nothing is saved before an error).
  • Set Maximum cost per run in the run options; the actor stops saving once the budget is reached.

Speed and reliability

  • Speed: Reddit returns up to 100 posts per listing request and up to 500 comments per thread request. With your own OAuth client, Reddit's documented limit is about 100 requests per minute, so the ceiling is about 10,000 posts per minute. Our own processing overhead is ~41,000 records/s (measured on a local benchmark), and every run reports its real records per second in RUN_SUMMARY.
  • Public path budget: when running without credentials, the actor uses a rotating, descriptive User-Agent and a hard per-run request budget (Public path request budget, default 300) so a run cannot hammer Reddit's public endpoints. Reaching the budget ends the run cleanly with whatever was collected.
  • Rate limits: reads X-Ratelimit-Remaining / X-Ratelimit-Reset on every response when present, pauses before the window runs out, waits for the reset on HTTP 429 and retries 5xx/network errors with exponential back-off (up to 6 attempts). Retries never create duplicate rows or charges.
  • Clean failures: private, banned or quarantined subreddits are skipped with a note in RUN_SUMMARY; if OAuth credentials are rejected, the run falls back to the public path.
  • Monitoring: health-checked every 6 hours on the Apify platform.

Proxy & routing

We tested every Apify proxy pool so you don't have to (Nov 3, 2026). Reddit currently refuses unauthenticated requests from all of Apify's shared pools — datacenter, residential, and Unblocker alike — and a browser User-Agent doesn't change that: the refusal comes back in ~30 ms, straight from the edge. So if you want keyless operation, bring your own premium proxies in proxyList — high-end residential pools sit outside Reddit's block ranges, and the router handles rotation, fail-over and per-proxy health for you. The zero-infrastructure route is a free Reddit app key (2 minutes, step 1 above), which talks to the official API and works from any IP. And if every request in a run is refused, the actor says exactly this in the run log and charges you nothing — no silent empty results.

Want requests to leave from your own IPs, or rotate exit IPs to spread load? Both the OAuth and public-JSON paths route through an optional proxy router (src/proxy.js); demo mode stays network-free.

  • Sources (precedence): your proxyList (http(s)://user:pass@host:port or host:port, one per line) > Apify-managed proxy (useApifyProxy + proxyGroups) > direct connection.
  • Rotation: round_robin (default), random, or sticky_window (hold one proxy for stickyWindow requests, default 15).
  • Failover & health: on 403/429/5xx/timeout the request retries on the next healthy proxy (up to proxyMaxRetries, default 2); proxies cool down with exponential back-off (base 30 s, cap 10 min) and are blacklisted after proxyMaxFailures (default 5) consecutive failures or a proxy-auth rejection (HTTP 407 / 401 with a proxy-auth header).
  • Safety: proxy credentials are memory-only — the summary shows a masked host:port and an effective_proxy_count; credentials are never logged or stored.

All proxy fields are optional; leave them empty for the direct path. Full details: ./PROXY.md.

How it compares

ApproachSetupOutputCost
This actorOptional app credentials (2 min), or none at allUnified post + comment schema, thread depth, dedupe, run stats$0.50 / 1k posts, $0.25 / 1k comments
DIY with PRAW / raw APIApp + code + hosting + schedulingWhatever you buildYour time and servers
HTML / unauthenticated JSON scrapingNoneBreaks when pages changeVaries
Data vendors / social listening suitesContractDashboards, often no raw rowsUsually monthly subscriptions

FAQ

Do I need a Reddit API key to use this Reddit scraper?

No key is required if you bring your own proxies (proxyList). Note that we tested Apify's managed proxy pools on Nov 3, 2026 and Reddit currently refuses them all — so the most reliable zero-infrastructure route is a free Reddit app: create one at https://www.reddit.com/prefs/apps, paste the client ID and secret, and the actor uses the official Data API from any IP. Demo mode returns a small uncharged sample either way.

Can I scrape all comments of a Reddit post?

Yes. Add the post URL; the actor reads the comment tree and expands collapsed "load more comments" branches until Max comments per post (up to 10,000) and Comment depth are reached.

Can I scrape a subreddit's top posts of the week or year?

Yes. Set Sort to top and Time filter to week, month, year or all. Reddit stops listings at about 1,000 posts per sort.

How do I scrape a Reddit user's posts and comments?

Add the username or profile URL under Usernames and choose posts, comments or both. Only public profile content is returned.

What happens with deleted or removed posts and comments?

By default they are skipped and not charged. With Include deleted / removed items on, they are saved with body and author set to null and isDeleted / isRemoved / removedBy filled, which keeps thread structure intact.

Why did my run not use my credentials?

If the supplied client ID / secret is rejected, the actor automatically falls back to the public JSON path so the run still completes. Check the run log for the reason and re-copy both values from https://www.reddit.com/prefs/apps if you want the OAuth path.

Can an AI agent use this Reddit API?

Yes. Through the Apify MCP server an agent can find it with search-actors, read the input schema and call it, for example "get this week's top posts and comments from r/datascience". See Integrations.

Something wrong?

Open an issue on the Issues tab; we aim to respond within 24 hours.

Integrations

  • API: POST https://api.apify.com/v2/acts/offgrid-labs~reddit-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN> with the input JSON as the body returns the rows directly (runs under 5 minutes).
  • Python / JavaScript: pip install apify-client / npm install apify-client, then client.actor("offgrid-labs/reddit-scraper").call(run_input={...}).
  • No-code: Apify integrations for Make, Zapier and n8n, plus Google Sheets, Slack, webhooks and Schedules.
  • MCP / AI agents: add https://mcp.apify.com?tools=offgrid-labs/reddit-scraper to your MCP client.

Changelog

  • 2026-11-03 · First release: subreddits (hot/new/top/rising/controversial + time filter), search (site-wide or within subreddits), post URLs with full comment trees and "load more" expansion, user profiles, unified schema, dedupe, deleted/removed handling, rate-limit handling with back-off, demo mode, RUN_SUMMARY with speed and retry stats. Credentials optional — official OAuth Data API when supplied, public JSON path with a request budget otherwise.
ActorWhat it does
Reddit Keyword MonitorNew posts and comments mentioning your brand or keywords since the last run, with highlights, sentiment and alert text
Tech Stack DetectorDetect the technologies of companies discussed on Reddit
Shopify ScraperProducts and prices from the stores people recommend on Reddit

// OFFGRID LABS ─────────────────────────────────────────────
// status: monitored 24/7 by a self-hosted agent swarm
// health checks: every 6h · auto-repair + rollback on failure
// sources: official public APIs and open data only
// support: open an issue — human-reviewed response within 24h
// ───────────────────────────────────────────────────────────