Reddit Scraper — Keyword & Subreddit Monitor avatar

Reddit Scraper — Keyword & Subreddit Monitor

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Reddit Scraper — Keyword & Subreddit Monitor

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

Alexandre Manguis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

10 days ago

Last modified

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 (maxAgeHours or postedAfter) 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 text field (title + body, plus comments if enabled) and a stable id and url for 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: maxAgeHours or postedAfter for scheduled runs.
  • Optional comments per post (includeComments, up to 100 per post).
  • Accepts subreddit names, r/name or full subreddit URLs.
  • Deduplicated across keywords, with matchedKeywords per 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

FieldTypeDefaultDescription
keywordsarray of strings—Search terms. Provide keywords and/or subreddits.
subredditsarray of strings—Names, r/name or URLs.
sortnew, relevance, top, comments, hotnewSort order.
timeFilterhour, day, week, month, year, allweekTime window when sort is not new.
maxAgeHoursinteger—Only posts from the last N hours.
postedAfterISO date-time—Only posts after this moment (overrides maxAgeHours).
includeCommentsbooleanfalseAttach the first comments of each post (one extra request per post).
maxCommentsPerPostinteger 1–10010Comments attached per post.
maxResultsinteger 1–1000050Maximum posts in total; each post is one billed result.
proxyConfigurationobjectApify ResidentialReddit 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):

FieldFill rateNotes
id, url, title, type100%Post id, permalink, title.
createdAt, scrapedAt100%ISO timestamps.
subreddit, author100%
text100%Title + body (+ comments when enabled).
matchedKeywords, source100%
isNsfw100%Always false (NSFW excluded by the feeds).
body96.7%Empty for link-only posts.
comments46.7%Only filled when includeComments is on: {id, author, body, createdAt}.
linkUrl30%External link of link posts.
score, numComments, flair0%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, matchedKeywords empty ([]), body 93.3%, linkUrl 26.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 ApifyClient
client = 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().items
print(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 planPrice 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 keywords or subreddits.
  • 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 / numComments are 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