Reddit Brand & Keyword Monitor — New Mention Alerts avatar

Reddit Brand & Keyword Monitor — New Mention Alerts

Pricing

from $0.00005 / actor start

Go to Apify Store
Reddit Brand & Keyword Monitor — New Mention Alerts

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

Mohammed Samaan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

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:

FieldWhat it is
keywordWhich of your keywords matched
subredditr/… where the post lives
title / textPost title and body (first 2,000 chars)
authoru/…
score / upvoteRatio / comments / flairAlways empty — Reddit's public feed doesn't include them (kept so existing CSV/integrations don't break)
isSelfPost / linkUrlText post vs link post (and the link)
url / postIdPermalink and Reddit ID
postedAtISO timestamp
isNewMonitor 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, relevance or comments with a time window 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. (minScore has 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

  1. Set onlyNew: true, sort: "new" and your keywords.
  2. Save as a Task and add an Apify Schedule (hourly or daily).
  3. Read the dataset in your workflow, or set webhookUrl to 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) or NO RELEVANT MENTIONS (the AI step judged every post off-topic). postsSeen says 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 an ERROR: ... status row for that query only. The rest of the run still completes, so results can be partial.
  • Empty fields are expected: score, upvoteRatio, comments and flair are always empty because the public feed does not carry them, so minScore has 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 ERROR row 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 webhookUrl call 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 ApifyClient
client = 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


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)

FieldValues
aiRelevance0–1: is the post really about your keyword (e.g. Notion the app, not "the notion of…")
aiSentimentpositive / negative / neutral / mixed toward the keyword
aiIntent / aiIntentScorenone / 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.

  • 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.