Skip to main content
People ask AI assistants for apps, not only the store. AI visibility records whether ChatGPT, Claude, Gemini and Perplexity name your app when someone asks for an app like it, who they name instead, and which pages they cite. The questions live in the spec and the answers live in the repo, so verify can measure them before and after every push.

What you track

An intent is what someone wants. Its prompts are how they ask for it. Both live in appeeky.spec.yaml, per storefront:
Write prompts the way a person types them, not the way you would describe the app.

Two ways to run it

Each key adds that assistant. With only ANTHROPIC_API_KEY, a local scan asks Claude alone.

Through Appeeky

  • init writes the intents and prompts Appeeky already tracks into aiVisibility.intents. With none yet, Appeeky writes them from your listing, and init says to run it again in a few minutes. --country <cc> adds a storefront.
  • sync sends the spec’s intents and prompts to Appeeky. Ones that are only in Appeeky are listed, and archived only with --prune. --dry-run shows the plan and sends nothing.
  • pull writes one file per storefront (--country for one).
  • scan asks the assistants now. It uses AI Visibility credits; pull the results a few minutes later.

On your own keys

init --local has your own model write intents and prompts from the listing, the target keywords and your competitors. It prints what that cost on your key, and it skips a storefront that already has intents. Edit them, then quote the scan.

Quote before you pay

--dry-run asks nothing and spends nothing. It also lists the assistants that have no key. Without it, the scan shows the same quote and asks Ask the assistants for about $2.45 on your own keys? before it spends. --yes skips the question. Each prompt goes to each assistant with web search on, the way the apps answer people, and a second cheap call lists the apps each answer names. The quote is roughly, per prompt: The scan prints progress, then the same summary as pull with what it cost. An assistant that failed is listed with its error; the others still count.

On a schedule

--every <days> skips a storefront scanned in the last <days> days:
Set VISIBILITY_EVERY (for example 7) as a repository variable or in the Docker .env, with the keys as secrets. The daily routine then runs visibility scan --local --every $VISIBILITY_EVERY --yes. The weekly agent is not allowed to run a paid scan. See GitHub Actions & CI.

The visibility files

appeeky/visibility/us.yaml:

Read the results and improve them

  • Missing, with the same names in namedInstead. Those apps own the intent. Read their store descriptions: assistants quote store text that says what an app is for.
  • Weak on one assistant. Read that assistant’s answers in answers/<country>.jsonl to see what it picked and why.
  • Your site is not in sources. Assistants cite pages they can read. Run seo check and make the site readable for AI crawlers. See Website and Google search.
  • The app is named but not counted. Add the name the assistants use to aliases.
A description that says what the app is for, in the words people use, can move an intent. So can the pages the assistants cite.

Measure it

verify reads ai_visibility, the share of answers that name the app, for the first watched storefront: Appeeky’s daily series, or history.csv from local scans. Higher is better. Experiments can use it too: experiment add --metric ai_visibility. See Push, measure and revert. Related: Website and Google search · On your own keys · Listing