AI Visibility API: mention rate, share of voice and rank on 6 engines

The AI Visibility API measures how often a brand is named in AI answers, how much of the conversation it holds against competitors and where it ranks when it appears. One call returns those numbers per entity across ChatGPT, Perplexity, Google AI Mode, Claude, Copilot and Grok, with a timeseries for trends.

Updated

  • ChatGPT
  • Perplexity
  • Google AI Mode
  • Claude
  • Microsoft Copilot
  • Grok

Playground

One call ranks 5 entities by how often ChatGPT names them

The AI Visibility API reads every stored answer for the prompt, model and market and returns one row per entity. In this sample, Loopwork is named in 68.4% of ChatGPT answers to the prompt and Cadence in 54.2%. Change the model or the market and the figures change, because each pair has its own stored answers.

POST /v1/visibility/entities

models[]

curl -X POST https://api.apiforgeo.com/v1/visibility/entities \
  -H "Authorization: Bearer $API_FOR_GEO_KEY" \
  -H "x-project-id: $PROJECT_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "best project management tool for creative agencies",
    "models": [
      "chatgpt"
    ],
    "country": "US",
    "bucketSize": "week"
  }'
200 OK · 148 ms · chatgpt
{
  "scope": {
    "prompt": "best project management tool for creative agencies",
    "models": [
      "chatgpt"
    ],
    "country": "US",
    "responses": 420
  },
  "results": [
    {
      "entityId": "e18f3a2c",
      "name": "Loopwork",
      "entityType": "brand",
      "visibility": 68.4,
      "shareOfVoice": 24.1,
      "avgPosition": 1.8,
      "mentions": 137,
      "sentiment": {
        "score": 76,
        "label": "positive"
      }
    },
    {
      "entityId": "e28f3a2c",
      "name": "Cadence",
      "entityType": "competitor",
      "visibility": 54.2,
      "shareOfVoice": 19.6,
      "avgPosition": 2.4,
      "mentions": 111,
      "sentiment": {
        "score": 68,
        "label": "positive"
      }
    },
    {
      "entityId": "e38f3a2c",
      "name": "Northbeam",
      "entityType": "competitor",
      "visibility": 41.7,
      "shareOfVoice": 14.2,
      "avgPosition": 3.2,
      "mentions": 81,
      "sentiment": {
        "score": 61,
        "label": "neutral"
      }
    },
    {
      "entityId": "e48f3a2c",
      "name": "Fieldnote",
      "entityType": "competitor",
      "visibility": 33.9,
      "shareOfVoice": 11.8,
      "avgPosition": 3.8,
      "mentions": 67,
      "sentiment": {
        "score": 58,
        "label": "neutral"
      }
    },
    {
      "entityId": "e58f3a2c",
      "name": "Palette OS",
      "entityType": "other",
      "visibility": 22.5,
      "shareOfVoice": 8.4,
      "avgPosition": 4.4,
      "mentions": 48,
      "sentiment": {
        "score": 54,
        "label": "neutral"
      }
    }
  ],
  "timeseries": [
    {
      "bucket": "2026-08-10",
      "visibility": 64.2,
      "avgPosition": 2.1
    },
    {
      "bucket": "2026-08-17",
      "visibility": 65.8,
      "avgPosition": 2
    },
    {
      "bucket": "2026-08-24",
      "visibility": 67.3,
      "avgPosition": 1.9
    },
    {
      "bucket": "2026-08-31",
      "visibility": 68.4,
      "avgPosition": 1.8
    }
  ],
  "freshness": {
    "lastExecutionAt": "2026-09-02T04:12:07Z",
    "bucketSize": "week"
  }
}
Fields returned per entity by POST /v1/visibility/entities
FieldTypeDescription
entityIduuidStable id for the resolved entity, aliases merged.
namestringCanonical entity name as configured in the project.
entityTypeenumbrand · competitor · person · product · other
visibilityfloatPercentage of in-scope responses mentioning the entity.
shareOfVoicefloatEntity mentions ÷ all entity mentions in scope.
avgPositionfloatMean rank of the first mention inside the answer. Lower is better.
mentionsintRaw mention count across in-scope responses.
sentimentobjectScore from 0 to 100 and its derived label.
timeseries[]arrayOne point per bucket: visibility and average position.

