AI share of voice, computed from real captures.

When a buyer asks an AI surface "best X for Y", a shortlist comes back, and whoever owns that shortlist owns the category. Share-of-voice teams need the distribution: which brands get named, in what order, in what light, per surface and per market. That is an aggregation over many captures, which means it needs the real answers in one identical shape you can parse and aggregate, not screenshots pasted into decks.

The workflow, end to end.

Real endpoints, real field names, nothing below is pseudocode.

  1. step 1 / 4

    Define the category prompt set and submit as a batch

    Share of voice is computed over a prompt basket ("best crm for startups", "top crm tools 2026", …). Submit the whole basket in one batch call, each item fans out across surfaces and regions independently.

    POST /v1/search/batch
    curl -sS -X POST "https://api.aisearchapi.dev/v1/search/batch" \
      -H "Authorization: Bearer $AISEARCH_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "items": [
          { "query": "best crm for startups",
            "surfaces": ["chatgpt", "perplexity", "copilot"],
            "regions": [{ "country": "US" }, { "country": "GB" }] },
          { "query": "top crm tools 2026",
            "surfaces": ["chatgpt", "perplexity", "copilot"],
            "regions": [{ "country": "US" }, { "country": "GB" }] }
        ]
      }'
  2. step 2 / 4

    Read the answer and extract the named brands

    Every Envelope returns the answer as answer.text and answer.markdown, identical in shape across surfaces. Run your own brand and sentiment extraction over it: which brands were named, in what order, and in what light, one pass that works the same for ChatGPT, Perplexity and Copilot.

    Envelope excerpt, the answer you aggregate over
    "answer": {
      "text": "For startups, the usual picks are HubSpot,
        Attio and Pipedrive, with Salesforce for scale…",
      "markdown": "…"
    },
    "provenance": {
      "model": { "observedLabel": "GPT-5" }
    }
  3. step 3 / 4

    Aggregate into share of voice

    Across the basket: mention rate per brand (share of captures naming it), average position in the answer, and sentiment mix, all computed by your extraction over the answer text. Because every surface returns the same answer shape, one aggregation covers all of them, and per-region children give you the per-market split for free.

  4. step 4 / 4

    Track movement and attribute it

    Let the Watch API re-run each prompt on your cadence (one watch per prompt), or drive the batch yourself, then diff the aggregates. When a competitor jumps, the captured answers show what changed underneath: a new name in the shortlist, a reordered recommendation, a different framing, the "why" behind the share shift, in the surface’s own words.

The Envelope fields that do the work.

Every surface returns the same canonical Envelope, so these fields mean the same thing whether the capture came from ChatGPT, Perplexity or an AI Overview.

answer.text

The answer as plain text, the atomic share-of-voice record you run your own brand and sentiment extraction over.

answer.markdown

The same answer normalized to markdown, so ordering and emphasis (who is recommended first) survive into your aggregation.

provenance.region

Per-market splits with requested-vs-effective geo verified per capture.

provenance.model

Which engine and model answered, so share of voice is never averaged across incompatible surfaces by accident.

provenance.callUuid

A per-capture id stamped on every Envelope, so any aggregate number traces back to the exact capture it was computed from.

Honest limits

Brand extraction can be ours or yours: turn on Auto Extract (beta) for a scored mentions layer, or leave it off and run your own logic over the answer text so you decide what counts as a mention. Coverage for share-of-voice math is the live v1 surfaces; Claude contributes answers via the official API, and Gemini, Meta AI, Grok, DeepSeek and Rufus are not in the denominator until they ship. Guest sessions today, logged-in personalization is out of scope until it ships.

Terms used here, defined precisely: AI share of voice · Envelope · AI visibility

Asked precisely.

How is AI share of voice different from classic SOV?

Classic SOV counts impressions you buy or earn in media; AI SOV measures presence in generated answers, being named, ranked early, and described positively when a buyer asks an open question. It is computed from captured answers, which is why it needs a capture API rather than an ad-intelligence feed.

Can I bring my own entity extraction?

Yes. answer.text and answer.markdown ship in every Envelope, so you can run your own NER and sentiment over exactly what the surface said. Prefer a ready-made layer? Turn on Auto Extract (beta) for scored mentions instead; either way the raw answer text stays the source you can audit against.

How many prompts make share of voice statistically meaningful?

That depends on your category, and we won’t invent a number. The mechanics are what we provide: batches of up to 500 prompts per call, independent per-item billing, and stable (prompt, surface, region) keys so your analysts can size the basket to the confidence they need.

Can I trace a share-of-voice number back to the captures behind it?

Yes, every number aggregates over individual Envelopes keyed by (prompt, surface, region), so any cell in your SOV table expands to the exact captures (the answer text and its provenance) it was computed from. The math is a query over structured records you keep, never a black box.

Build it on the capture layer.

500 free credits, charged only on successful captures. The whole workflow above runs on two endpoints.