Reddit Brand Mention Monitor & Keyword Alerts
Pricing
from $1.00 / 1,000 new mentions
Reddit Brand Mention Monitor & Keyword Alerts
Monitor selected subreddits for genuinely new Reddit posts whose titles match your brand or keyword terms. Persistent per-term baselines prevent repeat billing, edited posts stay free, and every dimension gets free mention-velocity summaries. No Reddit login or API token.
Pricing
from $1.00 / 1,000 new mentions
Rating
0.0
(0)
Developer
Johnn Mottin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Monitor genuinely new Reddit brand and keyword mentions
Watch the subreddits that matter to your audience and receive only new Reddit posts whose titles match the brand or keyword terms you chose.
This Actor is stateful. Every term × subreddit combination keeps its own persistent set of already-seen Reddit post IDs.
The first successful observation creates a free baseline. Later runs emit NEW_MENTION only when a matching post ID has not been seen before.
An edited Reddit post keeps the same post ID, so editing the title or metadata does not create another billable mention.
No Reddit login. No Reddit API token. No browser automation. No AI matching in runtime.
Key features
- Stateful Reddit brand monitoring
- Keyword mention alerts
- Persistent term × subreddit baselines
- Genuinely new posts only
- Deduplication by Reddit post ID
- Edited posts are not re-billed
- Exact normalized title matching
- Case-insensitive matching
- Accent-insensitive matching
- Whole-term token-boundary matching
- Up to 25 terms
- Up to 15 subreddits
- Maximum 100 monitored dimensions
- 1–3 recent feed pages per subreddit
- One subreddit fetch reused across every term
- Public author when available
- Reddit permalink
- Outbound URL when available
- Post creation timestamp
- Free TERM_SUMMARY per dimension
- Free mention velocity
- Free RUN_SUMMARY
- Controlled Reddit request pacing
- Pay Per Event
Unofficial community Actor. Not affiliated with, sponsored by, or endorsed by Reddit, Inc. The Actor reads public subreddit Atom/RSS feeds and processes public post metadata. Source behavior, availability, rate limits, and public feed depth can change.
What this Actor is for
A Reddit scraper answers:
What posts are visible right now?
A stateful monitor should answer:
Which matching posts are new since I last checked?
This Actor is designed for:
- brand monitoring;
- competitor monitoring;
- product mentions;
- founder/company monitoring;
- PR and communications;
- social listening;
- customer research;
- community intelligence;
- buying-intent term monitoring inside selected communities;
- recurring Reddit dashboards;
- alert pipelines;
- research databases.
Important: this monitors selected subreddits, not all of Reddit
You choose the communities that matter.
Example:
r/technologyr/artificialr/SaaSr/startups
The Actor reads each selected subreddit's recent-post feed and matches your terms locally.
It does not claim to search every subreddit or every Reddit post.
This design makes the monitored scope explicit and avoids presenting a limited feed window as universal Reddit search coverage.
Important: title matching only
Version 1 matches monitored terms against:
post title
It does not match:
- comments;
- full self-post body;
- replies;
- usernames;
- flair;
- linked article content.
This is deliberate.
The current event contract stays deterministic and low-noise.
If your workflow needs comments or full post bodies, use a richer Reddit collection Actor instead.
Exact normalized term matching
Before comparison, titles and terms are normalized by:
- converting to lowercase;
- removing accents;
- replacing non-alphanumeric characters with spaces;
- collapsing the resulting token boundaries.
The term is then matched as a whole normalized phrase.
Example:
term:AItitle:Paid search tools
does not match just because:
paid
contains the letters:
ai
The comparison behaves like a token-boundary phrase match.
No fuzzy matching or synonyms
The Actor does not automatically expand:
JM Forge
into:
jmforgeJM-ForgeJohnatan's companyautomation company
unless normalization makes the literal term equivalent.
For synonyms, alternate brand names, abbreviations, or common misspellings, add them as separate terms.
This keeps every match explainable.
First run creates a free baseline
Every new:
term × subreddit
dimension starts with no state.
On the first successful read, matching post IDs are remembered but not emitted as new.
Example:
term: Anthropicsubreddit: artificialmatching posts already in recent feed: 7previous state: none
Result:
baseline: trueNEW_MENTION: 0
If a new matching post appears later:
baseline already existsnew post ID: 1wxyz12previously seen: no
the Actor can emit:
NEW_MENTION
Adding a new term later
Suppose an existing Task already monitors:
Anthropic
and you add:
Claude
The existing Anthropic dimensions keep their state.
Each new Claude × subreddit dimension creates its own free baseline the first time it is successfully read.
Adding a new subreddit later
The same principle applies.
If you add:
r/LocalLLaMA
to an existing Task, every monitored term gets a new first-sight dimension for that subreddit.
Existing subreddit dimensions keep their prior state.
Persistent deduplication
The primary identity is Reddit's post ID.
Example:
fullname:t3_1abcxyzpostId:1abcxyz
The persistent state stores matching post IDs for each term × subreddit.
If the same post appears again in a later run:
seenBefore
increases, but another NEW_MENTION is not created.
Edited posts are not new mentions
A Reddit post can have a later:
updatedAt
while retaining the same post ID.
This Actor treats:
same postId=same mention
An edit does not create a second billable event.
This is a new-post mention monitor, not an edit-history monitor.
Term label and state identity
A term can be entered as:
{"term": "anthropic","label": "Anthropic"}
The label is normalized into the state/event slug.
Two different terms must not use labels that normalize to the same slug.
The revised validator rejects such a collision explicitly instead of silently sharing state.
Example of a collision:
{"terms": [{"term": "Acme AI","label": "Acme"},{"term": "Acme Cloud","label": "ACME"}]}
Both labels normalize to:
acme
Use distinct labels when the actual monitored terms are different.
Who it's for
Brand and PR teams
Monitor communities where your customers, users, or industry already talk.
Use new mentions as an input to:
- media/community review;
- support escalation;
- reputation research;
- weekly reporting.
Founders and SaaS teams
Watch:
- company name;
- product name;
- competitor names;
- high-intent phrases.
Example terms:
notionlinearcrm softwarealternative to
Remember that matching occurs only in post titles.
Community teams
Monitor multiple communities without manually refreshing each subreddit.
Research teams
Build a stateful feed of newly appearing public posts around known terms.
Automation builders
Connect NEW_MENTION records to:
- Slack;
- Microsoft Teams;
- Discord;
- email workflows;
- n8n;
- Make;
- webhooks;
- Google Sheets;
- databases;
- BI tools;
- internal applications;
- downstream AI analysis.
Data source
The Actor uses public subreddit Atom/RSS feeds in the form:
https://www.reddit.com/r/<subreddit>/new.rss
It does not use Reddit OAuth or an authenticated account.
The current client can follow feed pagination with Reddit's after cursor.
Request economy
One subreddit feed fetch is reused across all terms monitored in that subreddit.
Example:
10 terms1 subreddit1 feed page
requires one initial subreddit feed request, not ten separate keyword requests.
With:
10 terms5 subreddits1 page each
the normal source work is approximately:
5 subreddit feed requests
before retries.
This is why the product has a separate:
term × subreddit
state dimension without making one HTTP request per dimension.
Request pacing
Reddit can rate-limit request bursts.
The client enforces a minimum spacing of:
2.5 seconds
between Reddit requests.
That floor is clamped in code and cannot be lowered by user input.
Retryable conditions use controlled backoff.
A non-retryable block is not bypassed through aggressive identity rotation or other evasion logic.
Input
Recommended example
{"terms": [{"term": "anthropic","label": "Anthropic"},{"term": "claude","label": "Claude"}],"subreddits": ["technology","artificial"],"maxPagesPerSubreddit": 1,"maxResults": 500,"proxyMode": "auto","maxRuntimeMs": 300000}
Input fields
| Field | Default | Description |
|---|---|---|
terms | required | Brands/keywords. String or { term, label }. Maximum 25 entries. |
subreddits | required | Communities to monitor. Maximum 15 entries. |
maxPagesPerSubreddit | 1 | Recent feed pages per subreddit. Range: 1–3. |
maxResults | 500 | Maximum billable NEW_MENTION records. Range: 1–5,000. |
proxyMode | auto | auto, residential, or none. |
maxRuntimeMs | 300000 | Hard runtime cap in milliseconds. |
debug | false | Additional diagnostics. |
Term input formats
Bare string:
{"terms": ["anthropic","claude"]}
Object with a display label:
{"terms": [{"term": "anthropic","label": "Anthropic"}]}
The term is the actual title-matching phrase.
The label controls the public display label and persistent term slug.
Subreddit input formats
All of these normalize to the same subreddit:
technologyr/technology/r/technology
Subreddit names are deduplicated case-insensitively.
Dimension cap
The persistent monitoring dimension count is:
terms × subreddits
Maximum:
100
Examples:
10 terms × 5 subreddits = 50 dimensions20 terms × 5 subreddits = 100 dimensions25 terms × 15 subreddits = 375 dimensions → invalid
Split larger portfolios across separate Tasks.
Request cap
The Actor also validates:
subreddits × maxPagesPerSubreddit
against a hard request budget of:
45
Example:
15 subreddits × 3 pages = 45
Retries have their own controlled margin in the runtime guard.
Proxy modes
auto
Default production mode.
Uses Apify proxy configuration without selecting a residential group.
residential
Uses Apify residential proxy infrastructure.
This can carry different platform infrastructure cost characteristics than the default route.
none
Direct connection.
Primarily useful for testing environments where direct Reddit requests work.
A direct route can be blocked; the Actor does not silently pretend that an unavailable source returned no mentions.
Output
The default Dataset can contain:
NEW_MENTIONTERM_SUMMARYRUN_SUMMARY
NEW_MENTION
This is the billable event record.
It is written only when:
- the term × subreddit dimension is past its first baseline;
- the post title matches the normalized term;
- the post has a stable Reddit post ID;
- that post ID is not already stored in that dimension's state;
- the result is admitted by runtime/spend limits.
Example
{"recordType": "NEW_MENTION","entityId": "listening:reddit:anthropic/1abcxyz","source": "reddit","term": "anthropic","termLabel": "Anthropic","postId": "1abcxyz","fullname": "t3_1abcxyz","title": "Anthropic launches a new developer feature","subreddit": "technology","author": "example_user","url": "https://example.com/article","permalink": "https://www.reddit.com/r/technology/comments/1abcxyz/example/","createdAt": "2026-08-31T12:00:00.000Z","observedAt": "2026-08-31T13:00:00.000Z"}
NEW_MENTION fields
| Field | Description |
|---|---|
recordType | NEW_MENTION. |
entityId | Stable JM Forge mention identity. |
source | reddit. |
term | Normalized term slug. |
termLabel | User-facing term label. |
postId | Reddit post ID used for deduplication. |
fullname | Reddit fullname such as t3_<id>. |
title | Public post title. |
subreddit | Community returned by the feed. |
author | Public author username when available. |
url | Outbound link when the feed supplies one; otherwise the permalink. |
permalink | Public Reddit post URL. |
createdAt | Post publication timestamp. |
observedAt | Actor observation timestamp. |
TERM_SUMMARY
Every successfully processed term × subreddit dimension receives a free summary.
It can include:
termtermLabelsubredditbaselinepostsInWindowmatchesInWindownewMentionsmentionsDeliveredseenBeforefeedWindowHoursmentionsPer24hobservedAt
This makes a quiet run visible without creating a billable mention event.
Mention velocity
When the fetched feed contains at least two valid post timestamps:
feedWindowHours
is calculated from:
newest createdAtminusoldest createdAt
The Actor then calculates:
mentionsPer24h=matchesInWindow / (feedWindowHours / 24)
Honest limitation
This is a deterministic rate calculated from the fetched recent feed window.
It is not Reddit-wide mention volume.
If the subreddit is so active that the read window is truncated, the number reflects only the fetched slice.
RUN_SUMMARY
The final run summary is free.
It can include:
recordsWrittenunitsRequestedunitsOkunitsFailedcapReasonqualityAlertsourceUnavailablewarningsunitsoutcomeKindbillableRecordsfreeRecordsbaselineDimensionshttpRequestshttp429httpRetriestopSubredditsOverallcostpricingLabel
topSubredditsOverall represents the subreddits with the most billable new mentions delivered in that run.
STATS
Operational diagnostics are also persisted in:
STATS
in the default Key-Value Store.
Depending on the run, STATS can expose:
- HTTP requests;
- retries;
- 429 responses;
- 5xx responses;
- baseline dimensions;
- completed dimensions;
- failed dimensions;
- billable records;
- free records;
- source health;
- quality warnings;
- runtime;
- caps;
- cost metrics.
Stateful storage
Each term × subreddit dimension keeps up to:
5,000 matching post IDs
in bounded persistent state.
The most recent retained IDs win as state grows.
For typical subreddit/term monitoring, this provides a long deduplication horizon.
Extremely high-volume matching dimensions can eventually age older IDs out of bounded state.
Feed depth
Each requested page can contain up to roughly:
100 recent entries
and the Actor accepts:
1–3 pages
per subreddit.
That means the monitoring window is finite.
A high-traffic subreddit can publish enough posts between schedules that an older matching post falls beyond the feed window before the Actor sees it.
For high-volume communities:
- use more feed pages;
- schedule more frequently;
- monitor fewer broad terms;
- inspect the free
feedWindowHours.
Scheduling
This Actor is intended for recurring execution.
Practical starting points:
hourlydaily
depending on subreddit activity.
The first run creates the baseline.
Later runs deliver only unseen matching post IDs.
Recommended scheduled workflow
- Choose the subreddits that matter.
- Add brand/keyword terms.
- Run once to establish free baselines.
- Save the input as an Apify Task.
- Open Schedules.
- Choose a cadence.
- Route future
NEW_MENTIONrecords downstream.
Possible destinations:
- Slack;
- Teams;
- Discord;
- email workflows;
- Google Sheets;
- n8n;
- Make;
- webhooks;
- databases;
- dashboards;
- support/triage systems.
Example competitor-monitoring input
{"terms": [{"term": "notion","label": "Notion"},{"term": "obsidian","label": "Obsidian"}],"subreddits": ["productivity","Notion","ObsidianMD"],"maxPagesPerSubreddit": 2,"maxResults": 200}
A downstream workflow can:
- notify a community team;
- save new posts to a database;
- send matching posts to a support queue;
- generate a weekly report;
- run sentiment/topic analysis downstream;
- compare mention velocity by community.
API
Run the Actor through the Apify API:
curl -s "https://api.apify.com/v2/acts/<YOUR_USERNAME>~reddit-brand-mention-monitor/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"terms":[{"term":"anthropic","label":"Anthropic"},{"term":"claude","label":"Claude"}],"subreddits":["technology","artificial"],"maxPagesPerSubreddit":1,"maxResults":200}'
Replace:
<YOUR_USERNAME><YOUR_APIFY_TOKEN>
with your Apify account values.
Integrations
Use with:
- Apify API;
- Tasks;
- Schedules;
- webhooks;
- n8n;
- Make;
- Google Sheets;
- Slack;
- Teams;
- Discord;
- databases;
- BI tools;
- internal applications;
- downstream AI agents.
Pricing
This Actor uses Pay Per Event.
The billing model contains:
apify-actor-startnew-mention
apify-actor-start
This is Apify's synthetic start event.
It is charged automatically by the platform when configured in the Actor's Pricing settings.
The Actor code does not manually call a custom start charge.
Do not create a second custom:
actor-start
event for this Actor.
new-mention
This is the custom billable value event.
It is charged once for each delivered:
NEW_MENTION
The Actor does not charge new-mention for:
- baseline matching posts;
- already-seen post IDs;
- edited posts with the same ID;
- non-matching posts;
TERM_SUMMARY;RUN_SUMMARY.
The Pricing tab on the Actor page is always the authoritative source for current prices.
What is free
Free by design:
first baselinere-seen matching postsedited matching postsTERM_SUMMARYRUN_SUMMARY
A quiet scheduled run can therefore produce monitoring summaries without a new-mention result charge.
The synthetic Actor-start event can still apply.
Cost control
Primary controls:
termssubredditsmaxPagesPerSubredditmaxResultsproxyModemaxRuntimeMs
Lower-cost monitoring
Use:
- fewer subreddits;
- one page when the feed window is sufficient;
- focused terms;
- default datacenter proxy;
- an explicit
maxResults.
Deeper monitoring
Increasing pages widens the recent-feed window but also increases:
- source requests;
- runtime;
- proxy/compute usage.
Run health
The Actor distinguishes source and input failures from legitimate quiet monitoring.
Possible controlled conditions include:
SUBREDDIT_NOT_FOUNDSOURCE_BLOCKEDHTTP_RATE_LIMITEDHTTP_TIMEOUTNETWORK_UNREACHABLEAPI_CONTRACT_CHANGEDALL_UNITS_FAILEDINVALID_INPUT
A failing subreddit does not automatically invalidate successfully processed subreddits.
If every supplied subreddit is not found, the run is classified as an input problem rather than a Reddit-wide outage.
Honest limits
Title-only matching
Comments and post bodies are outside the current matching contract.
Selected communities only
This Actor does not claim all-Reddit search coverage.
Finite feed window
The Actor sees only the recent posts available in the pages it fetched.
Public feed depth can change
Reddit controls the number and behavior of entries returned by its feeds.
High-traffic subreddits need a suitable schedule
If posts roll past the feed window between runs, an unseen mention can be missed.
Exact terms only
No stemming, synonym expansion, fuzzy matching, or semantic similarity is performed.
Edited posts are intentionally not events
Same Reddit post ID means same mention.
State is per term × subreddit
The same Reddit post can legitimately be billable once for multiple independent monitored terms if its title matches multiple terms.
That is the product contract: each monitored term is a separate listening dimension.
The same post can also be independent across subreddits
Reddit crossposts are separate Reddit post IDs.
They can therefore become separate mentions.
No comments
The Actor does not collect or monitor comment threads.
No Reddit engagement metrics
The current RSS contract does not provide the richer score/comment metadata available through other Reddit data sources.
Proxy mode affects infrastructure
Residential proxy usage can have higher platform infrastructure cost than the default datacenter route.
Public source behavior can change
Reddit can change:
- rate limits;
- feed availability;
- XML shape;
- blocking behavior;
- pagination behavior.
The Actor fails explicitly on unexpected source shape instead of fabricating mention data.
No AI in runtime
Term matching and deduplication are deterministic.
FAQ
Do I need a Reddit account?
No.
Do I need a Reddit API token?
No.
Does the Actor use Reddit OAuth?
No.
Does it use browser automation?
No.
What happens on the first run?
Every new term × subreddit dimension learns its currently matching post IDs as a free baseline.
Why did I get no NEW_MENTION on the first run?
That is expected.
Historical recent matches are not presented as novelty.
What happens if I add a new term?
That new term creates its own free baseline on every monitored subreddit.
What happens if I add a new subreddit?
Each term gets a new baseline for that subreddit.
Does it monitor comments?
No.
Does it match the post body?
No.
Title only.
Is matching case-sensitive?
No.
Does matching ignore accents?
Yes.
Does AI match paid?
No.
Can I add multiple spellings of a brand?
Yes.
Add them as separate terms with distinct labels/state identities where appropriate.
How many terms can I monitor?
Up to:
25
input terms.
How many subreddits?
Up to:
15
but the combined dimension count must remain at or below 100.
How many pages can I read?
Between:
1
and:
3
per subreddit.
Are edited posts charged again?
No.
Are summaries charged?
No.
Is a repeated matching post charged again?
No while its post ID remains in persistent state.
What does mentionsPer24h mean?
It is the number of matching posts in the fetched feed slice normalized to a 24-hour rate.
It is not Reddit-wide volume.
What happens if a subreddit does not exist?
The client treats an HTTP 404 as:
SUBREDDIT_NOT_FOUND
and that subreddit/dimensions fail explicitly.
Can I schedule it?
Yes.
Hourly or daily are common starting points, depending on feed activity.
What am I charged for?
The synthetic Apify start event configured in Pricing plus genuinely new matching NEW_MENTION records delivered after baseline.
Is this affiliated with Reddit?
No.
This is an independent community Actor using public Reddit feeds.
Support
For bugs, questions, or requested fields:
johnatan291303@gmail.com
You can also use the Issues tab on the Actor page.
Part of the JM Forge suite
Also from the same developer:
- Brand News Monitor & GDELT Mention Alerts — stateful global news monitoring.
- Steam Review Monitor & Player Feedback Alerts — stateful player-review monitoring.
- Google, Bing & YouTube Autocomplete Trend Monitor — stateful autocomplete-change monitoring.
JM Forge Actors remain independent tools.
Use this Actor for new Reddit post mentions inside communities you explicitly choose.