Reddit Scraper Pro avatar

Reddit Scraper Pro

Pricing

Pay per event

Go to Apify Store
Reddit Scraper Pro

Reddit Scraper Pro

Reddit scraper for automation workflows. Track keywords across Reddit or inside chosen communities, monitor subreddits, score posts with AFINN sentiment and pull full comment threads. Flat JSON - title, body, author, subreddit, score, flair, timestamps, matched keywords - for n8n and Zapier.

Pricing

Pay per event

Rating

5.0

(1)

Developer

WebDataLabs

WebDataLabs

Maintained by Community

Actor stats

0

Bookmarked

174

Total users

10

Monthly active users

8 days ago

Last modified

Share

Reddit Scraper Pro - Posts, Comments & Sentiment Analysis

Reddit scraper built for scheduled automation. Monitor subreddits, track keywords with sentiment analysis, scrape comments, and integrate with n8n or Zapier.

Apify Actor

✨ Key Features

  • 🎯 Rate limiting and backoff - Request throttling with exponential backoff against Reddit's limits, plus optional residential proxy support
  • 🔄 State Management - No duplicate posts across scheduled runs (tracks 10k recent post IDs)
  • 📊 Sentiment Analysis - Built-in NLP using AFINN-165 (positive/negative/neutral classification)
  • 🔔 Webhook Integration - Direct n8n/Zapier support for real-time alerts
  • 💬 Comment Scraping - Configurable depth (0-5 levels) for deep analysis
  • 💰 Predictable Pricing - Transparent pay-per-post model (see current pricing in the Apify Console when starting a run)
  • ⚡ Incremental Scraping - Only fetch new posts since last run for efficient scheduled automation

🎯 Use Cases

Brand Monitoring with Sentiment Analysis

{
"searchMode": "keyword",
"keywords": ["YourBrand", "YourProduct"],
"subreddits": ["webdev", "SaaS"],
"analyzeSentiment": true,
"webhookUrl": "https://n8n.io/webhook/reddit-alerts",
"maxAgeHours": 24
}

Result: Daily alerts when your brand is mentioned, with sentiment context (positive/negative/neutral).

Subreddit Monitoring for New Posts

{
"searchMode": "subreddit",
"subreddits": ["webdev", "programming", "javascript"],
"maxItemsPerSubreddit": 100,
"minUpvotes": 10,
"maxAgeHours": 24
}

Result: Daily scrape of high-quality posts (10+ upvotes) from last 24 hours. Schedule every 24 hours.

Competitor Tracking Across Reddit

{
"searchMode": "keyword",
"keywords": ["Competitor1", "Competitor2"],
"subreddits": ["webdev", "SaaS", "startups"],
"minUpvotes": 5,
"analyzeSentiment": true,
"includeComments": true,
"commentDepth": 1
}

Result: Track competitor mentions with engagement metrics, sentiment, and top-level comments.

Trend Analysis with Comments

{
"searchMode": "keyword",
"keywords": ["AI", "ChatGPT", "GPT-4", "Claude"],
"maxItemsPerSubreddit": 500,
"analyzeSentiment": true,
"includeComments": true,
"commentDepth": 2
}

Result: Deep analysis of AI trends with comment discussions (2 levels deep).

📥 Input Configuration

Quick Start (Default Settings)

Just click "Start" to test with default configuration:

{
"searchMode": "keyword",
"keywords": ["AI", "ChatGPT", "web scraping"],
"subreddits": ["webdev", "programming", "technology"],
"maxItemsPerSubreddit": 50
}

Search Modes

1. Keyword Search (recommended for automation) Search all of Reddit (or specific subreddits) for keywords:

{
"searchMode": "keyword",
"keywords": ["Apify", "web scraping"],
"subreddits": ["webdev", "programming"]
}

Leave subreddits empty to search all of Reddit.

2. Subreddit Monitoring (subreddits is required in this mode) Work inside specific communities:

{
"searchMode": "subreddit",
"subreddits": ["webdev", "javascript"],
"keywords": ["Apify"]
}
  • With keywords - each community is searched for your keywords through Reddit's own search, which matches post titles and post bodies. Multi-word keywords are searched as a phrase. Results come back newest-first.
  • Without keywords - you simply get the newest posts of each community.
  • keywords_matched on every row tells you which of your keywords literally appear in that post; an empty list means Reddit's search returned it as a related match.

Which mode should I use?

Pick Keyword Search when you care about a topic or brand wherever it appears; pick Subreddit Monitoring when you care about everything happening in specific communities.

