Reddit Scraper - Posts, Comments, Subreddits & Users avatar

Reddit Scraper - Posts, Comments, Subreddits & Users

Pricing

from $1.50 / 1,000 results

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

Reddit Scraper - Posts, Comments, Subreddits & Users

Fast, reliable Reddit scraper. Extract posts, comments, subreddits & users from any subreddit without Reddit API keys or login. AI-ready JSON for LLM training, sentiment analysis, lead generation. Export JSON/CSV/Excel.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

deusex machine

deusex machine

Maintained by Community

Actor stats

2

Bookmarked

152

Total users

12

Monthly active users

3 hours ago

Last modified

Categories

Share

Reddit Scraper — Posts, Comments, Subreddits & Users API

⚠️ Update (September 1, 2026): important change. Reddit closed anonymous access to its .json endpoints and simultaneously restricted new Data API registrations. This scraper has been rebuilt on Reddit's public Atom feeds, which are still open and need no API key and no login.

What still works: posts, comments, search, all sort orders, pagination beyond 100 results, and every text/media field. What changed: Reddit's public feeds do not expose vote data, so score, upvoteRatio, numComments, flair, awards, isNSFW, isSpoiler, isPinned, numCrossposts and subredditSubscribers are now returned as null — deliberately null rather than 0, so you can tell "unknown" apart from "zero". If your pipeline filters or sorts on score, you need to adjust it.

Reddit Scraper is a fast, reliable Reddit data extraction tool that lets you scrape posts, comments, subreddits, and users from any subreddit or Reddit search query — without a Reddit API key and without login. Extract structured JSON data ready for LLM pipelines, AI training, sentiment analysis, lead generation, market research, and brand monitoring.

Unlike the official Reddit API, this scraper needs no OAuth setup and no app registration, which since 2026 Reddit only grants for moderation use cases. Just give it a list of subreddits or a search query and it returns clean, normalized Reddit data in JSON, CSV, or Excel.

Posts · Comments · Nested threads · Image galleries · Search any query · Pagination beyond 100 · Export to JSON/CSV/Excel

✨ Why use this scraper

The Reddit API is powerful, but it's also:

  • Rate-limited: 60 requests per minute per OAuth client, 10 posts per listing page.
  • Authenticated: Requires app registration, OAuth flow, and token refresh logic.
  • Closed: Since 2026, new Data API app registrations are restricted to moderation use cases.
  • Unpredictable: Terms-of-service changes have repeatedly broken third-party Reddit API consumers.

This Reddit scraper gives you:

  • No Reddit API key needed — extracts Reddit data from Reddit's public Atom feeds.
  • No login, no OAuth — scrape Reddit anonymously, no credentials to manage.
  • Paginates past 100 — up to 500 posts per source, with a configurable delay that respects Reddit's pace limits.
  • Structured output — normalized post and comment objects, stable field names (see the note above on vote data).
  • AI-ready JSON output — plug directly into LLM pipelines, RAG systems, or sentiment analysis models.
  • Multiple export formats — JSON, CSV, Excel (XLSX), or direct API access via the Apify Dataset API.
  • Fails fast, never silently — if Reddit stops answering, the run fails with a clear message instead of billing you for an empty dataset.

📤 Output fields

Every Reddit post is returned with 29 normalized fields covering text content, media, scoring, flairs, subreddit metadata, and timestamps. When comments are enabled, the scraper also returns the nested comment tree as structured JSON.

Post fields (29)

FieldDescription
idReddit post ID (e.g. t3_1s6e3dp)
subredditSubreddit name (e.g. technology)
titlePost title
authorReddit username of the post author
score⚠️ Always null — not exposed by Reddit's public feeds
upvoteRatio⚠️ Always null — not exposed by Reddit's public feeds
numComments⚠️ Always null — not exposed by Reddit's public feeds
urlReddit permalink to the post
selftextPost body for text posts (up to 5,000 chars)
thumbnailThumbnail preview URL
imageUrlsAll image URLs from galleries and image posts
mediaVideo URL + duration, or image URL
createdPost creation time (ISO 8601)
editedLast edit timestamp, or false
isVideoVideo post flag
isSelfText post (true) vs link post (false)
isGalleryMulti-image gallery post
domainSource domain (e.g. youtube.com, self.technology)
linkUrlExternal URL for link posts
flair⚠️ Always null — not exposed by Reddit's public feeds
awards⚠️ Always null — not exposed by Reddit's public feeds
isNSFW⚠️ Always null — not exposed by Reddit's public feeds
isSpoiler⚠️ Always null — not exposed by Reddit's public feeds
isPinned⚠️ Always null — not exposed by Reddit's public feeds
numCrossposts⚠️ Always null — not exposed by Reddit's public feeds
subredditSubscribers⚠️ Always null — not exposed by Reddit's public feeds
postTypeClassification: text, link, video, image, gallery
scrapedAtScraping timestamp (ISO 8601)
commentsArray of comments (when enabled)

