Measure brand sentiment in ChatGPT
Being mentioned by ChatGPT is not the same as being recommended by it. "Acme is a popular option, though users report a steep learning curve" is a mention — and a warning label. Brand sentiment is the job of reading how the answers characterize you: the adjectives, the caveats, the "but"s that follow your name. AgentGEO's part of that job is deliberately narrow: it fetches the raw answer text, reliably and repeatably. The scoring belongs to a model you control — a ten-line classifier call — because sentiment is a judgment, and judgments you report should be ones you can re-run, re-prompt and defend.
Read this page with an AI
The pipeline is fetch → extract → classify: pull the answers for your query set, cut the sentences that name you, and have an LLM you choose label each one. AgentGEO is the first stage; the rest is yours, and that's the feature.
Get a free AI-visibility audit → · Read the docs → — No card, no account.
Get my free auditHow sentiment measurement works
- Fetch the answers that talk about you. Brand queries ("is Acme good", "Acme reviews", "Acme vs Northwind") plus your category queries.
POST /v1/fetcheswithsurfaces: ["chatgpt"]— add other engines later; the record shape doesn't change. - Extract the brand context. From each
answerText, keep the sentences containing your name plus one sentence either side. Sentiment lives in the qualifiers around the mention, not in the mention. - Classify with your own model. Send each snippet to whatever LLM you already use with a fixed rubric — positive / neutral / negative / mixed, plus the quoted phrase that justifies the label. Store label and quote; a score without its evidence can't be audited later.
import requests
BRAND = "Acme"
resp = requests.post(
"https://api.agentgeo.org/v1/fetches",
json={"query": "is acme project management any good", "surfaces": ["chatgpt"]},
headers={"Authorization": "Bearer ag_live_your_key_here"},
timeout=200,
)
resp.raise_for_status()
for answer in resp.json()["answers"]:
text = answer.get("answerText") or ""
snippets = [s.strip() for s in text.split(".") if BRAND.lower() in s.lower()]
for s in snippets:
print(f"- {s}")
# -> feed `snippets` to your own LLM with a fixed rubric:
# label ∈ {positive, neutral, negative, mixed} + justifying quoteAgentGEO never scores sentiment for you — that's a design decision, not a missing feature. A vendor-supplied sentiment number bakes in a rubric you can't see, on text you can't check. Raw answers plus your own classifier means the methodology section of your report is real.
Track the labels over time the same way you track mentions: fixed query set, dated rows, diffs between runs. Sentiment moves slower than visibility — a launch changes mentions in weeks, but the "steep learning curve" caveat can outlive the redesign that fixed it by a year. The dated record is how you prove the change eventually landed.
Let your agent run it
This is the use case where agent-side analysis earns its keep: the geo-sentiment skill (shipped in agentgeo-mcp, served live by the API) has the agent fetch the answers and do the classification in one conversation — the classifier is the agent's own model, the rubric is in the skill, and the output cites the exact answer text behind every label.
claude mcp add agentgeo -- npx -y agentgeo-mcp --key ag_live_...Alternatives
Some GEO platforms (Scrunch, AthenaHQ) include a sentiment gauge — a defensible convenience if you don't need to explain the number. When a CMO or a client asks "negative according to what?", a dashboard gauge has no answer, and that's the moment teams move the classification in-house. Manual reading in the browser works too, for exactly one brand query at a time, once.
More use cases
Sentiment pairs with share-of-voice monitoring — how often you appear, then how you're framed — and with competitor tracking for the same read on rivals. See all use cases.
Read what the answers say about you this week: Get a free AI-visibility audit →
Get my free audit