The measurement API for Generative Engine Optimization.

GEO, getting your pages named and cited inside AI answers, fails without measurement. You cannot optimize for AI Overviews or ChatGPT answers if you cannot observe what they currently say, whether your brand or pages show up in the answer at all, and whether your change moved anything. Rank trackers watch positions on a SERP; GEO needs the answer itself, captured and diffed.

The workflow, end to end.

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

  1. step 1 / 4

    Capture the answers for your target queries

    Submit each target query to the surfaces that matter for it, the AI Overview for informational queries, ChatGPT and Perplexity for comparative ones.

    POST /v1/search
    curl -sS -X POST "https://api.aisearchapi.dev/v1/search" \
      -H "Authorization: Bearer $AISEARCH_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "query": "how to choose a password manager",
        "surfaces": ["google_ai_overview", "chatgpt", "perplexity"],
        "regions": [{ "country": "US" }]
      }'
  2. step 2 / 4

    Read what the answer says and links

    The Envelope returns the answer as answer.markdown, exactly as the surface rendered it, including whatever pages and brands it named or linked inline. That is your target list: who is currently winning the answer for this query, in the surface’s own words.

    Envelope excerpt, the answer you optimize against
    "answer": {
      "markdown": "For families, 1Password and Bitwarden are the
        usual picks, with Dashlane close behind…",
      "blocks": [ { "type": "paragraph", "text": "…" } ]
    },
    "provenance": {
      "model": { "observedLabel": "GPT-5", "inferred": true }
    }
  3. step 3 / 4

    Read the fan-out queries the surface searched

    When a surface exposes the sub-questions it searched (Google’s AI Mode most reliably), they come back structured in evidence.fanOut, the closest signal of what content the engine went looking for. Where a surface exposes none, the answer text itself is the ground truth you optimize against.

  4. step 4 / 4

    Ship content changes, then re-capture and diff

    After optimizing, re-run the identical request and diff the answers. Going from absent, to named in passing, to recommended in the answer for your target query is GEO progress you can see in the captured text, not vibes.

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.markdown

The composed answer as rendered, the before/after text your optimization is measured against, diffable across re-captures.

answer.text

The same answer as plain text, ready to scan for your domains, brand names and the competitors currently winning the answer.

answer.blocks

Typed structure (paragraph, heading, list, code, quote) so you can target the exact part of the answer you want to win.

evidence.fanOut

The sub-queries the surface fanned out to, when it exposes them, structured signal of what the engine searched for on your topic.

provenance.surfacePresent

Whether the answer engine even triggered for this query, an absent AI Overview is a GEO signal, not an error.

provenance.model

Which engine and model composed the answer, so optimization progress is always attributed to a specific surface.

Honest limits

The Envelope returns structured evidence alongside the answer, evidence.sources (the citations a surface named or linked) and evidence.fanOut (the sub-queries it searched, when it exposes them); brand-mention scoring is still yours to run over the answer text today. Where a surface exposes no fan-out, the answer text itself is the ground truth. Claude is served today via the official Anthropic API, so its answers reflect that API. AI Overview presence itself is query-dependent (absence is reported honestly, and costs nothing).

Terms used here, defined precisely: Generative engine optimization (GEO) · Fan-out · Provenance · AI Overview

Asked precisely.

What is Generative Engine Optimization, concretely?

The practice of getting your brand and pages named and cited inside AI-generated answers, AI Overviews, ChatGPT with browsing, Perplexity, rather than (only) ranked in classic results. Operationally it reduces to moving into the answer itself for your target queries, from absent, to named in passing, to recommended, measured by capturing the answer and diffing it over time.

How is this different from rank tracking?

A rank tracker reports your position among ten blue links. GEO measurement reports whether the answer itself used you: whether your brand is named, whether your pages are linked in the answer, and how the wording shifts over time. None of that exists in a SERP-position feed.

Does this tell me how to optimize, or just measure?

It measures; it does not prescribe. The loop it enables is concrete though: read what the answer currently says and links, study the pages it favors, ship changes, re-capture, diff. Without the before/after answers you cannot attribute any change to your work.

Which surfaces matter most for GEO?

Google AI Overviews for informational volume, ChatGPT for branded and comparative prompts, Perplexity for citation-dense research queries, AI Mode as it rolls out. All four are live v1 surfaces here, and the same request captures them side by side.

Build it on the capture layer.

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