Your goalModeExample input
Every mention of your brand across RedditKeywordkeywords: ["YourBrand"], subreddits: []
A keyword, but only inside certain subredditsKeywordkeywords: ["ChatGPT"], subreddits: ["programming"]
Posts about a phrase inside certain communitiesSubredditsubreddits: ["webdev"], keywords: ["dark mode bug"]
Everything new in your communitiesSubredditsubreddits: ["django", "flask"]

Essential Parameters

ParameterTypeDefaultDescription
searchModeenum"keyword"keyword or subreddit
keywordsarray["AI", "ChatGPT", ...]Keywords to search/filter
subredditsarray["webdev", ...]Subreddits to monitor (without "r/")
maxItemsPerSubredditinteger50Hard cap on posts fetched, saved and charged — per subreddit in subreddit mode, per keyword x subreddit in keyword mode (1-10,000)
searchSortenum"relevance"Keyword-mode sort only; subreddit mode always fetches newest-first
minUpvotesinteger0Minimum upvotes filter (0 = keep everything)
maxAgeHoursinteger0Max post age in hours (0 = no age limit; 168 = 7 days)
includeCommentsbooleanfalseFetch comments (one extra request per saved post)
commentDepthinteger1Comment reply depth (0 = top-level only, up to 5)
analyzeSentimentbooleantrueEnable sentiment analysis
dedupeAcrossRunsbooleanfalseRemember delivered posts between scheduled runs and never re-charge them
webhookUrlstring-POST results to this URL

Advanced Filtering

Control data quality with filters:

{
"minUpvotes": 10,
"maxAgeHours": 24,
"includeComments": true,
"commentDepth": 2
}

📤 Output Schema

Each post includes comprehensive metadata:

{
"id": "01HQZX9K3P2VQWE8RTGBNM4567",
"platform": "reddit",
"type": "post",
"reddit_id": "abc123",
"subreddit": "webdev",
"subreddit_prefixed": "r/webdev",
"title": "Amazing new web scraping tool",
"body": "Just discovered Apify and it's incredible...",
"author": "username",
"url": "https://apify.com",
"reddit_url": "https://www.reddit.com/r/webdev/comments/...",
"score": 156,
"upvotes": 180,
"num_comments": 42,
"gilded": 2,
"sentiment_score": 5.2,
"sentiment_comparative": 0.35,
"sentiment_label": "positive",
"keywords_matched": ["Apify"],
"created_utc": "2025-10-16T10:00:00Z",
"flair": "Discussion",
"comments": [...],
"ingest_meta": {
"first_seen_at": "2025-10-16T11:00:00Z",
"scrape_run_id": "...",
"actor_run_id": "..."
}
}

Sentiment Analysis Fields

  • sentiment_score: AFINN score (-5 to +5, 0 = neutral)
  • sentiment_comparative: Normalized score per word
  • sentiment_label: positive, negative, or neutral

Example Sentiment Interpretation:

  • sentiment_score: 5.2, label: "positive" → Very positive post
  • sentiment_score: -3.8, label: "negative" → Negative sentiment
  • sentiment_score: 0.5, label: "neutral" → Neutral/mixed

📊 Dataset Views in Apify Console

The actor provides 3 optimized views:

  1. Overview - Main view with 8 key fields (title, subreddit, author, score, comments, sentiment, date, link)
  2. Engagement & Sentiment - Combined metrics for deeper insights (score, upvote ratio, awards, sentiment)
  3. Full Details - Complete dataset with all 43 fields for advanced analysis

🔗 Webhook Integration

n8n Workflow Example

  1. Create webhook trigger in n8n
  2. Configure Reddit Scraper Pro:
{
"searchMode": "keyword",
"keywords": ["YourBrand"],
"webhookUrl": "https://your-n8n.com/webhook/reddit",
"analyzeSentiment": true
}
  1. Process in n8n:
    • Filter by sentiment: sentiment_label === "negative"
    • Send negative mentions to Slack/email
    • Store all results in Airtable/Google Sheets
    • Create follow-up tasks in ClickUp/Asana

Zapier Workflow Example

Use Zapier's "Webhook by Zapier" trigger with the webhookUrl configuration.

Webhook Payload (Batch Mode)

Results are sent at the end of each run:

{
"type": "batch",
"timestamp": "2025-10-16T11:00:00Z",
"runId": "abc123",
"posts": [
{ /* post 1 */ },
{ /* post 2 */ }
],
"stats": {
"totalPosts": 42,
"totalComments": 180,
"keywordMatches": 38,
"sentimentDistribution": {
"positive": 15,
"negative": 8,
"neutral": 19
}
}
}

🔄 Incremental Scraping (opt-in)