Competitors

Loopwork leads Cadence by 14.2 points in the same response

The AI Visibility API returns the brand and every competitor in one response, and every row shares one denominator, so the gaps are direct. In this sample on ChatGPT in the US, Loopwork leads Cadence by 14.2 points of visibility and 4.5 points of share of voice, and is named earlier in the answer.

POST /v1/visibility/entities

curl -X POST https://api.apiforgeo.com/v1/visibility/entities \
  -H "Authorization: Bearer $API_FOR_GEO_KEY" \
  -H "x-project-id: $PROJECT_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "best project management tool for creative agencies",
    "models": [
      "chatgpt"
    ],
    "country": "US"
  }'

200 OK

{
  "results": [
    {
      "name": "Loopwork",
      "entityType": "brand",
      "visibility": 68.4,
      "shareOfVoice": 24.1,
      "avgPosition": 1.8,
      "mentions": 137
    },
    {
      "name": "Cadence",
      "entityType": "competitor",
      "visibility": 54.2,
      "shareOfVoice": 19.6,
      "avgPosition": 2.4,
      "mentions": 111
    },
    {
      "name": "Northbeam",
      "entityType": "competitor",
      "visibility": 41.7,
      "shareOfVoice": 14.2,
      "avgPosition": 3.2,
      "mentions": 81
    },
    {
      "name": "Fieldnote",
      "entityType": "competitor",
      "visibility": 33.9,
      "shareOfVoice": 11.8,
      "avgPosition": 3.8,
      "mentions": 67
    },
    {
      "name": "Palette OS",
      "entityType": "other",
      "visibility": 22.5,
      "shareOfVoice": 8.4,
      "avgPosition": 4.4,
      "mentions": 48
    }
  ]
}
Fields compared across the brand and its competitors
FieldTypeDescription
namestringCanonical entity name as configured in the project.
entityTypeenumbrand · competitor · person · product · other
visibilityfloatPercentage of in-scope responses mentioning the entity.
shareOfVoicefloatEntity mentions ÷ all entity mentions in scope.
avgPositionfloatMean rank of the first mention inside the answer. Lower is better.
mentionsintRaw mention count across in-scope responses.

Timeseries

Four weekly buckets show Loopwork gaining 4.2 points of visibility

The AI Visibility API returns a timeseries alongside the totals, one point per bucket of a day, a week or a month. In this sample, Loopwork's visibility on ChatGPT moves from 64.2% in the week of 10 August to 68.4% three weeks later, while its average position improves from 2.1 to 1.8.

POST /v1/visibility/entities

curl -X POST https://api.apiforgeo.com/v1/visibility/entities \
  -H "Authorization: Bearer $API_FOR_GEO_KEY" \
  -H "x-project-id: $PROJECT_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "best project management tool for creative agencies",
    "models": [
      "chatgpt"
    ],
    "country": "US",
    "bucketSize": "week"
  }'

200 OK

{
  "results": [
    {
      "name": "Loopwork",
      "entityType": "brand",
      "visibility": 68.4,
      "avgPosition": 1.8
    },
    {
      "name": "Cadence",
      "entityType": "competitor",
      "visibility": 54.2,
      "avgPosition": 2.4
    },
    {
      "name": "Northbeam",
      "entityType": "competitor",
      "visibility": 41.7,
      "avgPosition": 3.2
    },
    {
      "name": "Fieldnote",
      "entityType": "competitor",
      "visibility": 33.9,
      "avgPosition": 3.8
    },
    {
      "name": "Palette OS",
      "entityType": "other",
      "visibility": 22.5,
      "avgPosition": 4.4
    }
  ],
  "timeseries": [
    {
      "bucket": "2026-08-10",
      "visibility": 64.2,
      "avgPosition": 2.1
    },
    {
      "bucket": "2026-08-17",
      "visibility": 65.8,
      "avgPosition": 2
    },
    {
      "bucket": "2026-08-24",
      "visibility": 67.3,
      "avgPosition": 1.9
    },
    {
      "bucket": "2026-08-31",
      "visibility": 68.4,
      "avgPosition": 1.8
    }
  ]
}
Timeseries fields, one point per bucket
FieldTypeDescription
timeseries[]arrayOne point per bucket: visibility and average position.
timeseries[].bucketdateStart of the bucket, sized by bucketSize: day, week or month.
timeseries[].visibilityfloatVisibility inside that bucket.
timeseries[].avgPositionfloatAverage position inside that bucket.

