> ## Documentation Index
> Fetch the complete documentation index at: https://docs.searchable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recipe: Why did our AI visibility drop?

> Confirm the drop, isolate which engines moved, separate 'we fell' from 'a rival rose', and find where the loss sits.

## The one-call version

```
investigate(projectId, question="visibility_drop", days=30)
```

That runs this whole chain server-side and returns the measurements together.
Everything below is what it fetches, why, and — the part the tool deliberately
leaves to you — how to read the result.

<Note>
  `investigate` returns **measurements, not a cause**. It will tell you ChatGPT fell 38 points while
  Gemini held; it will not tell you why, because the reason is usually something outside the data (a
  rebrand, a campaign ending, a competitor launch). The interpretation rules below are how you close
  that gap.
</Note>

## The chain, step by step

Run these individually when you want to vary the window, filter to a topic, or
drill past what the composite returns.

### 1. Confirm the drop is real, and date it

```
get_visibility(projectId, group_by="date", days=90)
```

A single low day is noise; a step change is an event. What you want from this
step is the **date the level changed**, because that date is what you match
against your own release, campaign, and site-change history.

### 2. Isolate which engines moved

```
get_visibility(projectId, group_by="platform", compare="previous_period")
```

This is the highest-signal step. See the interpretation table below.

### 3. Separate "we fell" from "a competitor rose"

```
get_share_of_voice(projectId, compare="previous_period")
```

Visibility is absolute; share of voice is relative. They move independently, and
which one moved changes the response entirely.

### 4. Locate the loss

```
get_topic_analysis(projectId, days=30)
get_topic_analysis(projectId, view="prompts", topicId="<weakest topic>")
```

Topic first, then the prompts inside the weakest topic — that's the level where
you can actually act.

### 5. Check whether the sources moved under you

```
search_sources(projectId, days=30)
get_source_trends(projectId, days=90)
```

If the domains AI answers cite for your space changed, your ranking may not have
moved at all — the answer did.

## How to read it

| What you see                             | What it usually means                                                                                        |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| One platform fell, others flat           | That engine changed something — a model update or a sourcing change. Your site is probably not the variable. |
| Every platform fell together             | Something on your side, or a data-collection gap. Check step 1's date against your own change log first.     |
| Visibility flat, share of voice down     | You did not lose ground; a competitor gained. Look at which one in `competitorsGaining`.                     |
| Visibility down, share of voice flat     | The whole category got quieter — often seasonality or fewer prompts firing, not a loss to a rival.           |
| Both down, one topic dominating the loss | A content problem localised to that topic. Step 4 tells you which prompts.                                   |
| Citation sources churned heavily         | The answer moved rather than your rank. Winning the new sources matters more than editing your page.         |

## What this cannot tell you

The data has no view of your rebrand, your campaign calendar, a competitor's
launch, or a change in how your prompts are worded. A drop that lines up exactly
with one of those is explained by it — check that before treating the numbers as
a content problem.