Comment fields (10)

FieldDescription
idComment ID
authorCommenter Reddit username
bodyComment text (up to 2,000 chars)
score⚠️ Always null — not exposed by Reddit's public feeds
createdTimestamp (ISO 8601)
depth⚠️ Always null — not exposed by Reddit's public feeds
isSubmitter⚠️ Always null — not exposed by Reddit's public feeds
parentId⚠️ Always null — not exposed by Reddit's public feeds
controversiality⚠️ Always null — not exposed by Reddit's public feeds
repliesNumber of direct replies

🎯 Use cases

Reddit data powers some of the most valuable public datasets for AI, research, and market intelligence. Here's how teams use this Reddit scraper:

1. AI & LLM training data

Reddit posts and comments are a gold mine for training conversational AI, instruction-tuning LLMs, and building RAG systems. The scraper outputs clean JSON that drops straight into your embedding pipeline. Use the searchQuery input to filter for domain-specific Reddit data (e.g. medical, legal, finance).

2. Sentiment analysis & brand monitoring

Extract Reddit posts and comments mentioning your brand, product, or competitors. Feed them into VADER, RoBERTa, or an LLM and track sentiment trends over time. The scraper's comment threading means you capture full discussion context, not isolated quotes.

3. Lead generation

Search Reddit for people asking for solutions your product solves. The scraper supports filters like searchQuery: "best CRM for small business" or sort: top, timeFilter: month to find high-intent prospects. Combine with the author field to build contact lists.

4. Market research

Monitor entire subreddits (e.g. r/smallbusiness, r/saas, r/entrepreneur) for trending topics, pain points, and recurring questions. The scraper returns subreddit subscriber counts, post engagement, and time-based filters so you can segment by reach and recency.

5. Academic research

Researchers use Reddit data for computational social science, public health monitoring, and linguistic analysis. This scraper gives you reproducible, timestamp-stamped Reddit data without the friction of the Reddit API's OAuth flow.

6. Content discovery & trend spotting

Journalists, newsletter writers, and content marketers scrape Reddit to surface emerging topics before they hit mainstream media. Sort by rising or top/day to catch conversations at the right moment.

7. Competitor intelligence

Scrape Reddit discussions about competitor products to extract feature requests, complaints, and comparison threads. Use selftext and the comment bodies to prioritize signal over noise (vote data is not available from the public feeds).

🚀 How to use

Example 1 — Scrape hot posts from multiple subreddits

{
"subreddits": ["technology", "programming", "webdev"],
"maxPosts": 50,
"sort": "hot"
}

maxPosts applies per subreddit — this returns up to 150 Reddit posts total across the 3 subreddits.

Example 2 — Search across all of Reddit

{
"searchQuery": "best CRM for small business",
"maxPosts": 100,
"sort": "top",
"timeFilter": "month"
}

This searches Reddit globally for posts matching your query, sorted by Reddit's own ranking for the past month.

Example 3 — Get Reddit posts with nested comments

{
"subreddits": ["AskReddit"],
"maxPosts": 25,
"sort": "top",
"timeFilter": "week",
"includeComments": true,
"maxCommentsPerPost": 20
}

This returns 25 top posts from r/AskReddit this week, each with up to 20 nested comments (including replies up to depth 3).

