Reddit [$1๐Ÿ’ฐ]โšก Lightning avatar

Reddit [$1๐Ÿ’ฐ]โšก Lightning

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Reddit [$1๐Ÿ’ฐ]โšก Lightning

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

Abot API

Maintained by Community

Actor stats

0

Bookmarked

16

Total users

1

Monthly active users

2 days ago

Last modified

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 TypeFields Extracted
๐Ÿ“ PostsID, title, author, subreddit, score, upvote ratio, comments count, post type, URL, text content, flair, awards, NSFW/spoiler flags
๐Ÿ’ฌ CommentsID, author, body text, score, depth, parent ID, timestamps
๐Ÿ–ผ๏ธ MediaImage 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

  1. ๐ŸŽฏ Enter a target - Subreddit name (e.g., python, askreddit) or username
  2. ๐Ÿ”ข Set the limit - How many posts to scrape (1-1000)
  3. ๐Ÿ“‘ Choose sort order - new, hot, top, or rising
  4. โš™๏ธ Enable options - Comments, media extraction, or media download
  5. โ–ถ๏ธ 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

ParameterTypeDescriptionDefault
targetstringSubreddit name or username (required)-
isUserbooleanSet true if target is a usernamefalse
limitintegerMaximum posts to scrape (1-1000)10
sortstringSort order: new, hot, top, risingnew
timeframestringTime filter for top sort: hour, day, week, month, year, allall
scrapeCommentsbooleanExtract comments for each postfalse
commentsLimitintegerMax comments per post (1-500)100
extractMediaUrlsbooleanExtract image/video URLs from poststrue
downloadMediabooleanDownload media files to Key-Value Storefalse
proxyobjectProxy configuration (RESIDENTIAL recommended)-
resumeFromRunIdstringContinue one interrupted run/dataset without re-collecting or re-charging its posts-
incrementalModebooleanTurn on for recurring monitoring โ€” classifies each post as NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED against the previous runfalse
stateKeystringName a monitoring campaign explicitly; otherwise the state key is derived from target/isUser + sort + timeframe + media toggles-
emitUnchangedbooleanAlso return (and bill) UNCHANGED posts every runfalse
emitExpiredbooleanAlso return (and bill) posts no longer found, once a run fully scans the listingfalse

๐Ÿ” 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 by stateKey, 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:

MemorySpeedCost per 1000 posts
128 MB~2 posts/sec~$0.05
256 MB~3 posts/sec~$0.08

๐Ÿ’ก Note: Enabling scrapeComments or downloadMedia increases runtime and cost.

โœ… Features

FeatureSupported
๐Ÿ  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

  1. ๐Ÿ“ก Fetches posts via Reddit's JSON API (old.reddit.com/r/{sub}.json)
  2. ๐Ÿ”€ Falls back to mirrors if Reddit blocks the request (Redlib instances)
  3. ๐Ÿ” Extracts structured data from JSON responses
  4. ๐Ÿ’ฌ Optionally fetches comments for each post
  5. ๐Ÿ“ฅ Optionally downloads media to Apify Key-Value Store
  6. ๐Ÿ’พ 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

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.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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.