Someone posts a photo of your product on Instagram. They write the product name in the caption, add a couple of hashtags and never tag your account. You get no notification. As far as your dashboard knows, it never happened.
That's the core problem with tracking brand mentions on Instagram. The mentions you get told about are the minority. The rest sit in captions and hashtags, and you have to go looking for them.
This guide covers both ways to look: the manual methods Instagram gives you and where they stop working, and how to automate the search with a mentions API. It's written for brand and marketing teams, for developers building monitoring into their own tools, and for creators who want to see which brands people are already talking about before pitching a sponsorship.
What counts as a brand mention on Instagram
A mention is any public post that refers to the brand. In practice that breaks into three kinds, and each one is found a different way:
| Type of mention | Example | How you find it |
|---|---|---|
| Tag or @-mention | A post that tags @yourbrand | Notifications and the tagged posts on the profile |
| Hashtag | A caption that uses #yourbrand | The hashtag page, or a hashtag search |
| Untagged text | "Finally tried the new oat latte from Yourbrand" | A phrase search on the caption text |
The first kind is the easiest to see and the least common. The third kind is the hardest to see and often the most honest, because people who aren't tagging you aren't performing for you.
The manual way: what Instagram shows you
You can get surprisingly far with nothing but the app, as long as you know what each source covers.
Notifications
When someone tags or @-mentions your account, you're notified. This is useful for replying quickly and resharing content, but it only covers activity that involves your account directly. A caption that types your name without linking it does not fire a notification.
The tagged tab on a profile
Posts that tag an account collect on that profile's tagged section. It's a quick way to see who is tagging a brand, and it works on any public profile, not just your own. That makes it a handy first look at a competitor or a brand you want to work with.
Hashtag pages
Search a hashtag and Instagram shows posts that used it. Check your branded hashtag, your campaign hashtag and the plain brand name as a tag. Brand names make popular hashtags, so expect noise from unrelated posts that happen to share the word.
Where manual tracking breaks down
- Untagged captions are invisible. There's no notification and no tab for a caption that simply names your product.
- It doesn't scale. Checking a handle, three hashtags and two product names every day is a chore for one brand and impossible for a portfolio of clients.
- Nothing is recorded. You see a feed, not a dataset. There's no export, no history and no count to compare week over week.
- Competitors take the same effort again. Every brand you watch multiplies the manual work.
If you track one small brand and mostly care about tags, the manual route is fine. Once you need untagged mentions, more than one brand, or numbers you can report, you need searches that run for you.
The automated way: hashtag, tagged and phrase searches
A mention tracker does the same three lookups, but runs them together and returns structured results. Monitor Mentions, our sister product, is built around exactly this. You give it a handle, hashtags and phrases, and it runs these searches:
- The handle adds three searches: the account lookup, the handle as a hashtag, and the account's tagged tab.
- A single word is searched as a hashtag.
- Two or more words are searched as a phrase, which is how you catch the posts that talk about a brand without tagging it.
Each post comes back with its author, date, caption, likes and the search that matched it. That last field matters more than it looks: a post somebody hashtagged on purpose and a caption that happens to contain the words are different evidence, and you'll want to weigh them differently.
You can try it in the browser first. Your first run of the day is free with no sign-up, and results download as CSV or JSON.
Step 1: Build your list of search terms
Good results start with the words people actually use. For each brand, list:
- The Instagram handle, if it has one.
- Branded and campaign hashtags.
- Product names, especially multi-word ones.
- Campaign slogans and taglines people quote.
- A founder's name, if they're the public face of the brand.
You don't need a handle at all. Leave it empty and search only hashtags and phrases to track a product, a campaign line, an event or a person.
Step 2: Get an API key
Sign in on the Monitor Mentions dashboard and create a key. It starts with mm_mon_ and is shown once, so store it somewhere safe, like an environment variable. You can send it either as an Authorization: Bearer header or as an x-api-key header.
Step 3: Run a mentions search
The whole API is one endpoint: POST /api/v1/mentions/search. Send a handle, at least one term, or both. Here's the example from the API docs:
curl -X POST https://www.monitormentions.com/api/v1/mentions/search \
-H "Authorization: Bearer $MM_KEY" \
-H "Content-Type: application/json" \
-d '{"handle": "liquiddeath", "keywords": ["murder your thirst", "deathwish"]}'
The request body takes three optional fields:
| Field | Type | What it does |
|---|---|---|
| handle | string | An Instagram handle, with or without the @, or a profile URL. Adds a lookup, its hashtag and its tagged tab. |
| keywords | string[] or string | Words and phrases. One word is searched as a hashtag; two or more as a phrase. Comma-separated strings work too. |
| hashtags | string[] | Always searched as a hashtag. Spaces are dropped. |
You can send up to 5 terms per call. To watch more, make more calls.
The same request in Python:
import os
import requests
resp = requests.post(
"https://www.monitormentions.com/api/v1/mentions/search",
headers={"Authorization": f"Bearer {os.environ['MM_KEY']}"},
json={"handle": "liquiddeath", "keywords": ["murder your thirst", "deathwish"]},
timeout=120,
)
resp.raise_for_status()
data = resp.json()
for post in data["posts"]:
found = post["found_by"]
print(post["author"], post["url"], found["method"], found["term"])
for miss in data["failed"]:
print("failed:", miss["method"], miss["term"])
Step 4: Read the response
The response groups everything you need into a few blocks:
- entity and account: the handle you asked about and its profile details, such as name, followers and whether it's verified.
- credits: how many credits this call charged, how many remain and your monthly allowance.
- summary: counts of posts, creators and videos, the newest and oldest post, and posts per term.
- posts: one entry per post, with id, url, author, caption, thumbnail, is_video, taken_at, likes, comments and found_by.
- failed: any search that didn't come back, with its method and term.
A few details worth knowing before you build on it:
- found_by has a method of hashtag, tagged or phrase, plus the term that matched. A post found by two searches is returned once, under the first one that found it.
- Thumbnails expire. They're image URLs from Instagram, so download and store the image if you need it later.
- Likes and comments are counts as Instagram reported them, or null when hidden.
- There is no reach or sentiment field. The summary counts posts, accounts and posts per term, and nothing else, because the product doesn't measure either. If a report needs reach, you'll have to define and calculate it yourself.
Step 5: Run it on a schedule and keep the history
Monitor Mentions searches return what Instagram returns for each search, which is recent rather than historical and varies by term. There's no backfill. The practical consequence: the history starts the day you start tracking, so start before you need it.
A simple setup that works for most teams:
- A daily job calls the search endpoint once per brand with its handle and terms.
- New posts are saved to a database, keyed by the post id so repeats don't double count.
- Thumbnails are copied to your own storage.
- Counts per term are charted week over week, and new posts go to Slack, a sheet or your warehouse.
Agencies can run one call per client per morning and pipe the result into the report they already send. Running the same search again on the same UTC day is free, so refreshing during the day doesn't cost extra.
You can check your balance at any time with GET /api/v1/mentions/usage, which is free and returns plan, monthly, used, remaining and resets_on. Every search response also carries an x-credits-remaining header.
What it costs
Pricing is one credit per search, and the searches are listed before you send anything:
| Search | Credits |
|---|---|
| Handle (account lookup, its hashtag, its tagged tab) | 3 |
| Each keyword or hashtag | 1 |
| The same search again, same UTC day | Free |
So a handle with two keywords costs five credits, on the web page and over the API alike. A handle that doesn't exist costs one credit, for the lookup, and the other searches aren't run. A search that fails upstream is still counted, and the response lists it under failed.
The API plans, from the pricing page:
| Plan | Price | Credits per month | Roughly |
|---|---|---|---|
| Free | $0 | 100 | No card needed |
| Starter | $19/month | 2,500 | About 400 full searches |
| Growth | $79/month | 12,000 | About 2,000 full searches |
| Scale | $249/month | 50,000 | About 8,000 full searches |
Credits reset on the 1st of each month, UTC. On the web, a free Google sign-in gives 20 points a day, which is a separate pile from API credits.
Errors you should handle
Every error is JSON in the form {"error": "...", "status": 400}. The ones to plan for:
| Status | Meaning |
|---|---|
| 400 | Nothing to search, a bad handle, or more than 5 terms. The message says which. |
| 401 | Missing, invalid or revoked key. |
| 404 | The handle doesn't exist on Instagram. Costs one credit, the lookup. |
| 429 | Not enough credits left this month for this search. Nothing is charged. |
| 502 / 503 | Upstream or the ledger didn't answer. Try again shortly. |
Retry 502 and 503 with a short backoff. Treat 429 as a signal to stop until the reset or upgrade the plan, not as something to retry in a loop.
For creators: find brands before you pitch them
If you make YouTube videos, the same searches answer a sponsorship question: which brands are getting talked about in your niche, and by whom? Every post carries its author, so a search for a brand's handle and product names shows the creators already posting about it. That tells you whether the brand works with creators your size, what kind of content gets made, and which campaign lines people actually repeat.
It's also a good way to sanity-check a pitch. If a brand's campaign hashtag has plenty of posts but its slogan barely appears in captions, you know which one resonates with audiences. Our guide on how to make money on YouTube covers how sponsorships fit with your other income.
The gap no caption search can fill
One limit applies to any tool that reads text, and Monitor Mentions states it plainly: it reads captions and hashtags, not audio. A reel where someone says your brand out loud and never types it isn't caught, and neither is a name that only appears on screen inside the video.
For video, the spoken words are often where the real mention is. That's the job transcripts do. If you're tracking brand mentions in YouTube videos, a transcript turns every spoken brand name into searchable text, and our API returns transcripts for YouTube videos so you can search them the same way you search captions.
Quick checklist
- List the handle, hashtags, product names and slogans for each brand.
- Use the native notifications, tagged tab and hashtag pages for a baseline.
- Search multi-word names and slogans as phrases to find untagged mentions.
- Keep the method and term that found each post.
- Run searches on a schedule, dedupe by post id and store thumbnails yourself.
- Remember that captions are not audio: spoken mentions need a transcript.
Frequently asked questions
Does Instagram notify me about every mention of my brand?+
No. Notifications cover activity that involves your account directly, such as an @-mention or a tag. A caption that types your brand name without linking it, or a hashtag used without a tag, does not reach your notifications, and those are often the majority of mentions.
Can I track mentions of a brand I don't own?+
Yes. Hashtag pages, tagged posts on a public profile and phrase searches all work on public content, so you can watch a competitor or a brand you want to work with. Monitor Mentions states that nothing in its search needs you to own the account.
How do I find posts that mention a brand without tagging it?+
Search for the words people use, not just the handle. Product names, slogans and campaign lines searched as phrases surface captions that name the brand but never tag it. A handle-only setup misses all of these.
Is there an API for Instagram brand mentions?+
Monitor Mentions has one endpoint, POST /api/v1/mentions/search, that takes a handle, keywords and hashtags and returns the matching public posts, each with the search that found it. A free key includes 100 credits a month.
Will a mention tracker catch brands said out loud in Reels?+
Not usually. Monitor Mentions reads captions and hashtags, not audio, so a reel where someone says the brand name and never types it is not caught. For spoken mentions you need a transcript of the video.
How far back can I search Instagram mentions?+
With Monitor Mentions, as far as Instagram returns for each search, which is recent rather than historical and varies by term. There is no backfill, so start tracking before you need the history.
Keep reading
GUIDE
How to Use Meta Muse with Your Instagram Saves: Trips, Recipes, Shopping and Content Ideas
GUIDE
How to Make Money on YouTube in 2026: The Rules, the Math and What Creators Actually Do
GUIDE
How to Get Your First 1,000 YouTube Subscribers in 2026 (0 to 1K Playbook)
GUIDE
How to Analyze Interview Transcripts: A Practical Guide to Qualitative Coding