Example 4 — Scrape Reddit from Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"subreddits": ["MachineLearning", "LocalLLaMA"],
"maxPosts": 200,
"sort": "top",
"timeFilter": "week",
"includeComments": True,
"maxCommentsPerPost": 25,
}
run = client.actor("makework36/reddit-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "·", item["created"])

Example 5 — Scrape Reddit from Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('makework36/reddit-scraper').call({
searchQuery: 'apify reddit scraper',
maxPosts: 50,
sort: 'relevance',
timeFilter: 'all',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} Reddit posts`);

Example 6 — Trigger a Reddit scraping run from cURL

curl -X POST "https://api.apify.com/v2/acts/makework36~reddit-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"subreddits": ["news"],
"maxPosts": 10,
"sort": "new"
}'
  1. Request routing — each subreddit or search query becomes a seeded request with its own session cookie and proxy IP.
  2. Public JSON endpoints — the scraper hits Reddit's public .json endpoints (e.g. /r/{sub}/hot.json) which return the same data the Reddit web UI consumes. No Reddit API key required.
  3. Proxy rotation — datacenter IPs are blocked by Reddit; the scraper rotates residential proxies and retries up to 12 times per request.
  4. Session persistence — working proxy + session cookie pairs are reused across subreddits to reduce block rates.
  5. Comment tree reconstruction — comment replies are fetched recursively and linked via parentId so you can rebuild the full thread.
  6. Schema normalization — Reddit's raw JSON is mapped to 29 clean fields with consistent types and ISO 8601 timestamps.

📥 Input

ParameterTypeDefaultDescription
subredditsarray[]List of subreddit names to scrape (no r/ prefix)
searchQuerystringSearch Reddit globally for this term
maxPostsinteger50Max posts per subreddit (1-500)
sortstringhotSort order: hot, new, top, rising, relevance
timeFilterstringdayTime range for top / relevance: hour, day, week, month, year, all
includeCommentsbooleanfalseFetch comments for each Reddit post
maxCommentsPerPostinteger10Comments per post (1-100), includes nested replies up to depth 3

📋 Output example

Each item in the dataset is a single Reddit post as a JSON object. When includeComments: true, each post includes a comments array.

{
"id": "t3_1s6gkmj",
"subreddit": "pics",
"title": "About 100,000 attended the No Kings protest in St. Paul, Minnesota",
"author": "katotooo",
"score": null,
"upvoteRatio": null,
"numComments": null,
"url": "https://www.reddit.com/r/pics/comments/1s6gkmj/about_100000_attended_the_no_kings_protest/",
"selftext": null,
"thumbnail": "https://preview.redd.it/oy94fh2hnvrg1.jpg?width=140&height=93",
"imageUrls": [
"https://preview.redd.it/oy94fh2hnvrg1.jpg?width=3024&format=pjpg",
"https://preview.redd.it/9pmbe5aqnvrg1.jpg?width=4032&format=pjpg"
],
"media": null,
"created": "2026-03-29T00:21:20.000Z",
"edited": false,
"isVideo": false,
"isSelf": false,
"isGallery": true,
"domain": "old.reddit.com",
"linkUrl": "https://www.reddit.com/gallery/1s6gkmj",
"flair": null,
"awards": null,
"isNSFW": false,
"isSpoiler": false,
"isPinned": false,
"numCrossposts": null,
"subredditSubscribers": null,
"postType": "gallery",
"scrapedAt": "2026-03-29T08:05:31.904Z",
"comments": [
{
"id": "od1rtqc",
"author": "YJSubs",
"body": "When I see Bernie, I thought, did you just identify him as bald eagle?",
"score": null,
"created": "2026-03-29T00:21:22.000Z",
"depth": 0,
"isSubmitter": false,
"parentId": "t3_1s6gkmj",
"controversiality": 0,
"replies": 1
},
{
"id": "od1s2fp",
"author": "rclonecopymove",
"body": "Same, he's bald but not very aquiline.",
"score": null,
"created": "2026-03-29T00:22:45.000Z",
"depth": 1,
"isSubmitter": false,
"parentId": "t1_od1rtqc",
"controversiality": 0,
"replies": 0
}
]
}

Below are three real examples of Reddit data returned by this scraper (anonymized).

Sample 1 — tech discussion post

{
"id": "t3_abc123",
"subreddit": "programming",
"title": "Why I switched from Postgres to SQLite for my side project",
"author": "indie_dev_42",
"score": null,
"upvoteRatio": null,
"numComments": null,
"flair": null,
"postType": "text",
"subredditSubscribers": null
}

Sample 2 — image gallery post

{
"id": "t3_def456",
"subreddit": "EarthPorn",
"title": "Sunrise over Torres del Paine, Patagonia",
"author": "nature_photog",
"score": null,
"upvoteRatio": null,
"numComments": null,
"postType": "gallery",
"imageUrls": ["https://preview.redd.it/....jpg"]
}

Sample 3 — video post with comments

{
"id": "t3_ghi789",
"subreddit": "nextfuckinglevel",
"title": "Robot parkour demo from Boston Dynamics",
"score": null,
"upvoteRatio": null,
"media": {"videoUrl": "https://v.redd.it/....mp4", "duration": 47},
"postType": "video",
"comments": [{"author": "user1", "body": "...", "score": null, "depth": 0}]
}

⚡ Performance

ScenarioCostTypical runtime
1,000 Reddit posts, no comments~$0.016~5-10 min
1,000 Reddit posts + 10 comments each~$0.05~12-18 min
3 subreddits × 50 posts~$0.003~40 sec
Full subreddit scrape (500 posts + 50 comments)~$0.08~15-25 min

Pricing follows the Apify Compute Unit model — you pay only for the compute used. No Reddit API subscription, no proxy add-ons, no hidden fees.

Tips to reduce cost:

  • Set includeComments: false if you only need post metadata.
  • Use a tight timeFilter (day or week) instead of all to avoid paginating deep archives.
  • Scrape specific subreddits instead of broad search queries when possible.

❓ FAQ

Does this Reddit scraper need a Reddit API key? No. It extracts Reddit data from public JSON endpoints with a stealth browser, no Reddit API key or OAuth required.

How is this different from the official Reddit API? The Reddit API has strict rate limits (60 req/min), requires OAuth, and caps listings at 10 posts per page. This scraper has no such limits, supports search and comment extraction out of the box, and returns richer data.

What does maxPosts mean? It's per subreddit, not global. 3 subreddits × 50 maxPosts = up to 150 Reddit posts.

How deep do comments go? Up to 3 levels: top-level (depth 0), replies (depth 1), replies-to-replies (depth 2). Each comment has a parentId so you can rebuild the thread.

Can I scrape NSFW subreddits? Yes, but results may include adult content. Use the isNSFW field to filter.

Is this legal? Scraping public Reddit data for research, journalism, and business intelligence is generally allowed under fair-use principles. Consult your legal team for your specific use case and review Reddit's User Agreement.

Can I schedule recurring Reddit scrapes? Yes. Use Apify's Scheduler to run this scraper hourly, daily, or weekly. Pair it with the Apify Webhooks to push new Reddit data to your own database.

📊 Comparison

Choosing the right Reddit scraper depends on what Reddit data you need, how often you need it, and whether you're willing to deal with the Reddit API's OAuth flow and rate limits. Here's an honest comparison:

FeatureThis Reddit ScraperOfficial Reddit APIReddit PRAW libraryGeneric web scrapers
Reddit API key required❌ No✅ Yes (OAuth)✅ Yes (OAuth)❌ No
Rate limitNone60 req/min60 req/minVaries
Comment threads✅ Nested up to depth 3✅ Full tree✅ Full tree❌ Usually not
Search across Reddit✅ Yes✅ Yes✅ Yes❌ Manual
Subreddit scraping✅ Multi-subreddit, parallel✅ One at a time✅ One at a time❌ Manual
Export to JSON / CSV / Excel✅ All three❌ JSON only❌ Python objectsVaries
Maintenance burdenApify handles itYou handle OAuth + retriesYou handle OAuth + retriesYou handle everything
Cost for 10K Reddit posts~$0.50Free but slowFree but slowFree + your dev time
Setup time<1 minute30-60 minutes15 minutesHours or days

When to use this Reddit scraper:

  • You need Reddit data fast, without setting up OAuth.
  • You want structured, normalized JSON without writing parsers.
  • You're feeding Reddit data into an AI / LLM pipeline.
  • You want to scrape multiple subreddits in parallel.
  • You need CSV / Excel export for non-engineers.

When to use the official Reddit API instead:

  • You're building a Reddit bot that posts, votes, or messages.
  • You need real-time WebSocket events.
  • You're fine with 60-requests-per-minute and OAuth setup.

💵 Pricing

The Reddit scraper is already among the cheapest Reddit data sources per post, but you can push it even lower:

  1. Turn off comments when you don't need them. includeComments: false cuts cost by ~3x.
  2. Scope timeFilter tightly. Scraping top/all pulls deep history; top/week is often enough.
  3. Prefer subreddits over searchQuery when possible. Search pages are heavier than subreddit listings.
  4. Schedule hourly instead of real-time. Reddit's new feed doesn't change fast enough to justify <15-min polling for most use cases.
  5. Dedupe across runs. Store Reddit post IDs in Redis / DynamoDB and skip posts you've already scraped.
  6. Cap maxCommentsPerPost smartly. 10-20 comments per post captures most of the signal; 100 is usually overkill.

📝 Changelog

  • 1.0 — Initial public release. 29 post fields, 10 comment fields, search and subreddit modes, nested comment threads, AI-ready JSON output, JSON/CSV/Excel export.