Reddit Brand & Keyword Monitor — New Mention Alerts
Pricing
from $0.00005 / actor start
Reddit Brand & Keyword Monitor — New Mention Alerts
Reddit keyword and brand monitor: posts with subreddit, author, link, sentiment, buying intent and AI relevance. No login or API key.
Pricing
from $0.00005 / actor start
Rating
0.0
(0)
Developer
Mohammed Samaan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Reddit Keyword Search Scraper + Brand Mention Monitor
Search Reddit for any keyword — your brand, a competitor, a product, a topic — and get the matching posts as clean JSON/CSV: title, text, subreddit, author, link and date — plus AI relevance, sentiment and buying-intent per post. Site-wide or limited to chosen subreddits, sorted by new, top, relevance or most-commented.
Switch on monitor mode and run it on a schedule to get only the mentions that are new since the last run — a cheap alternative to Mention.com or Brandwatch for founders, marketers and PR teams.
No login, no cookies, no API key and no browser: it reads Reddit's public search feed directly.
Speed, honestly: Reddit lets a public client make about one search every 15–30 seconds, so each keyword (or keyword × subreddit) takes ~20 s. Fine for scheduled monitoring of a handful of keywords; not built for hundreds per run.
Who it's for
- Founders and marketers tracking brand and competitor mentions
- Researchers mining subreddits for pain points, feature requests, sentiment
- Growth teams finding threads to engage with while they are still fresh
- Automation builders (n8n / Make / Zapier / MCP agents) that need Reddit posts as JSON
What you get
One row per post:
| Field | What it is |
|---|---|
keyword | Which of your keywords matched |
subreddit | r/… where the post lives |
title / text | Post title and body (first 2,000 chars) |
author | u/… |
score / upvoteRatio / comments / flair | Always empty — Reddit's public feed doesn't include them (kept so existing CSV/integrations don't break) |
isSelfPost / linkUrl | Text post vs link post (and the link) |
url / postId | Permalink and Reddit ID |
postedAt | ISO timestamp |
isNew | Monitor mode only: true when not seen in a previous run |
Example output
A real row from a run of this actor (keyword hubspot, 28 Sep 2026; text shortened here, the dataset holds up to 2,000 characters):
{"keyword": "hubspot","subreddit": "r/hubspot","title": "I’m building a tool that keeps HubSpot + QuickBooks reconciled so you don’t have to manually check them every week","text": "If you use HubSpot + QuickBooks, I’ve been hearing the same annoying problem over and over: The connector says things are synced, but people still end up manually checking deals against invoices and payments … (shortened)","author": "u/Consistent-Hearing26","score": null,"upvoteRatio": null,"comments": null,"flair": null,"isSelfPost": true,"linkUrl": null,"url": "https://www.reddit.com/r/hubspot/comments/1wsgiov/im_building_a_tool_that_keeps_hubspot_quickbooks/","postId": "1wsgiov","postedAt": "2026-09-28T14:43:47.000Z","isNew": null,"checkedAt": "2026-09-28T15:41:06.355Z","aiRelevance": 0.98,"aiSentiment": "neutral","aiIntent": "discussing","aiIntentScore": 0.82}
When a query finds nothing you get one status row instead (real example from a run on notion alternative, where none of the 5 posts Reddit returned were judged relevant):
{"keyword": "notion alternative","subreddit": "all","status": "NO RELEVANT MENTIONS","postsSeen": 5,"checkedAt": "2026-09-28T16:04:13.644Z"}
Input
{"keywords": ["Notion", "Obsidian app"],"subreddits": [],"sort": "new","maxPerQuery": 100,"onlyNew": false}
keywords— one search term per line.subreddits— optional; each keyword is searched in each subreddit listed.sort/time—new(default) for monitoring;top,relevanceorcommentswith atimewindow for research.maxPerQuery— up to 100 posts per keyword (per subreddit if set).onlyNew— off by default (scraper). On = monitor mode: the first run returns everything and saves a baseline; later runs return only new posts.excludeKeywords— cut noise. (minScorehas no effect: vote counts aren't in Reddit's public feed.)webhookUrl— POST a per-run summary to Slack / Zapier / Make.
Pricing
Pay per result: a small start fee plus a charge per row in the output dataset. Exact prices are on the Pricing tab. Status rows ("NO POSTS MATCHED" / "NO NEW MENTIONS" / errors) are also rows, so they are billed like any other row.
Monitor mode on a schedule
- Set
onlyNew: true,sort: "new"and yourkeywords. - Save as a Task and add an Apify Schedule (hourly or daily).
- Read the dataset in your workflow, or set
webhookUrlto get pushed.
Errors and limits
- No keywords: the run fails at once with "Provide at least one term in
keywords". Nothing is collected. - Nothing found: each query that yields no rows writes one status row instead:
NO POSTS MATCHED,NO NEW MENTIONS(monitor mode, nothing new since last run) orNO RELEVANT MENTIONS(the AI step judged every post off-topic).postsSeensays how many posts Reddit returned before filtering. - Reddit throttling (429): the actor reads Reddit's public search feed, which allows roughly one request per 20-30 seconds per IP. Requests are paced at 20 s; on a 429 it waits 30 s and retries, up to 5 attempts per query. If Reddit still refuses, that query gets an
ERROR: rate-limited ...row and the run moves on to the next one. Fewer keywords per run avoids this. - Other failures: any other HTTP error (for example
ERROR: http 403) or a 25-second timeout is written as anERROR: ...status row for that query only. The rest of the run still completes, so results can be partial. - Empty fields are expected:
score,upvoteRatio,commentsandflairare always empty because the public feed does not carry them, sominScorehas no effect. - No AI key available: the
ai*fields stay empty and no post is dropped for relevance. - Cost behaviour: the live pricing charges a small start fee plus one charge per row in the output dataset, so a status row ("NO POSTS MATCHED" / "NO NEW MENTIONS") or an
ERRORrow is charged like any other row. If your max-charge cap is reached the run stops early and keeps what it has. See the Pricing tab for exact prices. - Webhook: a failed
webhookUrlcall is logged as a warning and never fails the run.
FAQ
Why ERROR: rate-limited? Reddit throttles unauthenticated search
traffic. The actor waits and retries automatically for ~2.5 minutes per query;
if it still fails, run fewer keywords per run.
Does it return comments? Posts only.
Send results to Notion (new, Sep 2026)
Authorize Notion once in Apify Console → Settings → API & Integrations → MCP connectors (choose Notion, sign in). Then pick that connector in Notion connector and paste the link of any Notion page in Notion page to create the table in. The first run creates a table inside that page and fills it with the Reddit mentions (up to 500 rows per run; the full set is always in the dataset). To keep adding to the same table on later runs, paste the table ID from the log into Existing Notion table ID. This Actor never sees your Notion login: Apify's connector proxy holds it. If the Notion step fails, your dataset results are still delivered and the reason is logged.
Use it from an AI agent (MCP)
Add this Actor to any MCP client (Claude, Cursor, VS Code) with one URL:
https://mcp.apify.com?tools=leadharbor/reddit-brand-keyword-monitor
Or call it through the Apify API with an input like this:
{"keywords": ["notion alternative","airtable alternative"],"subreddits": [],"maxPerQuery": 25}
Returns one row per Reddit post: title, text, subreddit, link, AI relevance, sentiment and buying intent. Results land in the run's default dataset (JSON, CSV or Excel). No login or API key is needed for the sites it reads, and pay-per-event pricing works with Apify's x402 agent payments.
API usage
Run it from your own code with an Apify API token. The input below is this actor's prefilled example.
curl (runs the actor and returns the dataset items):
curl -X POST "https://api.apify.com/v2/acts/leadharbor~reddit-brand-keyword-monitor/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["Notion","Obsidian app"],"sort": "new","time": "month","maxPerQuery": 50,"onlyNew": false}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("leadharbor/reddit-brand-keyword-monitor").call(run_input={"keywords": ["Notion","Obsidian app"],"sort": "new","time": "month","maxPerQuery": 50,"onlyNew": False})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Changelog
28 Sep 2026 — Only real mentions: strict keyword match and AI off-topic filter now on by default; profile posts labelled; buyer max-charge cap; optional Notion output; MCP agent section. Plus 5 public example tasks with their own pages.
More from leadharbor
- Google Maps Scraper — MX-Checked Business Email Leads
- Website Contact Extractor
- Bulk Email Verifier
- App Store Reviews Scraper + Monitor
- Shopify Products Scraper + Price Drop & Restock Monitor
- Local Review Booster
- YouTube Scraper
- Airbnb Scraper
- LinkedIn Jobs Scraper
- USA Business Email Finder
- UK Business Email Finder
- UAE Business Email Finder
- UAE Property Broker Contacts
Using this actor? A quick review helps other buyers find it: reddit-brand-keyword-monitor
Only real mentions (fixed 28 Sep 2026)
Reddit's own search is fuzzy: it returns posts that never mention your keyword. This Actor now keeps only posts whose title
or text contain every word of the keyword (strictMatch, on by default), and drops posts the AI judges off-topic
(dropIrrelevant, on by default). Profile posts show as u/name (profile) in subreddit. Turn strictMatch off if you want Reddit's raw fuzzy results.
AI relevance & intent fields (Sep 2026)
| Field | Values |
|---|---|
aiRelevance | 0–1: is the post really about your keyword (e.g. Notion the app, not "the notion of…") |
aiSentiment | positive / negative / neutral / mixed toward the keyword |
aiIntent / aiIntentScore | none / discussing / evaluating / ready (0–3) — how close the author is to buying, switching or cancelling |
Turn on Drop off-topic posts (AI) to remove posts with aiRelevance below 0.5. AI fields are empty if the AI service is unavailable; the scrape never fails because of it.
Related actors
- Disposable Email & Domain Checker — Flags throwaway and free-provider email domains using 5 merged public lists. $0.30 per 1,000 checks.
- Domain Trust Check — 0-100 trust score for a domain from domain age, SSL, SPF/DKIM/DMARC and disposable-domain lists. $2.50 per 1,000 domains.
- Website Contact Extractor — Pulls emails, phone numbers and social links from website URLs.
- Telegram Channel Scraper — Public Telegram channel posts: text, views, dates, media links. $1.50 per 1,000 messages.
- Substack Scraper — Substack post metadata, dates, reactions and authors from public archives. $0.90 per 1,000 posts.