Brand monitor skill
Brand monitoring and mention tracking via the Brand.dev API.
by OpenClaudia·MIT license·★ 705 Stars on the repo·GitHub ↗
npx degit OpenClaudia/openclaudia-skills/skills/brand-monitor#main ~/.claude/skills/brand-monitorChecked ·commit main
Files of Brand monitor
Show the full text347 lines
Brand Monitor
Track brand mentions, analyze sentiment, and discover PR opportunities using the Brand.dev API.
Prerequisites
Requires BRANDDEV_API_KEY set in .env, .env.local, or ~/.claude/.env.global.
echo "BRANDDEV_API_KEY is ${BRANDDEV_API_KEY:+set}"
If the key is not set, instruct the user:
You need a Brand.dev API key. Get one at https://brand.dev/ Then add
BRANDDEV_API_KEY=your_keyto your.envfile.
API Base
All requests go to https://api.brand.dev/v1/ with the header Authorization: Bearer {BRANDDEV_API_KEY}.
1. Brand Search
Search for mentions of a brand name across the web.
Endpoint
GET https://api.brand.dev/v1/brand/search
Parameters
| Param | Type | Description |
|---|---|---|
query |
string | Brand name or phrase to search |
limit |
int | Number of results (default 20, max 100) |
offset |
int | Pagination offset |
sort |
string | relevance or date |
from_date |
string | Start date (YYYY-MM-DD) |
to_date |
string | End date (YYYY-MM-DD) |
Example curl
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/brand/search?query=YourBrand&limit=20&sort=date"
Response Parsing
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/brand/search?query=YourBrand&limit=20" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
for m in data.get('results', []):
print(f\"Source: {m.get('source','')} | Title: {m.get('title','')} | Sentiment: {m.get('sentiment','n/a')} | Date: {m.get('published_at','')}\")
print(f\" URL: {m.get('url','')}\")
print()
"
2. Brand Info Lookup
Get structured brand information for any company or product.
Endpoint
GET https://api.brand.dev/v1/brand/info
Parameters
| Param | Type | Description |
|---|---|---|
domain |
string | Company domain (e.g., stripe.com) |
name |
string | Brand name (alternative to domain) |
Example curl
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/brand/info?domain=stripe.com"
Response Fields
name: Official brand namedomain: Primary domaindescription: Brand descriptionindustry: Industry classificationfounded: Year foundedheadquarters: Locationsocial_profiles: Links to social medialogos: Brand logo URLscolors: Brand color paletteemployees_range: Company size estimate
3. Logo Detection
Detect brand logos in images across the web.
Endpoint
GET https://api.brand.dev/v1/logo/search
Parameters
| Param | Type | Description |
|---|---|---|
brand |
string | Brand name to search for |
domain |
string | Filter to specific domain |
limit |
int | Number of results |
Example curl
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/logo/search?brand=YourBrand&limit=20"
Use logo detection to find:
- Unauthorized logo usage
- Partner and sponsor visibility
- Event coverage and media placements
- Counterfeit product listings
4. Mention Tracking
Set up ongoing tracking for brand mentions.
Create a Monitor
POST https://api.brand.dev/v1/monitors
Body
{
"name": "My Brand Monitor",
"keywords": ["YourBrand", "Your Brand", "yourbrand.com"],
"exclude_keywords": ["unrelated term"],
"sources": ["news", "blogs", "social", "forums", "reviews"],
"languages": ["en"],
"notify_email": "[email protected]"
}
Example curl
curl -s -X POST -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
-H "Content-Type: application/json" \
"https://api.brand.dev/v1/monitors" \
-d '{
"name": "Brand Alert",
"keywords": ["YourBrand"],
"sources": ["news", "blogs", "social"],
"languages": ["en"]
}'
List Monitors
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/monitors"
Get Monitor Results
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/monitors/{monitor_id}/mentions?limit=50&sort=date"
5. Sentiment Analysis
Analyze sentiment of brand mentions.
Endpoint
GET https://api.brand.dev/v1/brand/sentiment
Parameters
| Param | Type | Description |
|---|---|---|
query |
string | Brand name |
from_date |
string | Start date |
to_date |
string | End date |
granularity |
string | day, week, or month |
Example curl
curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/brand/sentiment?query=YourBrand&from_date=2024-01-01&to_date=2024-03-31&granularity=week"
Sentiment Scores
- Positive (> 0.3): Praise, recommendations, positive reviews
- Neutral (-0.3 to 0.3): Factual mentions, news coverage
- Negative (< -0.3): Complaints, criticism, negative reviews
6. Competitor Mention Comparison
Compare brand mention volume and sentiment against competitors.
Workflow
- Search mentions for your brand and each competitor
- Compare mention counts over the same time period
- Compare sentiment distributions
- Identify sources where competitors get mentioned but you do not
# For each brand, get mention counts
for brand in "YourBrand" "Competitor1" "Competitor2"; do
count=$(curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \
"https://api.brand.dev/v1/brand/search?query=${brand}&limit=1" \
| python3 -c "import json,sys; print(json.load(sys.stdin).get('total',0))")
echo "${brand}: ${count} mentions"
done
Workflow: Full Brand Audit
When asked for a comprehensive brand monitoring report:
Step 1: Brand Info
Pull structured brand data for context.
Step 2: Mention Volume
Search for brand mentions over the last 30/90 days. Count total mentions and break down by source type.
Step 3: Sentiment Analysis
Get sentiment trends. Flag any negative spikes and investigate root causes.
Step 4: PR Opportunities
From mention data, identify:
- High-authority sites that mention competitors but not you
- Journalists who cover your industry
- Trending topics where your brand could contribute
- Unanswered questions about your brand on forums
Step 5: Logo/Visual Presence
Search for logo appearances. Flag unauthorized usage.
Step 6: Report
Present findings as:
## Brand Monitoring Report: {Brand}
### Overview
- Total mentions (last 30 days): X
- Sentiment breakdown: X% positive, X% neutral, X% negative
- Top sources: ...
### Sentiment Trend
[Weekly trend data]
### Top Positive Mentions
1. [Source] - [Title] - [URL]
2. ...
### Negative Mentions Requiring Attention
1. [Source] - [Title] - [URL] - [Issue summary]
2. ...
### PR Opportunities
1. [Publication] covers [topic] - pitch angle: ...
2. [Journalist] recently wrote about [topic] - pitch angle: ...
### Competitor Comparison
| Metric | Your Brand | Competitor A | Competitor B |
|--------|-----------|-------------|-------------|
| Mentions | ... | ... | ... |
| Positive % | ... | ... | ... |
| Top Source | ... | ... | ... |
### Action Items
- [ ] Respond to [negative mention]
- [ ] Pitch [publication] about [topic]
- [ ] Update brand listing on [platform]
Error Handling
| Status | Meaning |
|---|---|
| 401 | Invalid or expired API key |
| 403 | Insufficient permissions for this endpoint |
| 404 | Resource not found (check monitor ID) |
| 429 | Rate limit exceeded - wait and retry |
| 500 | Server error - retry after a few seconds |
Tips
- Use exact brand name + common misspellings as keywords
- Exclude your own domain to avoid self-mentions
- Set up monitors for competitor brands too
- Check mentions weekly at minimum; daily during launches or crises
- Export negative mentions to a spreadsheet for customer support follow-up
| 1 | |
| 2 | name brand-monitor |
| 3 | description > |
| 4 | Brand monitoring and mention tracking via the Brand.dev API. Use when asked to |
| 5 | monitor brand mentions, track sentiment, find PR opportunities, detect logo |
| 6 | usage, or analyze brand presence online. Trigger phrases: "brand monitoring", |
| 7 | "mention tracking", "brand sentiment", "PR opportunities", "logo detection", |
| 8 | "brand.dev", "brand mentions", "media monitoring". |
| 9 | |
| 10 | |
| 11 | # Brand Monitor |
| 12 | |
| 13 | Track brand mentions, analyze sentiment, and discover PR opportunities using the Brand.dev API. |
| 14 | |
| 15 | ## Prerequisites |
| 16 | |
| 17 | Requires `BRANDDEV_API_KEY` set in `.env`, `.env.local`, or `~/.claude/.env.global`. |
| 18 | |
| 19 | |
| 20 | echo "BRANDDEV_API_KEY is ${BRANDDEV_API_KEY:+set}" |
| 21 | |
| 22 | |
| 23 | If the key is not set, instruct the user: |
| 24 | > You need a Brand.dev API key. Get one at https://brand.dev/ |
| 25 | > Then add `BRANDDEV_API_KEY=your_key` to your `.env` file. |
| 26 | |
| 27 | ## API Base |
| 28 | |
| 29 | All requests go to `https://api.brand.dev/v1/` with the header `Authorization: Bearer {BRANDDEV_API_KEY}`. |
| 30 | |
| 31 | |
| 32 | |
| 33 | ## 1. Brand Search |
| 34 | |
| 35 | Search for mentions of a brand name across the web. |
| 36 | |
| 37 | ### Endpoint |
| 38 | |
| 39 | |
| 40 | GET https://api.brand.dev/v1/brand/search |
| 41 | |
| 42 | |
| 43 | ### Parameters |
| 44 | |
| 45 | | Param | Type | Description | |
| 46 | |-------|------|-------------| |
| 47 | | `query` | string | Brand name or phrase to search | |
| 48 | | `limit` | int | Number of results (default 20, max 100) | |
| 49 | | `offset` | int | Pagination offset | |
| 50 | | `sort` | string | `relevance` or `date` | |
| 51 | | `from_date` | string | Start date (YYYY-MM-DD) | |
| 52 | | `to_date` | string | End date (YYYY-MM-DD) | |
| 53 | |
| 54 | ### Example curl |
| 55 | |
| 56 | |
| 57 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 58 | "https://api.brand.dev/v1/brand/search?query=YourBrand&limit=20&sort=date" |
| 59 | |
| 60 | |
| 61 | ### Response Parsing |
| 62 | |
| 63 | |
| 64 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 65 | "https://api.brand.dev/v1/brand/search?query=YourBrand&limit=20" \ |
| 66 | | python3 -c " |
| 67 | import json, sys |
| 68 | data = json.load(sys.stdin) |
| 69 | for m in data.get('results', []): |
| 70 | print(f\"Source: {m.get('source','')} | Title: {m.get('title','')} | Sentiment: {m.get('sentiment','n/a')} | Date: {m.get('published_at','')}\") |
| 71 | print(f\" URL: {m.get('url','')}\") |
| 72 | print() |
| 73 | " |
| 74 | |
| 75 | |
| 76 | |
| 77 | |
| 78 | ## 2. Brand Info Lookup |
| 79 | |
| 80 | Get structured brand information for any company or product. |
| 81 | |
| 82 | ### Endpoint |
| 83 | |
| 84 | |
| 85 | GET https://api.brand.dev/v1/brand/info |
| 86 | |
| 87 | |
| 88 | ### Parameters |
| 89 | |
| 90 | | Param | Type | Description | |
| 91 | |-------|------|-------------| |
| 92 | | `domain` | string | Company domain (e.g., `stripe.com`) | |
| 93 | | `name` | string | Brand name (alternative to domain) | |
| 94 | |
| 95 | ### Example curl |
| 96 | |
| 97 | |
| 98 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 99 | "https://api.brand.dev/v1/brand/info?domain=stripe.com" |
| 100 | |
| 101 | |
| 102 | ### Response Fields |
| 103 | |
| 104 | `name`: Official brand name |
| 105 | `domain`: Primary domain |
| 106 | `description`: Brand description |
| 107 | `industry`: Industry classification |
| 108 | `founded`: Year founded |
| 109 | `headquarters`: Location |
| 110 | `social_profiles`: Links to social media |
| 111 | `logos`: Brand logo URLs |
| 112 | `colors`: Brand color palette |
| 113 | `employees_range`: Company size estimate |
| 114 | |
| 115 | |
| 116 | |
| 117 | ## 3. Logo Detection |
| 118 | |
| 119 | Detect brand logos in images across the web. |
| 120 | |
| 121 | ### Endpoint |
| 122 | |
| 123 | |
| 124 | GET https://api.brand.dev/v1/logo/search |
| 125 | |
| 126 | |
| 127 | ### Parameters |
| 128 | |
| 129 | | Param | Type | Description | |
| 130 | |-------|------|-------------| |
| 131 | | `brand` | string | Brand name to search for | |
| 132 | | `domain` | string | Filter to specific domain | |
| 133 | | `limit` | int | Number of results | |
| 134 | |
| 135 | ### Example curl |
| 136 | |
| 137 | |
| 138 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 139 | "https://api.brand.dev/v1/logo/search?brand=YourBrand&limit=20" |
| 140 | |
| 141 | |
| 142 | Use logo detection to find: |
| 143 | Unauthorized logo usage |
| 144 | Partner and sponsor visibility |
| 145 | Event coverage and media placements |
| 146 | Counterfeit product listings |
| 147 | |
| 148 | |
| 149 | |
| 150 | ## 4. Mention Tracking |
| 151 | |
| 152 | Set up ongoing tracking for brand mentions. |
| 153 | |
| 154 | ### Create a Monitor |
| 155 | |
| 156 | |
| 157 | POST https://api.brand.dev/v1/monitors |
| 158 | |
| 159 | |
| 160 | ### Body |
| 161 | |
| 162 | |
| 163 | { |
| 164 | "name": "My Brand Monitor", |
| 165 | "keywords": ["YourBrand", "Your Brand", "yourbrand.com"], |
| 166 | "exclude_keywords": ["unrelated term"], |
| 167 | "sources": ["news", "blogs", "social", "forums", "reviews"], |
| 168 | "languages": ["en"], |
| 169 | "notify_email": "[email protected]" |
| 170 | } |
| 171 | |
| 172 | |
| 173 | ### Example curl |
| 174 | |
| 175 | |
| 176 | curl -s -X POST -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 177 | -H "Content-Type: application/json" \ |
| 178 | "https://api.brand.dev/v1/monitors" \ |
| 179 | -d '{ |
| 180 | "name": "Brand Alert", |
| 181 | "keywords": ["YourBrand"], |
| 182 | "sources": ["news", "blogs", "social"], |
| 183 | "languages": ["en"] |
| 184 | }' |
| 185 | |
| 186 | |
| 187 | ### List Monitors |
| 188 | |
| 189 | |
| 190 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 191 | "https://api.brand.dev/v1/monitors" |
| 192 | |
| 193 | |
| 194 | ### Get Monitor Results |
| 195 | |
| 196 | |
| 197 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 198 | "https://api.brand.dev/v1/monitors/{monitor_id}/mentions?limit=50&sort=date" |
| 199 | |
| 200 | |
| 201 | |
| 202 | |
| 203 | ## 5. Sentiment Analysis |
| 204 | |
| 205 | Analyze sentiment of brand mentions. |
| 206 | |
| 207 | ### Endpoint |
| 208 | |
| 209 | |
| 210 | GET https://api.brand.dev/v1/brand/sentiment |
| 211 | |
| 212 | |
| 213 | ### Parameters |
| 214 | |
| 215 | | Param | Type | Description | |
| 216 | |-------|------|-------------| |
| 217 | | `query` | string | Brand name | |
| 218 | | `from_date` | string | Start date | |
| 219 | | `to_date` | string | End date | |
| 220 | | `granularity` | string | `day`, `week`, or `month` | |
| 221 | |
| 222 | ### Example curl |
| 223 | |
| 224 | |
| 225 | curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 226 | "https://api.brand.dev/v1/brand/sentiment?query=YourBrand&from_date=2024-01-01&to_date=2024-03-31&granularity=week" |
| 227 | |
| 228 | |
| 229 | ### Sentiment Scores |
| 230 | |
| 231 | **Positive** (> 0.3): Praise, recommendations, positive reviews |
| 232 | **Neutral** (-0.3 to 0.3): Factual mentions, news coverage |
| 233 | **Negative** (< -0.3): Complaints, criticism, negative reviews |
| 234 | |
| 235 | |
| 236 | |
| 237 | ## 6. Competitor Mention Comparison |
| 238 | |
| 239 | Compare brand mention volume and sentiment against competitors. |
| 240 | |
| 241 | ### Workflow |
| 242 | |
| 243 | Search mentions for your brand and each competitor |
| 244 | Compare mention counts over the same time period |
| 245 | Compare sentiment distributions |
| 246 | Identify sources where competitors get mentioned but you do not |
| 247 | |
| 248 | |
| 249 | # For each brand, get mention counts |
| 250 | for brand in "YourBrand" "Competitor1" "Competitor2"; do |
| 251 | count=$(curl -s -H "Authorization: Bearer ${BRANDDEV_API_KEY}" \ |
| 252 | "https://api.brand.dev/v1/brand/search?query=${brand}&limit=1" \ |
| 253 | | python3 -c "import json,sys; print(json.load(sys.stdin).get('total',0))") |
| 254 | echo "${brand}: ${count} mentions" |
| 255 | done |
| 256 | |
| 257 | |
| 258 | |
| 259 | |
| 260 | ## Workflow: Full Brand Audit |
| 261 | |
| 262 | When asked for a comprehensive brand monitoring report: |
| 263 | |
| 264 | ### Step 1: Brand Info |
| 265 | |
| 266 | Pull structured brand data for context. |
| 267 | |
| 268 | ### Step 2: Mention Volume |
| 269 | |
| 270 | Search for brand mentions over the last 30/90 days. Count total mentions and break down by source type. |
| 271 | |
| 272 | ### Step 3: Sentiment Analysis |
| 273 | |
| 274 | Get sentiment trends. Flag any negative spikes and investigate root causes. |
| 275 | |
| 276 | ### Step 4: PR Opportunities |
| 277 | |
| 278 | From mention data, identify: |
| 279 | **High-authority sites** that mention competitors but not you |
| 280 | **Journalists** who cover your industry |
| 281 | **Trending topics** where your brand could contribute |
| 282 | **Unanswered questions** about your brand on forums |
| 283 | |
| 284 | ### Step 5: Logo/Visual Presence |
| 285 | |
| 286 | Search for logo appearances. Flag unauthorized usage. |
| 287 | |
| 288 | ### Step 6: Report |
| 289 | |
| 290 | Present findings as: |
| 291 | |
| 292 | |
| 293 | ## Brand Monitoring Report: {Brand} |
| 294 | |
| 295 | ### Overview |
| 296 | - Total mentions (last 30 days): X |
| 297 | - Sentiment breakdown: X% positive, X% neutral, X% negative |
| 298 | - Top sources: ... |
| 299 | |
| 300 | ### Sentiment Trend |
| 301 | [Weekly trend data] |
| 302 | |
| 303 | ### Top Positive Mentions |
| 304 | 1. [Source] - [Title] - [URL] |
| 305 | 2. ... |
| 306 | |
| 307 | ### Negative Mentions Requiring Attention |
| 308 | 1. [Source] - [Title] - [URL] - [Issue summary] |
| 309 | 2. ... |
| 310 | |
| 311 | ### PR Opportunities |
| 312 | 1. [Publication] covers [topic] - pitch angle: ... |
| 313 | 2. [Journalist] recently wrote about [topic] - pitch angle: ... |
| 314 | |
| 315 | ### Competitor Comparison |
| 316 | | Metric | Your Brand | Competitor A | Competitor B | |
| 317 | |--------|-----------|-------------|-------------| |
| 318 | | Mentions | ... | ... | ... | |
| 319 | | Positive % | ... | ... | ... | |
| 320 | | Top Source | ... | ... | ... | |
| 321 | |
| 322 | ### Action Items |
| 323 | - [ ] Respond to [negative mention] |
| 324 | - [ ] Pitch [publication] about [topic] |
| 325 | - [ ] Update brand listing on [platform] |
| 326 | |
| 327 | |
| 328 | |
| 329 | |
| 330 | ## Error Handling |
| 331 | |
| 332 | | Status | Meaning | |
| 333 | |--------|---------| |
| 334 | | 401 | Invalid or expired API key | |
| 335 | | 403 | Insufficient permissions for this endpoint | |
| 336 | | 404 | Resource not found (check monitor ID) | |
| 337 | | 429 | Rate limit exceeded - wait and retry | |
| 338 | | 500 | Server error - retry after a few seconds | |
| 339 | |
| 340 | ## Tips |
| 341 | |
| 342 | Use exact brand name + common misspellings as keywords |
| 343 | Exclude your own domain to avoid self-mentions |
| 344 | Set up monitors for competitor brands too |
| 345 | Check mentions weekly at minimum; daily during launches or crises |
| 346 | Export negative mentions to a spreadsheet for customer support follow-up |
| 347 |
Discussion
Alternatives
Browse more free Claude skills or everything in Development.