ChatGPT AdsGET Ads KPIs

ChatGPT Ads KPIs

Headline advertising metrics for a tracked domain — how often ads showed up inside ChatGPT answers, with deltas vs the previous window.

curl --request GET \
  --url 'https://api.aiclicks.io/api/v1/ads/kpis?domain_id=8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3&days=30' \
  --header 'Authorization: Bearer ak_live_xxx'
{
  "data": {
    "promptsWithAds": 42,
    "totalPrompts": 118,
    "promptsWithAdsDelta": 16.7,
    "brandAppeared": 9,
    "brandAppearedDelta": 3,
    "brandAppearedDeltaLabel": "vs previous window",
    "uniqueAdvertisers": 27,
    "advertiserExits": 4,
    "totalCardsSeen": 311,
    "totalCardsDelta": 58,
    "totalCardsDeltaLabel": "vs previous window"
  },
  "domain_id": "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3",
  "days": 30,
  "generated_at": "2026-06-17T10:00:11.218Z"
}

Returns the headline numbers for advertising that surfaced inside ChatGPT's answers to your domain's tracked prompts over the lookback window: how many prompts drew ads, how often your own brand appeared, how many distinct advertisers competed, and how many ad cards were seen in total. Each count ships with a delta computed against the immediately preceding window of the same length. Use it to answer "is ChatGPT showing ads on my prompts, and is that growing?" in one call.

domain_id is a required query parameter. Use `` to discover which domains the calling key can access.

Authorizations

header
Authorizationstring
Required

Your API key formatted as Bearer ak_live_<your-key>. Create one in the dashboard under Settings → Developers.

header
X-Request-Idstring

Optional UUID for log correlation. If omitted, we generate one and echo it back in the response.

Query parameters

query
domain_idstring
Required

UUID of the domain. Find domains via ``. Omitting this returns 400.

query
daysinteger

Look-back window, 1–365. Defaults to 30. Deltas compare this window against the immediately preceding window of the same length — a days=30 request compares the last 30 days against the 30 days before that.

Response

dataobject
Required

The KPI payload. All counts are for the current window; every *Delta field measures change against the previous equal-length window.

data.promptsWithAdsinteger
Required

Number of distinct tracked prompts where at least one ad appeared in a ChatGPT response during the window.

data.totalPromptsinteger
Required

Total analyzable prompts tracked for the domain. Denominator for the "share of prompts with ads" ratio; not filtered by the window.

data.promptsWithAdsDeltanumber
Required

Percentage change in promptsWithAds vs the previous window, rounded to one decimal. When the previous window had zero, this is 100.0 if the current window is positive, otherwise 0.0.

data.brandAppearedinteger
Required

Number of prompts where your brand was one of the advertisers (matched against the domain's own host).

data.brandAppearedDeltainteger
Required

Absolute change in brandAppeared vs the previous window (a count difference, not a percentage). Can be negative.

data.brandAppearedDeltaLabelstring
Required

Human-readable label for the delta. Currently always "vs previous window".

data.uniqueAdvertisersinteger
Required

Count of distinct advertiser brands seen across all prompts in the current window.

data.advertiserExitsinteger
Required

Count of advertisers present in the previous window but absent from the current one. Never negative.

data.totalCardsSeeninteger
Required

Total ad cards (individual creatives) observed across every advertiser and response in the current window. A prompt with three advertisers each showing two cards contributes six.

data.totalCardsDeltainteger
Required

Absolute change in totalCardsSeen vs the previous window (a count difference). Can be negative.

data.totalCardsDeltaLabelstring
Required

Human-readable label for the delta. Currently always "vs previous window".

domain_idstring
Required

Echo of the requested domain.

daysinteger
Required

Echo of the requested window.

generated_atstring
Required

ISO-8601 timestamp of when the server produced (or cached) this response.

Response headers

HeaderDescription
X-CacheHIT or MISS. Indicates whether the response came from cache.
X-Request-IdUnique request id. Echoes incoming if you set one.
X-RateLimit-LimitMax requests per minute for this key.
X-RateLimit-RemainingRequests remaining in current minute.
X-RateLimit-ResetUnix epoch seconds when the window resets.

Caching

Cached for 30 minutes server-side per (domain_id, days). Newly completed analyses appear after the TTL expires.

Errors

400 Bad Requesterror

domain_id query parameter missing. Body points you at /api/v1/domains.

401 Unauthorizederror

Missing, malformed, or revoked API key.

403 Forbiddenerror

Team's developer_access flag is off, the domain belongs to a team your API key is not scoped to, or your allowed_domains allowlist excludes it.

404 Not Founderror

domain_id is malformed, does not exist, or your user is not a member of its team.

429 Too Many Requestserror

Rate limit exceeded. Inspect the Retry-After header for how long to wait.

Empty result

If no analyses ran in the window, the response is still a successful 200 with zeroed counts:

{
  "data": {
    "promptsWithAds": 0,
    "totalPrompts": 118,
    "promptsWithAdsDelta": 0.0,
    "brandAppeared": 0,
    "brandAppearedDelta": 0,
    "brandAppearedDeltaLabel": "vs previous window",
    "uniqueAdvertisers": 0,
    "advertiserExits": 0,
    "totalCardsSeen": 0,
    "totalCardsDelta": 0,
    "totalCardsDeltaLabel": "vs previous window"
  },
  "domain_id": "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3",
  "days": 30,
  "generated_at": "2026-06-17T10:00:11.218Z"
}