Set dedupeAcrossRuns: true to make scheduled monitoring incremental:

  • No duplicates - posts already delivered by an earlier run are skipped and not charged again
  • Scoped per target - state is keyed by your search mode + subreddits + keywords, so different monitors do not interfere
  • Bounded - the last 10,000 post IDs are remembered

How it works:

  1. First run: saves the delivered post IDs
  2. Next run with the same subreddits/keywords: skips the ones already delivered
  3. A repeat run can therefore legitimately return zero new posts — the run log and the OUTPUT record say so explicitly

Leave it off (the default) for one-off runs where you want the full result set every time.

🧾 Run outcome record (OUTPUT)

Every run writes an OUTPUT record to its key-value store with status (SUCCESS / PARTIAL / NO_RESULTS / FAILED), how many posts were fetched vs actually saved, per-target results, and exactly why anything was dropped (too old, below the upvote floor, duplicate). A run that finds nothing says which input found nothing and why — it never reports success over an empty dataset.

💰 Pricing

Pay-Per-Event Model: Transparent pay-per-post pricing

You only pay for posts successfully scraped. See current pricing in the Apify Console when starting a run.

Plus: Apify platform costs:

  • Compute time (minimal for standard runs)
  • Residential proxy bandwidth (required for reliability)

Cost Optimization Tips:

  • Use maxItemsPerSubreddit to limit scraping
  • Set maxAgeHours to 24 for daily monitoring
  • Use minUpvotes filter (focus on quality content)
  • Disable includeComments unless needed (significantly reduces runtime)

🛡️ Built-in Anti-Blocking

Reddit blocks datacenter traffic, so this scraper routes through residential proxies by default. No setup needed on your side.

Cost: Residential proxy bandwidth is billed separately by Apify (see current proxy pricing in the Apify Console).

🕐 Rate Limiting & Reliability

Built for hands-off scheduled automation:

  • Request pacing tuned to Reddit's published rate limits
  • Automatic retries with exponential backoff on transient errors
  • Residential proxy rotation, so a blocked IP does not end the run

Best Practices:

  • Don't run multiple instances simultaneously
  • Schedule runs at least 10 minutes apart
  • Use state management to avoid reprocessing

Brand Monitoring

  • Frequency: Every 6-12 hours
  • Config: maxAgeHours: 12, analyzeSentiment: true, webhookUrl: "..."

Subreddit Monitoring

  • Frequency: Daily (every 24 hours)
  • Config: maxAgeHours: 24, minUpvotes: 5

Trend Analysis

  • Frequency: Weekly
  • Config: maxAgeHours: 168, maxItemsPerSubreddit: 500, includeComments: true

Competitor Tracking

  • Frequency: Daily
  • Config: maxAgeHours: 24, analyzeSentiment: true, webhookUrl: "..."

❓ FAQ

How do I scrape Reddit without an API key?

This scraper accesses public Reddit data directly — no authentication, API keys, or Reddit account required.

Can I use this with n8n or Zapier?

Yes! Enable the webhookUrl parameter to send results directly to n8n, Zapier, or Make. The scraper posts a JSON payload with all results and stats at the end of each run.

How accurate is the sentiment analysis?

The sentiment analysis uses AFINN-165, a lexicon of roughly 2,500 scored words. It is lexicon matching, not a language model, so it misses sarcasm, negation across clauses, and context-dependent meaning. Treat the score as a coarse positive/negative/neutral signal for spotting trends across many posts, not as ground truth on any single post.

What's the difference between keyword and subreddit mode?

  • Keyword mode searches all of Reddit (or specific subreddits) for posts matching keywords
  • Subreddit mode monitors specific subreddits and optionally filters by keywords

For brand monitoring, use keyword mode. For community monitoring, use subreddit mode.

Can I schedule this to run automatically?

Yes! Use Apify's built-in scheduler or integrate with n8n/Zapier for custom schedules. We recommend running every 6-12 hours for brand monitoring, or daily for subreddit monitoring.

Will I get duplicate posts across runs?

No! The state management system tracks the last 10,000 post IDs seen. On subsequent runs, already-seen posts are automatically skipped. This is critical for scheduled automation.

Do I need to configure proxies?

No — the scraper uses residential proxies automatically. Reddit blocks datacenter IPs, so residential routing is built in for reliability (proxy bandwidth is billed separately by Apify).

How many posts can I scrape per run?

Technically unlimited, but Reddit's API typically returns ~1,000 posts per subreddit. Use maxItemsPerSubreddit to control volume and cost.

Can I scrape private subreddits?

No, the unofficial JSON API only accesses public subreddits. Private/quarantined subreddits require authentication via Reddit's official API.

What format is the output?

