Use case5 min read2026-07-27

Monitor your AI share of voice

AI share of voice is one ratio: of all the times an AI answer names a brand in your category, how many of those times is it you. It is the AI-answer era's version of the rank report — except there is no public rank to read, so the only honest way to get the number is to fetch the answers themselves and count. AgentGEO does the fetching: one API call returns the answer ChatGPT, Perplexity, Gemini, Google AI Overviews, Google AI Mode or Copilot gave, as JSON. The counting stays in your code — twenty lines, shown below — so the number you report is one you can audit down to the individual answer.

Read this page with an AI

The job: a recurring number per engine — your mentions divided by all tracked-brand mentions — over a fixed query set, with history you can diff. Everything else on this page is the shortest honest path to that.

Want the baseline without writing code? Get a free AI-visibility audit → · Read the docs → — No card, no account.

Get my free audit

How share-of-voice monitoring works on raw answers

  1. Fix a query set. Ten to fifty questions your buyers actually ask — "best [category] for [audience]", "[competitor] alternatives", "how do I [job]". The set must stay fixed between runs, or the trend line measures your edits, not the market.
  2. Fetch every query against every engine you care about. One POST /v1/fetches per query names the engines in surfaces; each delivered answer is one record, one credit.
  3. Count mentions and divide. Case-insensitive search of answerText for each tracked brand, yours included. Share of voice = your mentions ÷ all tracked-brand mentions. Store the per-answer rows, not just the ratio, so any number can be traced back to the answer that produced it.
sov.py — the whole metric, auditable
import requests

BRANDS = ["Acme", "Northwind", "Globex"]  # yours first
QUERIES = [
    "best project management software for agencies",
    "project management tools with client portals",
]
SURFACES = ["chatgpt", "perplexity", "gemini"]

mentions = {b: 0 for b in BRANDS}
for query in QUERIES:
    resp = requests.post(
        "https://api.agentgeo.org/v1/fetches",
        json={"query": query, "surfaces": SURFACES},
        headers={"Authorization": "Bearer ag_live_your_key_here"},
        timeout=200,  # the API holds up to 180s on slow surfaces
    )
    resp.raise_for_status()
    for answer in resp.json()["answers"]:
        text = (answer.get("answerText") or "").lower()
        for brand in BRANDS:
            if brand.lower() in text:
                mentions[brand] += 1

total = sum(mentions.values()) or 1
for brand, n in sorted(mentions.items(), key=lambda kv: -kv[1]):
    print(f"{brand:10} {n:3} mentions  {n / total:6.1%} share of voice")

Run it weekly — a cron, a CI job, or a schedule in the AgentGEO console — and append each run's rows to a file. The diff between two runs is the deliverable: who gained, who lost, on which questions, on which engines.

MetricFormulaWhat it tells you
Mention rateanswers naming you ÷ all answersYour absolute visibility, independent of competitors.
Share of voiceyour mentions ÷ all tracked-brand mentionsYour position in the conversation the answers are having.
Citation shareanswers citing your domain ÷ answers with sourcesWhether your pages — not just your name — feed the answers. Match on the domain in sources[].url, never on titles.

Google AI Overviews needs two denominators. An overview doesn't appear for every query, so report presence rate (queries with an overview ÷ all queries) separately from mention rate among the overviews that appeared. One blended number silently mixes "Google didn't answer" with "Google answered and skipped you".

Let your agent run it

The same data is exposed over MCP, and the geo-share-of-voice skill — one of eight that ship inside the agentgeo-mcp package — walks any connected agent through exactly this workflow: fetch, count, compare, report. Install once and ask in plain language:

Claude Code, Cursor, Codex or any MCP client
claude mcp add agentgeo -- npx -y agentgeo-mcp --key ag_live_...

Alternatives

GEO dashboards like Profound or Peec AI will hand you a share-of-voice score. The trade: their query set, their counting rules, their seat pricing — and a number you can't decompose when a client asks where it came from. Scraping the engines yourself gets you raw data and a permanent browser-automation maintenance bill. The data-layer position is the middle: raw records from one API, counting rules you wrote, a number you can defend.

More use cases

The same records power competitor visibility tracking and AI Overviews monitoring — see all use cases.

FAQ

Direct answers to the questions this page raises.

Of all the times AI answers name a brand in your tracked set, the fraction that is your brand — computed per engine over a fixed query set. It differs from mention rate (your mentions over all answers), which moves even when competitors don't.

No, deliberately. AgentGEO returns the raw answers and citations; the counting runs in your code or your agent (the geo-share-of-voice skill automates it). That split is the point — you can audit any number back to the answer that produced it, and change the rules without asking a vendor.

Twenty to fifty per category is the practical floor. Answers vary between runs, so a three-query set produces a trend line that is mostly noise. Keep the set fixed; version it in git next to the script.

No — every plan is paid, and a workspace fetches nothing live until it has one. What costs nothing: the human-run audit, and ag_test_ keys, which return labelled demo records at zero credits.

Keep reading

Where this page leads next.

Run these checks on your own brand

Two ways in. Send a URL and a person runs the fetches for you, free — or connect your agent over MCP, on a plan, and run them yourself. Either way you get the raw answers and their citations, never a score.