Reddit Brand Mention Monitor & Keyword Alerts avatar

Reddit Brand Mention Monitor & Keyword Alerts

Pricing

from $1.00 / 1,000 new mentions

Go to Apify Store
Reddit Brand Mention Monitor & Keyword Alerts

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

Johnn Mottin

Maintained by Community

Actor 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/technology
r/artificial
r/SaaS
r/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:

  1. converting to lowercase;
  2. removing accents;
  3. replacing non-alphanumeric characters with spaces;
  4. collapsing the resulting token boundaries.

The term is then matched as a whole normalized phrase.

Example:

term:
AI
title:
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:

jmforge
JM-Forge
Johnatan's company
automation 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: Anthropic
subreddit: artificial
matching posts already in recent feed: 7
previous state: none

Result:

baseline: true
NEW_MENTION: 0

If a new matching post appears later:

baseline already exists
new post ID: 1wxyz12
previously 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_1abcxyz
postId:
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:

notion
linear
crm software
alternative 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 terms
1 subreddit
1 feed page

requires one initial subreddit feed request, not ten separate keyword requests.

With:

10 terms
5 subreddits
1 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

{
"terms": [
{
"term": "anthropic",
"label": "Anthropic"
},
{
"term": "claude",
"label": "Claude"
}
],
"subreddits": [
"technology",
"artificial"
],
"maxPagesPerSubreddit": 1,
"maxResults": 500,
"proxyMode": "auto",
"maxRuntimeMs": 300000
}

Input fields

FieldDefaultDescription
termsrequiredBrands/keywords. String or { term, label }. Maximum 25 entries.
subredditsrequiredCommunities to monitor. Maximum 15 entries.
maxPagesPerSubreddit1Recent feed pages per subreddit. Range: 1–3.
maxResults500Maximum billable NEW_MENTION records. Range: 1–5,000.
proxyModeautoauto, residential, or none.
maxRuntimeMs300000Hard runtime cap in milliseconds.
debugfalseAdditional 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:

technology
r/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 dimensions
20 terms × 5 subreddits = 100 dimensions
25 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_MENTION
TERM_SUMMARY
RUN_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

FieldDescription
recordTypeNEW_MENTION.
entityIdStable JM Forge mention identity.
sourcereddit.
termNormalized term slug.
termLabelUser-facing term label.
postIdReddit post ID used for deduplication.
fullnameReddit fullname such as t3_<id>.
titlePublic post title.
subredditCommunity returned by the feed.
authorPublic author username when available.
urlOutbound link when the feed supplies one; otherwise the permalink.
permalinkPublic Reddit post URL.
createdAtPost publication timestamp.
observedAtActor observation timestamp.

TERM_SUMMARY

Every successfully processed term × subreddit dimension receives a free summary.

It can include:

term
termLabel
subreddit
baseline
postsInWindow
matchesInWindow
newMentions
mentionsDelivered
seenBefore
feedWindowHours
mentionsPer24h
observedAt

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 createdAt
minus
oldest 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:

recordsWritten
unitsRequested
unitsOk
unitsFailed
capReason
qualityAlert
sourceUnavailable
warnings
units
outcomeKind
billableRecords
freeRecords
baselineDimensions
httpRequests
http429
httpRetries
topSubredditsOverall
cost
pricingLabel

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:

hourly
daily

depending on subreddit activity.

The first run creates the baseline.

Later runs deliver only unseen matching post IDs.


  1. Choose the subreddits that matter.
  2. Add brand/keyword terms.
  3. Run once to establish free baselines.
  4. Save the input as an Apify Task.
  5. Open Schedules.
  6. Choose a cadence.
  7. Route future NEW_MENTION records 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-start
new-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 baseline
re-seen matching posts
edited matching posts
TERM_SUMMARY
RUN_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:

terms
subreddits
maxPagesPerSubreddit
maxResults
proxyMode
maxRuntimeMs

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_FOUND
SOURCE_BLOCKED
HTTP_RATE_LIMITED
HTTP_TIMEOUT
NETWORK_UNREACHABLE
API_CONTRACT_CHANGED
ALL_UNITS_FAILED
INVALID_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.