Get started

Four setup steps lead to the first visibility read

The AI Visibility API reads runs a project has already stored, so the first read comes after four steps: create the project, generate a key in the app, import the prompts with POST /v1/queries, then run them. Reads over stored runs are not billed, so a dashboard can repeat the call as often as it refreshes.

  1. Step 1

    Create a project

    Create an organisation and a project, one project per brand or per client.

  2. Step 2

    Generate a key

    Generate an API key in the app; keys are managed there, never through the API.

  3. Step 3

    Import your prompts

    Import your prompts and tags with a single POST /v1/queries.

  4. Step 4

    Run and read

    Trigger an execution, poll the job, then read any analytics endpoint.

Comparison

A scraping API returns none of the 3 numbers the AI Visibility API computes

The AI Visibility API resolves brand aliases, ranks each entity inside the answer and computes share of voice on every stored response. An AI scraping API returns the answer text and leaves those three steps to build for each engine. A GEO dashboard tool computes them but keeps them inside its interface, and an in-house build owns them for good.

3 of the 15 capabilities on the full comparison
Capability API for GEOAI scraping APIGEO dashboard toolIn-house build
Entity resolution across aliases YesNoYes, closedBuild it
Average position in answer YesNoYes, closedBuild it
Share of voice YesNoYes, closedBuild it

Pricing

AI Visibility API pricing runs from $0.013 to $0.007 per credit

The AI Visibility API reads runs that are already paid for, so the visibility call itself is not billed. Credits are spent when prompts run: one prompt on one model in one locale is one credit, with every enrichment layer included. The tier follows the month's volume, with no commitment needed to reach it.

0 – 50k / month
$0.013
per credit
50k – 250k / month
$0.011
per credit
250k – 1M / month
$0.009
per credit
1M+ / month
$0.007
per credit

Price per credit, set by the month's total volume.

200 prompts × 3 models × 30 runs = 18,000 credits a month, $234 at $0.013

FAQ

AI visibility data, answered

What does one call return?

The AI Visibility API returns one row per entity for the scope you set: visibility, share of voice, average position, mention count and a sentiment score with its label, plus a timeseries for the period. Brands the engines name on their own come back too, so the list is not limited to the ones you configured.

Does one prompt run count as one response?

The AI Visibility API counts one response per prompt, per model, per execution. Running 200 prompts on 3 models produces 600 responses per run, and every aggregate reads all of them, so the denominator grows with each execution inside the date range you query.

Can I track competitors I don't own?

The AI Visibility API treats competitors as ordinary entities, so any brand can be tracked with the same numbers as your own. Brands the engines bring up unprompted are detected and returned as well, which means a new rival shows up in the results before anyone adds it to the project.

Do reads cost credits?

The AI Visibility API does not bill reads. Credits are consumed by executions, when a prompt runs against a model, and every analytics read over stored runs is unmetered. A dashboard can therefore refresh the visibility table as often as it needs without moving the monthly bill.

Can I resell visibility data?

The AI Visibility API allows resale and white-label use. The response carries no API for GEO branding, and each end customer can sit in an isolated project of your organisation, so platforms and agencies can show the numbers as their own metrics at a price they set.

Measure your brand's visibility on 6 AI engines