How to check if ChatGPT mentions your brand
Ask ChatGPT the question your buyers would ask, read the answer, and look for your brand — that's the honest one-minute version, and for a single check it's the right tool. What it misses is that there are two separate signals hiding in one answer: whether your name appears in the prose, and whether your domain appears in the list of sources the answer cited. A brand can have either, both, or neither, and the fix for each is different. To check both reliably — and to check them again next month against a record of what changed — you need the answer as data rather than as a page you read. That's one API call, and about fifteen lines of code.
The shortest honest answer: open ChatGPT, ask your category question, and search the reply for your brand name. Then check whether your domain shows up in the answer's cited sources — that's a different question with a different answer. To do both repeatedly, across many phrasings, with history you can diff, fetch the answer as structured data instead of reading it in a browser.
The manual way (and why it stops working)
Open ChatGPT. Ask exactly what a prospective customer would ask — say, "best project management software for agencies" — and read what comes back. If Acme is named in the answer, Acme is mentioned. If the reply carries citations, expand them and look for acme.com. It takes a minute, it costs nothing, and for a one-off sanity check nothing beats it.
It stops working the second you need to do it twice.
- One query at a time. Genuine category coverage is twenty to fifty phrasings. You are not going to type all of them by hand every week, so you'll quietly shrink the check down to the two queries you happen to like.
- Answers vary between runs. Ask the same thing twice and you can get two different brand lists. A single reading can't tell you whether you gained ground or just drew a different sample.
- No history to diff. What you read today can't be compared with what it said in March, because March was never recorded. Every manual check starts from zero.
- Citations are easy to miss. The source that actually fed the answer is often behind a link you never expanded — so you conclude "we're invisible" when your own page was cited but not named.
- It doesn't fit in a report or a cron job. A browser reading can't go into a weekly deck, a client dashboard or a CI check without a human retyping it, which means it stops happening the week that human is busy.
Do it with one API call
AgentGEO fetches the answer for you and hands it back as JSON: the full answerText, plus sources[] with the title, URL and position of everything the answer cited. Same reply you'd have read in the browser, in a shape your code can test. Here's the raw call:
curl -s https://api.agentgeo.org/v1/fetches \
-H "Authorization: Bearer ag_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"query": "best project management software for agencies", "surfaces": ["chatgpt"]}' \
| jq '.answers[0] | {answerText, sources}'Now the actual task. Test the two signals separately — a case-insensitive search of answerText for the brand name, and a scan of sources[] for your domain:
import requests
BRAND = "Acme"
DOMAIN = "acme.com"
QUERY = "best project management software for agencies"
resp = requests.post(
"https://api.agentgeo.org/v1/fetches",
json={"query": QUERY, "surfaces": ["chatgpt"]},
headers={"Authorization": "Bearer ag_live_your_key_here"},
timeout=200, # live surfaces are slow - requests wait up to 180s
)
resp.raise_for_status()
for answer in resp.json()["answers"]:
text = answer.get("answerText") or ""
sources = answer.get("sources") or []
# Signal 1 - is the brand named anywhere in the prose?
mentioned = BRAND.lower() in text.lower()
# Signal 2 - is our domain among the sources the answer cited?
cited = [s for s in sources if DOMAIN in s["url"].lower()]
print(answer["surfaceKey"])
print(f" mentioned in answer: {mentioned}")
print(f" cited as a source: {bool(cited)}")
for s in cited:
print(f" #{s['position']} {s['title']} - {s['url']}")Two booleans, four possible outcomes — and each one means something different about what to go and fix:
| Result | What it means | What to do about it |
|---|---|---|
| Mentioned and cited | The model recommends you and points at your page for the evidence. | Record it and defend it. This is the position competitors are trying to take. |
| Mentioned, not cited | The model knows the brand, but someone else's page supplied the detail. | Publish the page that answers the question directly, so the citation follows the mention. |
| Cited, not mentioned | Your content was useful enough to link — the recommendation still went elsewhere. | You have the authority but not the positioning. Make the page say plainly what you are and who you're for. |
| Neither | Invisible for this phrasing. | Check other phrasings before panicking; if it's consistent, this is a content gap, not a tracking problem. |
Never test the brand name alone against sources[] — test the domain. Titles are written by whoever published the page, so a competitor's "Acme vs Northwind" review will match a brand-name search and make it look like you earned a citation you didn't. Match on the host in url, and match the brand only against answerText.
Let your agent do it
If the check belongs in a conversation rather than a script — the way it usually does when you're mid-edit on the page in question — install the MCP server and ask in plain language:
claude mcp add agentgeo -- npx -y agentgeo-mcp --key ag_live_...Then ask for the same two signals, in words:
Fetch what chatgpt answers for "best project management software for agencies". Tell me whether Acme appears in the answer text, and separately whether acme.com appears in the sources. If it's cited, give me the position and the page title.
The advantage isn't saving five lines of Python — it's that the agent already has your repo open. It can go from "you're mentioned but not cited" to "here's the paragraph on your pricing page that should have earned that citation" without you assembling the context by hand. The same server works in Claude Code, Cursor, Zed and any other MCP client.
Common problems
- Phrasing changes the answer. "Best project management software for agencies" and "project management tools for creative teams" are different queries with different brand lists. Test the phrasings your buyers actually use — pull them from your search console and your sales calls, not from your own vocabulary.
- One fetch is a sample, not a verdict. The same query run twice can return different brands. Before you report a change, re-run it; before you report a trend, run it on a schedule and compare records with the same
querystring. - Short brand names collide. A substring test for "Acme" also matches "Acme Insurance" and "Acmegraph". Use a longer, more distinctive string, require a word boundary, or lean on the domain check — which is naturally unambiguous.
- Country and language defaults matter. Requests default to
country: "US"andlanguage: "en". If you sell in Germany, a US-English answer tells you nothing about your visibility there. Set them per market and keep the results in separate series. - Slow surfaces can come back `failed`. Requests wait up to 180 seconds, and some chatbot scrapes exceed that budget: the record returns
failedwith aproviderFields.snapshot_idand costs zero credits. Retry with that id and the same single surface to redeem the finished answer instead of paying for a re-scrape.
Summary
For a one-off, open ChatGPT and read the answer — it's free and it's fast. The moment the check has to repeat, cover more than a couple of phrasings, or produce something you can compare with last month, fetch the answer as data and test the two signals in code you own. Mentioned and cited are not the same result, and knowing which one you have is what tells you what to fix.
Get a free API key → · Try it without signing up → — Free tier, no credit card required.
Start for freeFrequently asked questions
- How do I check if ChatGPT mentions my brand?
- Manually: ask ChatGPT your category question and search the reply for your brand name. Programmatically:
POST https://api.agentgeo.org/v1/fetcheswith{"query": "...", "surfaces": ["chatgpt"]}and test whether the brand appears inanswerText, case-insensitively. The API route is what lets you run many phrasings on a schedule and keep the results to compare. - Can I see which sources ChatGPT cites for a query?
- Yes. Every delivered record includes a
sources[]array with the title, URL and position of each cited source, so you can check whether your domain is among them. Note that ChatGPT only cites when it browses for an answer — a reply produced without browsing can legitimately come back with an emptysources[]. - Does ChatGPT give the same answer every time?
- No. The same query run twice can produce different wording and a different set of brands. That's why a single manual reading is unreliable as a measurement: you can't tell a real change from run-to-run variation. Repeat the fetch on a schedule and compare records for the same query string over time.
- Is being cited by ChatGPT the same as being recommended?
- No, and this is the distinction most checks miss. Being mentioned means the model named your brand in its answer. Being cited means your page appeared in
sources[]as evidence. You can have either without the other — cited-but-not-mentioned usually means your content is useful but your positioning isn't clear; mentioned-but-not-cited means the model knows you but someone else's page supplied the detail. - Do I need a paid tool to check brand visibility in ChatGPT?
- Not to start. Checking by hand in the browser is free, and AgentGEO has a free tier with no credit card if you want the answers as structured data. Billing is by usage with a spend cap — one credit per delivered record, zero for failed ones — rather than per seat, so a small recurring check stays cheap.
Keep reading