← API Catalog
Apify·Async
Reddit Scraper - Posts, Comments, Search & Subreddits
Social$0.0018 / Result Saved
What it does
Scrape Reddit posts, comments, subreddits, user profiles, and keyword search results - no API key, no rate limits, no login. From $2 per 1,000 results, pay only for what you use. Full comment threads, 60+ fields per post, media and galleries. Works with AI Agents, MCP, n8n, Make, Zapier and more.
Returns: Scrape Reddit posts, comments, subreddits, user profiles, and keyword search results - no API key, no rate limits, no login. From $2 per 1,000 results, pay only for what you use. Full comment threads, 60+ fields per post, media and galleries. Works with AI Agents, MCP, n8n, Make, Zapier and more.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
proxy | json | No | Either use Apify proxy, or provide your own proxy servers. |
mcpMode | select | No | perPost: send one message/record per scraped post. summary: send a single digest of the whole run. |
mcpTool | text | No | Force a specific tool name on the connector (e.g. send_message, create_page, append_row). Leave empty to auto-detect the connector's write/notify tool. |
fastMode | boolean | No | Speeds up scraping of search page URLs at the cost of some accuracy — some posts may be missed. Disable if you need exact results matching what you see on Reddit. Search Keywords always use fast mode automatically. |
mcpTarget | text | No | Where to write — the destination ID the tool needs: a Notion database/page ID, a Google Sheet ID, a Slack channel, or owner/repo. Leave blank for connectors that post to a default location. Advanced shapes go in Arguments JSON below. |
startUrls | array | No | Add one or more Reddit URLs to scrape directly. Supports post URLs, subreddit URLs, user profile URLs, and search page URLs. The Search Keywords options above (sort, time, community filter) do NOT apply to these URLs. |
aiAnalysis | boolean | No | Adds AI-judged fields to posts and comments: sentimentLabel (positive / negative / neutral / mixed / uncertain), sentimentScore (-1 to 1), intent (question, seeking_recommendation, complaint, praise, purchase_intent, comparison, announcement, self_promotion, discussion), emotion (joy, excitement, anger, frustration, sadness, disappointment, fear, surprise, neutral), entities (brands, products and companies mentioned), and — for keyword-search results — relevanceScore (0 to 1). Posts also receive a contentCategory. The model understands Reddit slang and sarcasm; bot and moderator boilerplate is labelled uncertain free of charge. Each analyzed result is billed once as an analyzed_item event — see the Pricing tab. Requires a paid Apify plan and is ignored on free plans. |
mcpMessage | textarea | No | Template for each message. Use {{field}} placeholders from ANY post field — common ones: {{title}}, {{body}}, {{postUrl}}, {{authorName}}, {{score}}, {{upVotes}}, {{commentsCount}}, {{communityName}}, {{flair}}, {{createdAt}}. Nested/array fields work via dot or [index] paths: {{mediaAssets.0.url}}, {{galleryImages[0]}}, {{media.reddit_video.fallback_url}}. (Full field list in the README.) Missing fields render empty. |
searchSort | select | No | Controls how keyword search results are ranked. Only applies to Search Keywords, not Direct URLs. |
searchTime | select | No | Limit keyword search results to posts from a specific time window. Only applies to Search Keywords. |
includeNSFW | boolean | No | Include posts marked as Not Safe For Work in results. Applies to both Search Keywords and Direct URLs. |
mcpComments | select | No | When 'Scrape comments for each post' is on, choose how comments reach your app. Ignore: send posts only (comments still saved to the dataset). Bundle: attach each post's top comments inside its message. Separate: send each top comment as its own message/record. |
mcpMaxItems | number | No | Safety cap on how many posts are piped to the connector per run (perPost mode). Protects against flooding the destination. |
postedAfter | text | No | Only keep posts created on or after this date (interpreted as 00:00 UTC). When set, results are fetched newest-first (sort=new) and the search Time range is ignored. Reddit caps each listing at ~1,000 posts, so a window behind a very high-volume query may be only partly reachable. Applies to Search Keywords, subreddit URLs, the Full Subreddit Scrape, and user profiles. |
searchPosts | boolean | No | Include posts in keyword search results. |
searchTerms | array | No | Enter one or more keywords to search Reddit (e.g. "best laptops 2025", "AI news"). Each keyword runs as a separate search. Free Apify plans search the first 40 keywords per run (paid plans are unlimited) — extra keywords are skipped and noted in the run log. Leave empty if you only want to scrape Direct URLs below. |
customLabels | json | No | Define your own labels as {"label_name": "plain-language instruction"} and the AI evaluates each one on every analyzed post and comment, returning them under customLabels on each result. Example: {"mentions_pricing": "true if the text complains about pricing or cost", "competitor": "name the competing product mentioned, or none"}. Up to 5 labels; names must be short identifiers (letters, digits, underscore). Each label evaluated on each result is billed as one custom_label event — 3 labels on 1,000 results = 3,000 events. An evaluation that finds nothing (an empty/null answer, when your instruction allows it) is still an evaluation and is charged; nothing is charged for results the AI could not process. Paid add-on: requires a paid Apify plan; ignored on free plans. |
mcpArguments | json | No | Extra/override arguments merged into each tool call as JSON — e.g. {"channel": "#reddit"} for Slack. {{field}} placeholders work inside string values too, so you can nest live data into any shape the tool needs — e.g. Notion: {"properties": {"Title": {"title": [{"text": {"content": "{{title}}"}}]}, "Link": {"url": "{{postUrl}}"}}}. Use it to satisfy required fields or fully control the payload. |
mcpConnector | text | No | Pick an authorized MCP connector (Slack, Notion, GitHub, Airtable, Supabase, …) to receive the scraped posts. This is the recommended, secure path — your credentials stay in Apify and are never exposed to this actor (Apify's proxy injects them). Leave empty to scrape only. Create connectors under Settings → API & Integrations → MCP connectors, or inline here. |
mcpServerUrl | text | No | Advanced/testing only. Connect directly to a raw MCP server URL, bypassing the MCP Connector above. For real use prefer a connector — with a connector your credentials stay in Apify and are never seen by this actor. When set, this overrides the connector. |
postedBefore | text | No | Only keep posts created on or before this date (interpreted as the end of that day, 23:59:59 UTC). |
maxPostsCount | number | No | Maximum number of posts to save across all search results, subreddit pages, and user profiles. To pull an entire subreddit, use the Full Subreddit Scrape input and raise this limit. Max: 50000. |
onlyWithFlair | boolean | No | When enabled, drop posts with no flair and keep only those that have a flair assigned. Applies to Search Keywords, subreddit URLs, the Full Subreddit Scrape, and user profiles. |
subredditUrls | array | No | Subreddits to scrape in full. Enter subreddit names or links — e.g. AskReddit, r/AskReddit, or https://www.reddit.com/r/AskReddit/. This collects far more posts per subreddit than a standard scrape. It uses more requests, so runs take longer and cost more. Comments are also collected when 'Scrape comments for each post' is enabled — increase Max posts to allow more results per subreddit. |
commentedAfter | text | No | Only keep comments created on or after this date (UTC). Applies when comments are collected (comment search, or 'Scrape comments for each post'). |
mcpServerToken | text | No | Bearer token for the dev MCP server URL above. Note: a token entered here IS visible to the actor at runtime — for production use an MCP Connector instead, so credentials never leave Apify. Ignored unless the URL is set. |
searchComments | boolean | No | Include comments in keyword search results. |
commentedBefore | text | No | Only keep comments created on or before this date (UTC). |
withinCommunity | text | No | Restrict keyword search to a single subreddit. Accepts a bare name (developers), r/developers, or a full subreddit URL. Leave empty to search all of Reddit. Only applies to Search Keywords. |
maxCommentsCount | number | No | Maximum comments returned per search keyword (when 'Search for comments' is enabled). Does not affect per-post comment scraping. |
searchCommunities | boolean | No | Include communities (subreddits) in keyword search results. |
maxCommentsPerPost | number | No | Maximum comments to scrape per individual post (when 'Scrape comments for each post' is enabled). |
mcpCommentsPerPost | number | No | How many top comments (by score) to include per post when bundling or sending comments. Requires 'Scrape comments for each post'. |
maxCommunitiesCount | number | No | Maximum communities returned from keyword search (when 'Search for communities' is enabled). |
crawlCommentsPerPost | boolean | No | When enabled, comments will be collected for every post found from both Search Keywords and Direct URLs. This significantly increases run time and data output. |
Endpoints
GET
/v1/agents/resources/inspect/apify.harshmaur.reddit-scraperPublicPOST
/v1/agents/resources/estimate/apify.harshmaur.reddit-scraperPublicPOST
/v1/agents/resources/run/apify.harshmaur.reddit-scraperAgent keyGET
/v1/agents/resources/runs/{run_id}Agent keyQuick start
Run it with one Agent One Key over the OpenAI-compatible resource rail.
curl -X POST https://api.deva.me/v1/agents/resources/run/apify.harshmaur.reddit-scraper \
-H "Authorization: Bearer deva_i1_your_key_here" \
-H "Content-Type: application/json" \
--data '{
"params": {}
}'Related in Social
Instagram Scraper
Extract Instagram posts, reels, profiles, places, hashtags, carousels, and comments. Get data from Instagram using one or more Instagram URLs or search queries: content, context, metrics, metadata. Export scraped data, run the scraper via API, schedule and monitor runs or integrate with other tools.
Tweet Scraper V2 - X / Twitter Scraper
Lightning-fast search, URL, list, and profile scraping, with customizable filters. At $0.40 per 1000 tweets, and 30-80 tweets per second, it is ideal for researchers, entrepreneurs, and businesses! Get comprehensive insights from Twitter (X) now!
TikTok Scraper
Extract data from TikTok videos, hashtags, and users. Use URLs or search queries to scrape TikTok profiles, hashtags, posts, URLs, shares, followers, hearts, names, video, and music-related data. Export scraped data, run the scraper via API, schedule and monitor runs or integrate with other tools.
Instagram Profile Scraper
Scrape all Instagram profile info. Just add Instagram usernames, IDs or URLs and extract name, join date, number of followers, location, bio, website, related profiles, video&post count, latest posts. Export scraped data, schedule scraper via API, and integrate with other tools or AI workflows.
Instagram Post Scraper
Scrape Instagram posts. Just add one or more Instagram usernames and get your data in seconds including caption, metrics, images, mentions, coauthors, recent comments, sponsored status, video duration, views. Export scraped data, schedule scraper via API, integrate with other tools or AI workflows.
Facebook Posts Scraper
Extract posts, videos, and engagement metrics from Facebook pages. Get text captions, reactions, video transcripts, images, external links, collaborators, and more from Facebook pages and profiles. Export ad data, schedule runs via API, and integrate with other tools or AI workflows.