Reddit [$1๐ฐ]โก Lightning
Pricing
from $1.00 / 1,000 results
Reddit [$1๐ฐ]โก Lightning
From $1/1K. Scrape Reddit posts, comments, and media from any subreddit or user profile โ no login or API keys required. Search by keyword, sort by hot/new/top/rising, and optionally pull full comment threads and media URLs. Fast and resource-efficient.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
16
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
๐ค Reddit Scraper
Scrape Reddit posts, comments, and media from any subreddit or user profile. ๐ No login required, no API keys needed.
๐ What does Reddit Scraper do?
Reddit Scraper is a lightweight Apify Actor that extracts posts and comments from Reddit without using a browser. It uses Reddit's JSON API endpoints directly, making it fast and resource-efficient (runs on just 128-256MB memory).
Unlike browser-based scrapers, this Actor:
- โก Starts instantly (no browser launch time)
- ๐พ Uses minimal compute resources
- ๐ Handles rate limiting automatically
- ๐ช Supports resume on failure
๐ What data can you extract?
| Data Type | Fields Extracted |
|---|---|
| ๐ Posts | ID, title, author, subreddit, score, upvote ratio, comments count, post type, URL, text content, flair, awards, NSFW/spoiler flags |
| ๐ฌ Comments | ID, author, body text, score, depth, parent ID, timestamps |
| ๐ผ๏ธ Media | Image URLs, video URLs, gallery items, Reddit-hosted media |
๐ก Use cases
- ๐ Market Research - Monitor product discussions, brand mentions, and competitor analysis
- ๐ญ Sentiment Analysis - Gather opinions on topics, products, or events for NLP processing
- ๐ฐ Content Curation - Collect trending posts and media for content aggregation
- ๐ Academic Research - Build datasets for social media studies and behavioral analysis
- ๐ฏ Lead Generation - Find potential customers discussing relevant topics
- ๐ Trend Monitoring - Track emerging topics and viral content in specific communities
๐ ๏ธ How to use Reddit Scraper
- ๐ฏ Enter a target - Subreddit name (e.g.,
python,askreddit) or username - ๐ข Set the limit - How many posts to scrape (1-1000)
- ๐ Choose sort order -
new,hot,top, orrising - โ๏ธ Enable options - Comments, media extraction, or media download
- โถ๏ธ Run the Actor - Results are saved to the dataset
๐ Example: Scrape r/python
{"target": "python","limit": 100,"sort": "hot","scrapeComments": true,"extractMediaUrls": true}
๐ค Example: Scrape a user's posts
{"target": "spez","isUser": true,"limit": 50,"sort": "top","timeframe": "year"}
โ๏ธ Input parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
target | string | Subreddit name or username (required) | - |
isUser | boolean | Set true if target is a username | false |
limit | integer | Maximum posts to scrape (1-1000) | 10 |
sort | string | Sort order: new, hot, top, rising | new |
timeframe | string | Time filter for top sort: hour, day, week, month, year, all | all |
scrapeComments | boolean | Extract comments for each post | false |
commentsLimit | integer | Max comments per post (1-500) | 100 |
extractMediaUrls | boolean | Extract image/video URLs from posts | true |
downloadMedia | boolean | Download media files to Key-Value Store | false |
proxy | object | Proxy configuration (RESIDENTIAL recommended) | - |
resumeFromRunId | string | Continue one interrupted run/dataset without re-collecting or re-charging its posts | - |
incrementalMode | boolean | Turn on for recurring monitoring โ classifies each post as NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED against the previous run | false |
stateKey | string | Name a monitoring campaign explicitly; otherwise the state key is derived from target/isUser + sort + timeframe + media toggles | - |
emitUnchanged | boolean | Also return (and bill) UNCHANGED posts every run | false |
emitExpired | boolean | Also return (and bill) posts no longer found, once a run fully scans the listing | false |
๐ Resume & recurring updates
Two different features, both opt-in:
- Resume (
resumeFromRunId) continues ONE specific interrupted run: paste a previous run ID or dataset ID and this run skips posts it already collected. - Incremental mode (
incrementalMode) is for scheduling this actor on a recurring basis against the same subreddit/user. The actor remembers what it saw last time (keyed bystateKey, or an automatic key derived from target/isUser + sort + timeframe + media toggles) and adds four fields to every post row:
{"changeType": "NEW","changedFields": [],"firstSeenAt": "2026-07-30T03:00:00Z","lastSeenAt": "2026-07-30T03:00:00Z"}
changeType is one of NEW, UPDATED, UNCHANGED, REAPPEARED, EXPIRED. UNCHANGED and EXPIRED posts are suppressed (not returned or billed) unless you turn on emitUnchanged / emitExpired. EXPIRED posts are only produced once a run has scanned the subreddit/user listing to its natural end โ a Post Limit cap, a block, or resumeFromRunId all skip EXPIRED detection for that run rather than risk a false tombstone. Comments never carry these fields in either mode โ incremental mode only classifies posts.
A vote or a new comment alone never marks a post UPDATED. Reddit's score, upvote ratio, and comment count drift constantly and on their own โ measured live, a set of posts re-fetched ~95 seconds apart already had a different score on 39% of them and a different upvote ratio on 75%, with nothing else about the posts changed. If those counters were compared, almost every post would classify UPDATED (or nothing would ever classify UNCHANGED) even when its actual content never changed, making incremental mode useless. So changeType/changedFields ignore score, upvote_ratio, and num_comments โ UPDATED means the post's title, text, URL, flair, or NSFW/spoiler flags actually changed. Every post you get back โ NEW, UPDATED, or UNCHANGED โ still carries its current, live score/upvote_ratio/num_comments; they're just not part of what triggers UPDATED.
๐ Proxy configuration
Reddit blocks most datacenter IPs. For reliable scraping, enable Apify Proxy with RESIDENTIAL group:
{"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
๐ค Output examples
๐ Post output
{"type": "post","id": "1hj2abc","title": "What's your favorite Python library?","author": "pythonista123","subreddit": "python","created_utc": "2024-12-20T15:30:00","permalink": "https://reddit.com/r/python/comments/1hj2abc/...","url": "https://reddit.com/r/python/comments/1hj2abc/...","score": 1542,"upvote_ratio": 0.96,"num_comments": 234,"num_crossposts": 5,"selftext": "I've been exploring different libraries and wanted to hear what everyone's using...","post_type": "text","is_nsfw": false,"is_spoiler": false,"flair": "Discussion","total_awards": 3,"has_media": false,"media_urls": {"images": [],"videos": [],"galleries": []}}
๐ฌ Comment output
{"type": "comment","comment_id": "kx7y9z","post_permalink": "https://reddit.com/r/python/comments/1hj2abc/...","post_title": "What's your favorite Python library?","parent_id": "t3_1hj2abc","author": "dev_guru","body": "Pandas is absolutely essential for data work. Can't imagine doing analysis without it.","score": 89,"created_utc": "2024-12-20T16:45:00","depth": 0,"is_submitter": false}
๐ผ๏ธ Image post with media
{"type": "post","id": "1hk3def","title": "My home office setup","post_type": "image","has_media": true,"media_urls": {"images": ["https://i.redd.it/abc123.jpg","https://preview.redd.it/xyz789.jpg"],"videos": [],"galleries": []},"media_downloaded": true}
๐ฐ Cost estimation
This Actor uses minimal resources:
| Memory | Speed | Cost per 1000 posts |
|---|---|---|
| 128 MB | ~2 posts/sec | ~$0.05 |
| 256 MB | ~3 posts/sec | ~$0.08 |
๐ก Note: Enabling
scrapeCommentsordownloadMediaincreases runtime and cost.
โ Features
| Feature | Supported |
|---|---|
| ๐ Subreddit scraping | โ Yes |
| ๐ค User profile scraping | โ Yes |
| ๐ฌ Comments extraction | โ Yes |
| ๐ Media URL extraction | โ Yes |
| ๐ฅ Media file download | โ Yes |
| ๐ผ๏ธ Gallery support | โ Yes |
| ๐ Resume on failure | โ Yes |
| ๐ Incremental/recurring monitoring | โ Yes |
| ๐ Proxy support | โ Yes |
| ๐ No login required | โ Yes |
| ๐ No API key needed | โ Yes |
โ๏ธ How it works
- ๐ก Fetches posts via Reddit's JSON API (
old.reddit.com/r/{sub}.json) - ๐ Falls back to mirrors if Reddit blocks the request (Redlib instances)
- ๐ Extracts structured data from JSON responses
- ๐ฌ Optionally fetches comments for each post
- ๐ฅ Optionally downloads media to Apify Key-Value Store
- ๐พ Saves progress for resume capability on long scrapes
โ ๏ธ Limitations
- ๐ฆ Reddit rate limits apply (~100 requests per minute)
- ๐ Some subreddits may be private or quarantined
- ๐ Very old posts (>1000 in listing) may not be accessible via pagination
- ๐ฆ Media download is limited to 5 images + 2 videos per post to manage storage
โ FAQ
๐ Is it legal to scrape Reddit?
Web scraping publicly available data is generally legal. However, always review Reddit's Terms of Service and robots.txt. This Actor only accesses public data and respects rate limits.
๐ Why do I need a proxy?
Reddit blocks most datacenter IP addresses. Using Apify's RESIDENTIAL proxy group ensures reliable access.
๐ How is this different from Reddit's official API?
Reddit's official API requires registration, has strict rate limits (100 requests/minute for OAuth), and recently introduced paid tiers. This Actor uses public JSON endpoints with no authentication needed.
๐ Can I scrape private subreddits?
No, this Actor only accesses publicly available content.
๐ Where are downloaded media files stored?
Media files are saved to Apify's Key-Value Store with keys like media/{post_id}/image_0.jpg. You can access them via the Storage tab in Apify Console.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape โ the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record โ not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify โ Settings โ Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