JSON by default, but you can export to CSV, Excel, HTML, or XML. The output is flat (not deeply nested) for easy import to Google Sheets, databases, or automation tools.

🛠️ API Integration

Using Apify API (cURL)

curl -X POST https://api.apify.com/v2/acts/YOUR_USERNAME~reddit-scraper-pro/runs \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchMode": "keyword",
"keywords": ["Apify"],
"maxItemsPerSubreddit": 50
}'

Using Apify JavaScript Client

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('YOUR_USERNAME/reddit-scraper-pro').call({
searchMode: 'keyword',
keywords: ['Apify'],
maxItemsPerSubreddit: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Using Apify Python Client

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('YOUR_USERNAME/reddit-scraper-pro').call(
run_input={
'searchMode': 'keyword',
'keywords': ['Apify'],
'maxItemsPerSubreddit': 50,
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

🧪 Testing & Development

Quick Test with Default Input

Just click "Start" or use apify call with no input:

$apify call YOUR_USERNAME/reddit-scraper-pro

Local Development

cd reddit-scraper-pro
npm install
npm run build
# Test with pay-per-event billing
ACTOR_TEST_PAY_PER_EVENT=true ACTOR_USE_CHARGING_LOG_DATASET=true npm run dev

📝 Limitations

  • Rate Limits: Reddit enforces ~60 requests/minute (handled automatically)
  • Historical Data: Limited by Reddit's API (typically ~1,000 posts per subreddit)
  • Private Subreddits: Cannot access private/quarantined subreddits
  • Deleted Content: Cannot retrieve deleted posts/comments
  • Residential Proxies Required: Datacenter IPs are blocked by Reddit
  • Public Data Only: Accesses publicly available Reddit content; may need updates if Reddit changes its site

🤝 Support & Contact

  • Email: via Apify
  • Issues: Report bugs or request features via GitHub Issues
  • Documentation: This README + inline code comments

💡 Success Story

Use Case: "Alert me when r/webdev mentions 'Apify'"

Setup:

{
"searchMode": "keyword",
"keywords": ["Apify"],
"subreddits": ["webdev"],
"webhookUrl": "https://n8n.io/webhook/reddit-alerts",
"analyzeSentiment": true,
"maxAgeHours": 12
}

Schedule: Every 6 hours

Result: Instant Slack notifications when Apify is mentioned in r/webdev, with sentiment context (positive/negative/neutral). Perfect for brand monitoring and community engagement.


🔗 Explore More of Our Actors

💬 Social Media & Community

The full catalogue is at apify.com/webdatalabs.

🛒 E-commerce & Brand Monitoring

ActorDescription
Shopify Scraper ProExtract Shopify product data for competitor and brand monitoring
Etsy Scraper ProFast Etsy product scraper with ratings and reviews
Amazon Reviews ScraperExtract Amazon customer reviews for sentiment analysis

🏢 Business Intelligence

The full catalogue is at apify.com/webdatalabs.


🏷️ SEO Keywords

Reddit scraper, Reddit data extraction, scrape Reddit posts, Reddit API alternative, Reddit comment scraper, Reddit sentiment analysis, Reddit brand monitoring, Reddit automation, extract Reddit data, Reddit web scraping, Reddit post scraper, Reddit data mining, Reddit competitor analysis, Reddit keyword tracking, Reddit subreddit monitor, how to scrape Reddit, Reddit market research, Reddit trend analysis, Reddit automation tool, n8n Reddit integration, Zapier Reddit scraper, Make Reddit automation


Built with ❤️ by WebDataLabs | Powered by Apify | LICENSE


Need this data as a managed feed?

If you would rather receive this data on a schedule than run the Actor yourself, we can build and operate the feed: the fields you specify, the cadence you set, delivered to a dataset, S3, a webhook, or your database. Every scheduled run is checked against an agreed shape rather than assumed to be fine, missing values are reported as null instead of filled with placeholders, and repairing the collector when the source changes is covered by the monthly rate. Priced as a one-time setup fee plus a monthly rate, scoped in writing before anything is built.

Contact: support@webdatalabs.net

Leave a review

Is this actor saving you time? A quick review on the Store helps other people find it — and tells us which fields to add next. Rate this actor →

This actor is a general-purpose tool for analyzing publicly accessible web data. The user bears sole responsibility for ensuring their specific use complies with:

  • Applicable laws (GDPR/DSGVO, copyright law)
  • The target website's Terms of Service
  • Apify's Terms of Service

The provider (webdatalabs) expressly disclaims liability for any unauthorized or unlawful use. By using this actor, the user agrees to indemnify the provider against any third-party claims arising from their use of the data.


This tool is not affiliated with Reddit. All trademarks belong to their respective owners.