Reddit Scraper - Posts, Comments, Users & Virality Insights
Pricing
from $2.00 / 1,000 results
Reddit Scraper - Posts, Comments, Users & Virality Insights
Scrape Reddit posts, comments, user profiles & subreddits - no login or API key. Search any keyword or subreddit, pull full comment threads, and get a virality score, controversy score, engagement, sentiment & question signals on every post. Export JSON, CSV & Excel.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Kelopr_bk
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
6
Monthly active users
19 days ago
Last modified
Categories
Features
Share
👽 Reddit Scraper — Posts, Comments, Users, Communities & Virality Insights
Extract Reddit posts, comment threads, user profiles and subreddit (community) data at scale — no login, no API key, no browser. Point the Actor at a subreddit, a search keyword, or any Reddit URL (post, profile, or search page) and get clean, source‑linked records exported to JSON, CSV, Excel, or the API. 🚀
Every post is automatically scored with a 🔥 virality score and a ⚔️ controversy score, plus engagement velocity, sentiment and question signals — so you can sort straight to what matters instead of eyeballing a raw dump.
✅ Request‑only & reliable. Talks to Reddit's sanctioned OAuth surface (
oauth.reddit.com) with an anonymous, read‑only app token — not the IP‑reputation‑gatedwww.reddit.com/*.jsonendpoints that block most scrapers. That means it runs on cheap datacenter proxies and keeps working where plain.jsonscrapers get 403'd.
📑 Table of contents
- What you can do
- Workflows (modes)
- Inputs: three ways to point it at Reddit
- Quick‑start examples
- The flagship signals, explained
- Example output
- Output fields
- Discussion insights
- Filters & sorting
- Media downloads
- Results, tables & exports
- Limits & how collection stops
- Pricing
- Proxies & reliability
- Run it from the API
- Data honesty & legal
- FAQ
🎯 What you can do
- Market & audience research — pull every post in a niche subreddit, sorted by virality, to see what resonates right now.
- Brand & product monitoring — search Reddit for your brand, product or competitor and track mentions, sentiment and the hottest debates.
- Lead & community discovery — collect subreddit profiles (size, rules, posting policy) to find where your audience actually hangs out.
- Content & trend mining — grab top/hot/rising feeds with engagement velocity (
scorePerHour) to catch breakouts early. - Discussion & UX analysis — pull full comment threads with depth, author participation and question detection.
- Dataset building for ML / LLMs — export large, clean, deduplicated post + comment corpora with consistent schemas.
- Creator & user intelligence — collect public profiles with karma breakdown, submitted posts and comment history.
🧭 Workflows (modes)
Pick a Workflow and the Actor knows what to collect. CUSTOM unlocks the individual switches so you can mix result types.
| Workflow | Collects | Typical input |
|---|---|---|
| Posts | Subreddit feeds & keyword search results (with every post scored) | Subreddit, search keyword, or subreddit/search URL |
| Comments | Comment threads of matching posts, or a user's comment history | Post permalink, search keyword, or user URL |
| Users | Public profiles: karma, status, avatar, description | User profile URL or username search |
| Communities | Subreddit profile: description, members, rules, posting policy | Subreddit name or URL |
| Discussion insights | Posts + their comments + a question/participation summary | Post permalink or subreddit |
| Custom | Any combination — toggle posts / comments / users / communities individually | Anything above |
🔗 Inputs: three ways to point it at Reddit
You can mix all three in one run.
- Subreddits —
Python,r/Python, orhttps://www.reddit.com/r/Python/. Multi‑subreddit (Python+django) is supported. - Search keywords — one literal phrase per entry (
mechanical keyboard). Optionally restrict to one subreddit. - Reddit URLs (
startUrls) — full permalinks andredd.itshort links are accepted:- Post:
https://www.reddit.com/r/Python/comments/abc123/title/ - Profile:
https://www.reddit.com/user/spez/ - Subreddit:
https://www.reddit.com/r/dataisbeautiful/ - Search page:
https://www.reddit.com/search/?q=python
- Post:
Share links (
/s/…) must be expanded to the full permalink first — the Actor will tell you if you paste one.
⚡ Quick‑start examples
Top posts from a subreddit this week, with sentiment:
{ "mode": "POSTS", "subreddits": ["Python"], "sort": "top", "time": "week", "maxItems": 50, "sentiment": true }
Search all of Reddit for a keyword and grab the discussion:
{ "mode": "DISCUSSION_INSIGHTS", "searches": ["mechanical keyboard"], "maxItems": 200, "maxCommentsPerPost": 50 }
Scrape a single thread's comments:
{ "mode": "COMMENTS", "startUrls": [{ "url": "https://www.reddit.com/r/AskReddit/comments/abc123/example/" }], "maxCommentsPerPost": 200, "commentSort": "top" }
A user's public profile + post history:
{ "mode": "POSTS", "startUrls": [{ "url": "https://www.reddit.com/user/spez/" }], "maxItems": 100 }
Community profiles with rules:
{ "mode": "COMMUNITIES", "subreddits": ["python", "dataisbeautiful", "MachineLearning"] }
Everything at once (custom):
{"mode": "CUSTOM","subreddits": ["Python"],"searches": ["fastapi"],"searchCommunities": true,"scrapeComments": true,"maxCommentsPerPost": 20,"maxItems": 300}
🔥 The flagship signals, explained
Two numbers you won't find in a raw Reddit JSON dump. Both are 0–100, higher = stronger, computed on every post.
🔥 viralityScore — "is this blowing up?"
Blends four things, log‑scaled so a megathread doesn't break the scale:
| Component | Weight | Meaning |
|---|---|---|
| Velocity | 45% | Score gained per hour (scorePerHour) — recency‑aware |
| Volume | 35% | Total reaction (score + comments) |
| Vote quality | 12% | Upvote ratio — a clean 99% beats a contested 55% |
| Awards | 8% | Reddit awards received |
Sort descending to surface breakout posts the moment they pop.
⚔️ controversyScore — "is this a fight?"
Peaks when the vote is split (upvote ratio near 0.5) and the thread draws far more comments than upvotes. Returns nothing for tiny posts (needs score + comments ≥ 20). Sort descending to find the hottest debates.
Both scores are transparent, rule‑based math over observable counters — not an AI verdict.
analysisMethodon each record says so. A post withscore=14, a 55% upvote ratio and 60 comments will out‑rank a quiet 500‑upvote announcement on controversy — exactly as you'd expect.
Supporting engagement signals on every post/comment: scorePerHour, commentsPerHour, ageHours, engagementTotal, commentToScoreRatio, isHighEngagement.
📦 Example output
A single post record (trimmed to the headline fields — the full record carries ~70 fields plus native Reddit compatibility fields):
{"dataType": "post","id": "t3_1x1t161","title": "Python 3.15 Released","url": "https://www.reddit.com/r/Python/comments/1x1t161/python_315_released/","subreddit": "Python","subredditSubscribers": 1517656,"author": "treyhunner","flair": "News","postType": "text","score": 537,"upvoteRatio": 0.99,"numComments": 72,"totalAwards": 0,"createdAt": "2026-10-09T18:29:03+00:00","ageHours": 157.78,"scorePerHour": 3.404,"engagementTotal": 609,"isHighEngagement": true,"viralityScore": 39,"controversyScore": 7,"sentimentScore": 0.833,"sentimentLabel": "positive","wordCount": 283,"containsQuestion": false,"hasMedia": false,"bodyStatus": "present"}
🧩 Drop‑in compatibility. Each post also ships Reddit's native field names (
num_comments,upvote_ratio,created_utc,permalink,author_fullname, …) and common aliases (commentsCount,communityName,authorName,crawledAt). Pipelines built for other Reddit scrapers keep working without rewrites.
🗃️ Output fields
Missing values are omitted; 0 and false are kept as real values. Enable Include original source data (rawOutput) to also attach the full raw Reddit object under sourceData.
Post
| Group | Fields |
|---|---|
| Identity & text | id, parsedId, title, body, bodyHtml, bodyStatus, bodyLength, wordCount, url, contentUrl, domain, outboundUrlHost, postType, flair, isSelf |
| Author | author, authorId, authorFlair, authorPremium |
| Community | subreddit, communityName, subredditId, subredditSubscribers |
| Engagement | score, upVotes, upvoteRatio, numComments, numCrossposts, numDuplicates, totalAwards, gilded |
| ⭐ Signals | viralityScore, controversyScore, scorePerHour, commentsPerHour, ageHours, engagementTotal, isHighEngagement, commentToScoreRatio, containsQuestion |
| Sentiment (optional) | sentimentScore, sentimentLabel, sentimentMethod |
| Media | hasMedia, postType, imageUrls, videoUrls, videoUrl, isGallery, galleryCount, galleryImages, previewImage, mediaAssets, thumbnail, video width/height/duration |
| Flags & moderation | over18, spoiler, locked, archived, pinned, stickied, edited, editedAt, distinguished, isOriginalContent, removedByCategory, isRobotIndexable, content_flags |
| Timing | createdAt, createTime, scrapedAt, searchTerm |
Comment
id, parsedId, body, bodyHtml, bodyStatus, url, author, authorId, authorFlair, isSubmitter, subreddit, score, upVotes, controversiality, totalAwards, gilded, depth, isTopLevel, parentId, parentKind, postId, postTitle, postUrl, linkId, collapsed, scoreHidden, distinguished, stickied, edited, containsQuestion, wordCount, scorePerHour, ageHours, createdAt, createTime, scrapedAt, plus optional sentiment.
User
id, username, url, profileTitle, description, totalKarma, linkKarma, commentKarma, awardeeKarma, awarderKarma, isGold, isMod, isEmployee, verified, hasVerifiedEmail, acceptFollowers, isNsfw, followersCount, userIcon, snoovatarImg, bannerImg, createdAt, createTime. In USERS/CUSTOM you can also pull the profile's submitted posts and comment history.
Community (subreddit)
id, name, title, url, description, descriptionLong, descriptionHtml, submitText, membersCount, onlineUsersCount, subredditType, submissionType, lang, advertiserCategory, restrictPosting, restrictCommenting, wikiEnabled, suggestedCommentSort, quarantine, over18, content‑policy flags (allowImages, allowVideos, allowGalleries, allowPolls, spoilersEnabled, originalContentTagEnabled), rules (array), rulesCount, communityIcon, bannerImage, headerImage, createdAt, createTime.
🧠 Discussion insights
Choose Discussion insights (or use scrapeComments in Custom) to collect posts and their comment threads, with collapsed replies expanded. Alongside the records, a separate Discussion insights table summarizes each sampled thread:
sampleComments,questionComments,authorComments,authorSharePctquestionsWithoutSavedReplies— sampled questions that had no reply within the collected sample
A missing reply in the sample does not prove the question is unanswered on Reddit — it reflects only what was collected. These summaries are free; no separate analysis event is charged.
🗓️ Filters & sorting
| Control | What it does |
|---|---|
| Sort | relevance, hot, top, new, rising, comments (mapped to what each endpoint supports) |
| Time range | all, hour, day, week, month, year — for Top / search |
| Comment sort | top, new, controversial, old, qa, confidence (Best) |
| Posts after / before | Keep posts in a date window — YYYY-MM-DD or full ISO‑8601 |
| Comments after / before | Same, for comments |
| Publication cutoff / Only newer than | Exclusive cutoff as ISO date or Unix seconds/milliseconds |
| Only posts with flair | Keep only flaired posts |
| Strict keyword match | Keep only results containing every keyword in title/body |
| Include NSFW (18+) | Off by default |
| Remove duplicates | On by default — each item saved once per run |
Date cutoffs are exclusive and apply to posts/comments (not profile creation dates). Date‑only upper bounds include the whole UTC day. Invalid input returns a clear corrective message instead of silently scraping the wrong thing. Filtered and duplicate candidates are not billed and do not consume your result limit.
🖼️ Media downloads
- Download post media — saves up to 3 public Reddit CDN assets per post to the run's key‑value store (8 MB/file, 16 MB/run cap).
- Download user avatars — saves profile avatars within the same shared allowance.
Original media URLs are always included regardless. Oversized or failed downloads keep the source URL with an explanation. Downloads are restricted to Reddit's own CDNs and never send your API token.
📤 Results, tables & exports
Everything lands in the default dataset (Results), and is mirrored into focused, uncharged tables so you can export exactly what you need:
| Tab | Contents |
|---|---|
| Results | Every collected record |
| Posts / Comments / Users / Communities | One type each, no unrelated rows |
| Discussion insights | Per‑thread question & participation summary |
| Source issues | Unavailable/failed sources with reasons |
Run summary (OUTPUT) | Status, counts by type, stop reason, per‑source diagnostics, applied filters, proxy usage |
Export any tab to JSON, CSV, Excel, HTML or RSS, or pull it via the API.
🧮 Limits & how collection stops
- Max results (
maxItems) — total unique saved records across all sources/types.0= the 100,000 safety ceiling. - Max posts per source (
maxPostsPerSource) — cap per subreddit/search/profile; thread comments use their own allowance. - Max comments per post (
maxCommentsPerPost).
A run can also stop early on budget, time, or when a source is exhausted, rate‑limited or unavailable — the Run summary always states the exact stopReason. Reddit listings page up to ~1,000 items per feed and are not a guaranteed full historical archive; deleted/private/removed content cannot be recovered.
💵 Pricing
This Actor uses Pay‑per‑event. You are charged per successfully saved record in the default dataset (the Store panel shows the current rate), plus the standard Actor Start. The type‑specific tables (Posts/Comments/…) are free mirrors — they never double‑charge. Summaries and Source‑issues rows are not billed. Candidates removed by your filters or dedupe are not billed. Platform usage (compute/proxy) is billed separately per Apify's schedule.
Typical smoke‑test runs collect data in 3–20 seconds on datacenter proxies — this Actor is cheap to run.
🌐 Proxies & reliability
- Default: Apify datacenter proxy — cheap and sufficient, because access is authorized by OAuth token, not IP.
- Optional: set your own proxy group (e.g. Residential) in the Proxy field if you ever need it. There is no forced residential escalation that silently inflates cost.
- Built‑in retries with backoff, token refresh on expiry, per‑source isolation (one bad source never kills the run), request budgets and a no‑progress watchdog.
🔌 Run it from the API
Send the same input JSON to the Actor's run endpoint:
curl -X POST "https://api.apify.com/v2/acts/trakk~reddit-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{ "mode": "POSTS", "subreddits": ["Python"], "maxItems": 50, "sort": "top" }'
Then read the run's default dataset for all records, or the named posts / comments / users / communities datasets for focused exports. Works with the Apify API, JS/Python clients, webhooks, schedules and integrations (Make, Zapier, n8n, …).
⚖️ Data honesty & legal
- Collects public Reddit data only — no login, no private content, no messages.
- Reddit scores are platform figures that can change; they are not a verified tally of individual votes.
- Text is kept in its original language. Optional sentiment is an English word‑list heuristic, not AI; unsupported text is
unclassified. Question signals use visible?. - No bot/fake‑account/demographic conclusions are inferred.
- Respect Reddit's terms, content licensing and applicable privacy law (e.g. GDPR/CCPA). You are responsible for how you use collected data.
❓ FAQ
A run succeeded but saved nothing — why? Open Run summary. A recent date cutoff, an unavailable/private source, or a strict filter can legitimately yield zero. The per‑source counters show exactly what was discovered, filtered or skipped.
Do I need a Reddit account, API key or password? No. The Actor authorizes with an anonymous, read‑only app token automatically.
Can I search comments across all of Reddit? Comment search inspects comment text inside threads of matching posts (up to 10 posts, 100 comments each) — it is not Reddit's global comment index. For exact threads, pass post permalinks directly.
Can I collect just a profile? Yes — choose Users and enter a profile URL. Custom has separate switches for submitted posts and comment history.
How do I get the hottest or most controversial content first?
Export Results and sort by viralityScore or controversyScore descending.
Built for reliability: request‑only, OAuth‑authorized, no browser. Questions or a field you need added? Open an issue on the Actor page.