name: brand-mention-monitor description: Measures whether anyone is talking about TrueAdvertize on Reddit, X/Twitter, LinkedIn, Hacker News, YouTube, podcasts, or the open web. Different from geo-citation-monitor (which asks AI engines questions). Brand mentions are the upstream signal that drives AI citation rates. Uses Serper API. Runs weekly via the Sunday cron. Trigger phrases: run brand check, brand mention check, who is talking about TA, upstream signal, brand awareness. allowed-tools: Read Write Edit Bash AskUserQuestion
brand-mention-monitor
While geo-citation-monitor asks AI engines "do you cite TA when asked X?", this skill asks the WEB "is anyone naming TA at all?" Brand mentions are upstream of AI citations — every Reddit thread that names TrueAdvertize becomes training data and search context for the AI engines that get queried weekly.
Run weekly alongside the citation check. Cost: ~$0.03 per run via Serper API.
Output lives in content/brand-mention-log/.
When to use
- "Run the brand mention check"
- Weekly upstream-signal review
- After a backlink campaign placement (run 2 weeks later to see if the placement got picked up downstream)
- Before any "are we growing in awareness" status update to Sam
When NOT to use
- AI citation tracking — that's
geo-citation-monitor, different question, different cost profile - SEO ranking — that's Google Search Console, not this
- Real-time tracking — Serper indexes update on Google's schedule, daily runs waste API calls
How
Step 1: Confirm SERPER_API_KEY
The script reads .env.local at the repo root. Required:
SERPER_API_KEY(already wired for the blog-publish workflow)
If the key is missing, the run aborts before making any API calls.
Step 2: Run the script
Default — all queries:
node scripts/brand-mention-check.mjs
Smoke test — 3 queries:
node scripts/brand-mention-check.mjs --limit 3
The script prints ★ per brand mention found and · per empty result as it runs.
Step 3: Read the output
Two files get written:
content/brand-mention-log/<YYYY-MM-DD>.md — human-readable run log:
- Top line: total mentions found + unique URLs
- By-category table (where mentions landed — Reddit, X, LinkedIn, podcasts, openweb, etc.)
- Per-mention detail — title, URL, snippet, the query that found it
- New-this-week section (URLs not seen in last week's run, if applicable)
content/brand-mention-log/_trend.json — append-only rolling trend, one entry per run date. Tracks:
total_mentionsover timeunique_urlsover timeby_categorybreakdown- New URLs discovered per run
Re-running on the same date overwrites that date's entry.
Step 4: Interpret
Healthy first 90-day pattern:
- Week 1-2: 0-3 mentions total (mostly your own LinkedIn). Baseline.
- Week 4-8: 5-15 mentions. Backlink campaign placements + Reddit/X chatter from the published content start landing.
- Month 3: 30+ mentions across 4+ categories. Real awareness.
Worry signal: total mentions FLAT for 4+ weeks while citation rate is also flat. Means content is shipping but no one's amplifying it. Investment shifts to distribution (guest posts, podcasts, in-person events), not more content.
Concentration signal: if 90% of mentions are LinkedIn while every other category is at 0, distribution is single-channel. AI engines won't see you anywhere outside the LinkedIn graph (which most don't scrape deeply). Diversify.
Step 5: Update COO status
After each run, the Monday operating rhythm includes a brand-mention line:
"Brand mentions this week:
<N>. Up/flat/down vs last week. Concentrated in<categories>."
The query bank
Lives in .claude/skills/brand-mention-monitor/queries.json. Ten queries across seven categories:
- reddit — Reddit threads naming TA or Samuel
- x — X / Twitter posts (caught via web index, not the Twitter API)
- linkedin — Public LinkedIn articles + posts (caught via web index)
- hackernews — HN threads
- youtube — Videos and descriptions
- podcasts — Episode pages on Apple Podcasts + Spotify
- openweb — Anything else, excluding own site and LinkedIn (catches blogs, press, newsletters)
Each query is a Google-style search string passed to Serper. Result filtering: a result counts as a "mention" only if the title, snippet, or URL contains one of the brand patterns:
trueadvertizeTrue AdvertizeSamuel Roa(with optionalCardenas)
This avoids false positives from generic results.
Add new queries to the bottom of queries.json; retire old ones with retired: true (don't delete — preserves trend comparability).
Outputs
content/brand-mention-log/<date>.md— one per run, committed to git as the historical recordcontent/brand-mention-log/_trend.json— rolling trend JSON, committed- Console output during the run with per-query
★N/·markers
The cron
Fires every Sunday at 09:00 UTC via .github/workflows/weekly-brand-mention-check.yml. Same time as weekly-citation-check.yml so both upstream-signal files are dated identically and easy to compare side-by-side.
The cron commits the new dated log + updated trend JSON via a PR titled brand-mention-log: weekly run <date>. Append-only data — PR is safe to merge directly with no review.
Manual trigger: GitHub Actions tab → Weekly Brand Mention Check → Run workflow.
Required repository secret:
SERPER_API_KEY(already configured)
Anti-patterns
- Don't run daily. Serper indexes update on Google's schedule. Daily is wasted spend.
- Don't conflate brand mentions with AI citations. They measure different things. Use both, side-by-side. Brand goes up first; citations follow 2-4 weeks later.
- Don't react to a single mention. A single Reddit thread or one LinkedIn post is noise. A trendline rising over 4 weeks across multiple categories is signal.
- Don't change the query bank between runs without versioning. Add to the bottom, retire with a flag — never silently mutate, or the trend becomes uncomparable.
- Don't include mentions from trueadvertize.com itself in the count. The queries explicitly exclude the own domain via
-site:trueadvertize.com. Self-mentions aren't signal.
Source
- Internal tooling — built to close the brand-awareness measurement gap called out in the AEO/GEO COO conversation (2026-06-02).
- Pairs with [[geo-citation-monitor]] for the full upstream-to-downstream picture.
- Serper API documentation: serper.dev