Reddit Scraper — Keyword & Subreddit Monitor
Pricing
from $1.00 / 1,000 results
Reddit Scraper — Keyword & Subreddit Monitor
Reddit scraper that monitors keywords and subreddits: returns post title, body, author, date, URL, matched keywords and optional comments as JSON, CSV or Excel. From $1.00 per 1,000 results.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Alexandre Manguis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
10 days ago
Last modified
Categories
Share
This Reddit scraper monitors keywords and subreddits and returns new posts as clean JSON, CSV or Excel: title, body, author, date, URL, matched keywords and a ready-to-embed text field. Optionally it attaches the first comments of each post. No Reddit account, login or API key is needed.
What does it do?
Give the Actor keywords, subreddits, or both. It reads Reddit's public Atom/RSS feeds, pages through them, removes duplicates (a post matching several keywords is returned once, with all matched keywords listed) and stores one dataset row per post.
- Keywords only: Reddit-wide search for each keyword.
- Subreddits only: the newest posts of each subreddit (or hot/top if you choose that sort).
- Keywords + subreddits: search restricted to those subreddits.
- Schedule it with a time window (
maxAgeHoursorpostedAfter) to get only what is new since the last run.
Who is it for / use cases
- Brand and competitor monitoring: get alerted to every new mention of your product or a rival's.
- Lead generation: find people asking for a tool, a recommendation or a solution you sell.
- Market and product research: collect real user discussions about a topic over time.
- AI / RAG pipelines: each row has a
textfield (title + body, plus comments if enabled) and a stableidandurlfor citation. - Community managers: track new posts in the subreddits you moderate or follow.
Features
- Search by keyword (Reddit search syntax such as
"exact phrase"works), by subreddit, or both. - Sort by newest, relevance, top, most comments or hot, with a time window.
- Monitoring mode:
maxAgeHoursorpostedAfterfor scheduled runs. - Optional comments per post (
includeComments, up to 100 per post). - Accepts subreddit names,
r/nameor full subreddit URLs. - Deduplicated across keywords, with
matchedKeywordsper post. - Results are saved to the dataset as they are collected; export as JSON, CSV, Excel, XML or HTML, or read through the API.
Known limits (please read)
Reddit's public feeds do not include votes, comment counts or flairs. The fields score, numComments and flair exist in the output but are always null (measured fill rate 0%), and isNsfw is always false because the feeds exclude NSFW posts by default. If you need vote counts, this Actor is not the right tool. Only posts are returned (no user profiles). A single query is capped at about 250 posts.
Input
| Field | Type | Default | Description |
|---|---|---|---|
keywords | array of strings | — | Search terms. Provide keywords and/or subreddits. |
subreddits | array of strings | — | Names, r/name or URLs. |
sort | new, relevance, top, comments, hot | new | Sort order. |
timeFilter | hour, day, week, month, year, all | week | Time window when sort is not new. |
maxAgeHours | integer | — | Only posts from the last N hours. |
postedAfter | ISO date-time | — | Only posts after this moment (overrides maxAgeHours). |
includeComments | boolean | false | Attach the first comments of each post (one extra request per post). |
maxCommentsPerPost | integer 1–100 | 10 | Comments attached per post. |
maxResults | integer 1–10000 | 50 | Maximum posts in total; each post is one billed result. |
proxyConfiguration | object | Apify Residential | Reddit rate-limits per IP; the Actor uses a fresh IP per request. |
Empty input (no keyword and no subreddit) fails with the message Invalid input: Provide at least one keyword or one subreddit.
Example input:
{"keywords": ["web scraping"],"subreddits": ["webscraping"],"sort": "new","maxAgeHours": 24,"maxResults": 20}
Output
Real item from a production run (long body shortened):
{"type": "post","id": "1wwjnov","url": "https://www.reddit.com/r/webscraping/comments/1wwjnov/local_clicktocsv_chrome_extension_no_cloud_no/","title": "Local click-to-CSV Chrome extension (no cloud, no account)","body": "I kept writing one-off scripts just to grab a table off a page. …","linkUrl": null,"subreddit": "webscraping","author": "IngenuityHuge5998","createdAt": "2026-10-03T10:10:25.000Z","score": null,"numComments": null,"flair": null,"isNsfw": false,"matchedKeywords": ["web scraping"],"source": "search","comments": null,"text": "Local click-to-CSV Chrome extension (no cloud, no account)\n\nI kept writing one-off scripts …","scrapedAt": "2026-10-03T23:02:27.775Z"}
Output fields & fill rates
Measured on a 30-item production run (keyword search):
| Field | Fill rate | Notes |
|---|---|---|
id, url, title, type | 100% | Post id, permalink, title. |
createdAt, scrapedAt | 100% | ISO timestamps. |
subreddit, author | 100% | |
text | 100% | Title + body (+ comments when enabled). |
matchedKeywords, source | 100% | |
isNsfw | 100% | Always false (NSFW excluded by the feeds). |
body | 96.7% | Empty for link-only posts. |
comments | 46.7% | Only filled when includeComments is on: {id, author, body, createdAt}. |
linkUrl | 30% | External link of link posts. |
score, numComments, flair | 0% | Not available in Reddit's public feeds; always null. |
Examples of each mode (production runs)
- Keywords + subreddits, small run: 5 posts returned, all with title, URL, author and date.
- Keywords only (30 posts): see the fill-rate table above.
- Subreddits only (
{"subreddits":["webscraping","r/datascience","https://www.reddit.com/r/SaaS/"],"sort":"hot","maxResults":15}): 15 posts,source=subreddit,matchedKeywordsempty ([]),body93.3%,linkUrl26.7%. All three name formats were accepted. - Monitoring (
{"keywords":["web scraping"],"subreddits":["webscraping"],"sort":"new","maxAgeHours":72,"maxResults":10}): 2 posts, only those inside the 72-hour window. A narrow window can legitimately return few or no posts. - Empty input: fails immediately with a clear message, without charge for results.
How to use via API
Replace <TOKEN> with your Apify API token.
curl
curl -X POST "https://api.apify.com/v2/acts/<USERNAME>~reddit-keyword-monitor/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords":["web scraping"],"sort":"new","maxAgeHours":24,"maxResults":20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<TOKEN>' });const run = await client.actor('<USERNAME>/reddit-keyword-monitor').call({keywords: ['web scraping'],subreddits: ['webscraping'],sort: 'new',includeComments: true,maxResults: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length);
Python
from apify_client import ApifyClientclient = ApifyClient("<TOKEN>")run = client.actor("<USERNAME>/reddit-keyword-monitor").call(run_input={"keywords": ["web scraping"],"subreddits": ["webscraping"],"sort": "new","includeComments": True,"maxResults": 20,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items))
For monitoring, create an Apify Schedule (for example hourly) with maxAgeHours slightly above the interval, and connect a webhook or integration to your alerts.
Pricing
Pay per result: one result = one post row. Platform usage is billed separately by Apify and is mostly residential proxy traffic: about 107 MB per 1,000 posts, roughly $0.86 per 1,000 posts at Apify's $8/GB residential rate (estimate; higher with includeComments).
| Apify plan | Price per 1,000 results |
|---|---|
| Free | $1.50 |
| Bronze | $1.30 |
| Silver | $1.15 |
| Gold and above | $1.00 |
Troubleshooting
- Run fails with "Provide at least one keyword or one subreddit": fill in
keywordsorsubreddits. - Fewer results than
maxResults: the query has fewer matching posts, the time window is narrow, or the roughly 250-post cap per query was reached. Add keywords or subreddits, or widen the window. - A subreddit returns nothing: it may not exist, be private or be banned; the Actor logs a warning and continues.
- Empty or blocked responses: Reddit rate-limits per IP. Keep the default residential proxy configuration; the Actor retries on a new IP.
score/numCommentsare null: expected, see Known limits.
FAQ
Do I need a Reddit account or API key? No. Only public feeds are read.
Can I get vote counts or comment counts? No, Reddit's public feeds do not expose them.
Does it scrape comments? Yes, optionally: the first N comments per post, without scores.
Can I monitor continuously? Yes, use an Apify Schedule with maxAgeHours or postedAfter.
Is scraping Reddit legal? The Actor collects only publicly visible data. Post authors are public usernames; handle personal data in line with GDPR and Reddit's terms, which are your responsibility as the user.
Keywords
reddit scraper, reddit keyword monitor, reddit monitoring, subreddit scraper, reddit posts scraper, reddit comments scraper, reddit search scraper, reddit brand monitoring, reddit lead generation, reddit data for RAG, social listening, reddit API alternative
Hashtags
#reddit #redditscraper #keywordmonitoring #sociallistening #brandmonitoring #leadgeneration #rag #llm #subreddit #apify