# AI search visibility

A growing share of category research now ends inside an assistant. Someone asks ChatGPT which tools do X, reads the answer, clicks maybe one of the cited sources, and forms a shortlist without visiting a single vendor site. If you are not in that answer, you were not considered, and no analytics property will tell you it happened.

This is measurable. Ask the assistants the questions your buyers ask, capture what comes back with the citations, and track it over time.

## The pipeline

```
aeo.keywords  →  which prompts people actually send to assistants, with trend
aeo.answer    →  what ChatGPT, Claude, Gemini or Perplexity says, with sources
aeo.mentions  →  where a domain or keyword shows up in AI answers
seo.serp      →  whether an AI Overview fires on the classic SERP too
```

## Step 1: find the prompts worth measuring

Keyword tools measure what people type into a search box. `aeo.keywords` measures the demand side of AI assistants: how often keywords are asked, with a monthly trend.

```bash
curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "aeo.keywords",
       "input": {"keywords": ["growth data api", "openrouter for data", "enrichment api"],
                 "location": "United States"}}'
```

Prompts are longer and more conversational than queries. People type "serp api" into Google and ask an assistant "what is the cheapest way to get Google results into my agent". Build your prompt set from the second shape: the question a buyer would actually ask out loud.

Three tiers are worth tracking:

- **Category prompts.** "Best X for Y." You want to be in the list.
- **Comparison prompts.** "A vs B." You want to be named accurately.
- **Problem prompts.** The job, with no vendor named. This is where a new entrant can appear, because the assistant is reasoning about the problem rather than reciting a known list.

## Step 2: capture the answer and its sources

```bash
curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{
    "capability": "aeo.answer",
    "input": {
      "prompt": "What is the best API for growth data in an AI agent?",
      "assistant": "chatgpt"
    }
  }'
```

The response carries the answer text, the `sources` it cited and the `source_domains`. Run the same prompt across `chatgpt`, `claude`, `gemini` and `perplexity`. They disagree, sometimes completely, because they retrieve differently and have different training and search backends. A brand strong in one can be invisible in another, and the fix differs.

**Answers are not deterministic.** The same prompt returns different text on different runs. One capture is an anecdote. Measure a rate: run each prompt several times, across assistants, on a schedule, and track the percentage of runs in which you appear. That percentage is the metric. A screenshot is not.

## Step 3: the citation graph is the actionable part

The answer text tells you what the assistant thinks. `source_domains` tells you where it learned it, and that is the list you can act on.

The pattern is consistent across categories: assistants lean on a small number of aggregators, comparison pages, documentation sites and community threads. If the same five domains cite in every answer for your category, those five domains are your distribution. Being accurate on them moves the answer; publishing another page on your own site usually does not.

Then check where you already appear:

```bash
curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "aeo.mentions",
       "input": {"domain": "yourdomain.com", "platform": "chatgpt", "limit": 50}}'
```

This returns the questions where the target shows up, which is the reverse lookup: instead of guessing prompts, you get the ones you are already in. Run it on a competitor's domain and you get their answer footprint, which is a prompt list you did not have to invent.

## Step 4: pair it with the classic SERP

```bash
curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "seo.serp",
       "input": {"keyword": "growth data api", "location": "United States"}}'
```

`ai_overview_present` in the response tells you whether Google is answering the query itself above the organic results. On queries where it fires, the informational click is often absorbed. Those keywords have not stopped mattering; the goal moved from ranking to being the source the overview quotes.

## What to actually do with the data

The honest version of the playbook is short:

1. **Fix the factual record where the assistants read it.** If the aggregators and comparison pages that get cited have you wrong or missing, that is the highest-leverage change available, and it is not on your website.
2. **Answer the question directly on your own pages.** Assistants extract passages. A page with a clear question as a heading and a complete answer underneath is extractable; a page that builds to a conclusion over 800 words is not.
3. **Be present where the community answers.** Forum and community threads are cited far more than most vendors expect.
4. **Track the rate, not the run.** Weekly, across four assistants, same prompt set. A change that holds across a month is real.

## Where it breaks

- **Non-determinism is the headline caveat.** Sample, then measure a rate. Anyone showing you one screenshot of an assistant naming them is showing you noise.
- **Personalization and memory.** Answers vary by account context and location. Treat results as a population estimate, not the answer any one buyer gets.
- **Model updates reset the board.** A model or retrieval change can shift the citation set overnight. Continuous tracking is the only way to notice.
- **Correlation with revenue is genuinely unproven.** Presence in AI answers is measurable; the attribution path to pipeline is not, yet. Treat it as a leading indicator, and say so out loud when you report it.

## Run it as an agent

```bash
routergrowth run -c aeo.answer -i '{"prompt":"best growth data api","assistant":"chatgpt"}'
routergrowth run -c aeo.answer -i '{"prompt":"best growth data api","assistant":"perplexity"}'
routergrowth run -c aeo.mentions -i '{"domain":"yourdomain.com","platform":"chatgpt"}'
```

The whole weekly pass is a loop over a prompt list and four assistants. An agent with the [skill](/SKILL.md) installed runs it, stores the results and reports the delta.

## FAQ

### How is this different from normal rank tracking?

Rank tracking measures a position in an ordered list of ten links. There is no position here. An assistant produces one synthesized answer, and the questions are whether you appear in it, whether what it says about you is accurate, and which sources it drew on. Presence is a rate across repeated samples rather than a number, because the same prompt does not return the same answer twice.

### How many times should I run the same prompt?

Enough that the rate stops moving. In practice three to five runs per assistant per prompt, weekly, is the point where the number becomes stable enough to act on. Below that you are measuring variance. If a competitor appears in two runs out of five and you appear in one, that gap is not yet a finding.

### Why do the assistants disagree so much?

They use different retrieval systems, different training data and different cut-off behavior. Perplexity leans heavily on live search and cites densely. ChatGPT with search on blends retrieval with what the model already believes. Claude and Gemini differ again. A brand well covered in the documentation and community sources one system prefers can be absent from another entirely.

### Can I influence what an assistant says about me?

Indirectly, and mostly not on your own website. The lever that moves is the source set: the aggregators, comparison pages, documentation and community threads that get cited for your category. Being accurate and present there changes what gets retrieved. Publishing more marketing copy on your own domain rarely does, because that is not where the assistant is looking.

### Does an AI Overview mean the keyword is dead?

No, it means the value moved. The informational click shrinks, but the query still represents demand, and the overview cites sources. The optimization target changes from ranking first to being the passage worth quoting: a direct answer under a question heading, specific enough to extract. Track `ai_overview_present` over time, because it fires inconsistently for the same query.
