Shopping & Ads

List AI ad placements

Changed on

Paid placements returned inside AI answers. view=advertisers (default) returns one row per advertising domain with its placement count, prompt reach and average and best position; view=ads returns the individual placements with title, snippet, position and the prompt that triggered them. Position 1 is the best slot, so a LOWER average position is better. Requires the Scale plan or above.

get/dimensions/ads

Request

  • Base URL
    https://api.llmpulse.ai/api/v1
  • URL
    https://api.llmpulse.ai/api/v1/dimensions/ads
  • Auth
    API key in header Authorization

Query parameters

project_idinteger required

Project ID

pageinteger
per_pageinteger
view'advertisers' | 'ads'

Row shape: one per advertising domain, or one per placement

ownedboolean

Return only placements identified as the tracked brand's own (view=ads)

order'ads' | 'prompts' | 'avg_position' | 'domain' | 'recent' | 'oldest' | 'position'

Sort field; the allowed set depends on view

direction'asc' | 'desc'

Sort direction for view=advertisers. Defaults to desc, except avg_position and domain which default to asc.

querystring

Case-insensitive substring filter on the ad title, domain or snippet

model'chatgpt' | 'perplexity' | 'ai_mode' | 'ai_overview' | 'gemini' | 'copilot' | 'amazon_rufus' | 'claude' | 'grok' | 'deepseek' | 'naver_ai' | 'baidu_ai' | 'meta_ai' | 'naver_ai_tab' | 'qwen' | 'doubao'

Filter by one AI model. It must be a model enabled for the API key's user: an unknown value, or a model the user has not enabled, returns 422 ERR_INVALID_PARAM with the valid values in the message.

collection_idstring

One collection/tag ID or a comma-separated list of IDs. A query value is always a string on the wire, so it is typed as one: the previous integer-or-string union made generators emit a wrapper type they could not serialize.

country_codestring

One ISO country code or a comma-separated list (e.g. US,GB,DE)

language_codestring

One ISO language code or a comma-separated list (e.g. en,es,de)

promptinteger

Filter by prompt ID

prompt_typestring

One prompt type or a comma-separated list: informational, navigational, commercial, transactional

brand_kind'brand' | 'brand_other' | 'non_brand'

Filter by brand kind: brand (own brand/products), brand_other (competitors/other brands), non_brand (generic, no brand named). For fair 1:1 brand-vs-competitor comparisons (visibility, share of voice), use non_brand: brand-focused prompts skew results toward the brand they name. The in-app Overview page applies non_brand by default.

rangeinteger

Number of days to look back (alternative to from/to)

fromstring date-time
tostring date-time

End of the window. A date-only value such as 2026-09-01 covers that whole day. Pass a full timestamp to end the window earlier.

output'flat' | 'csv'

Rectangular output for BI tools (Tableau, Excel, Sheets, ELT). Omit for the default nested JSON. 'flat' returns the same metadata plus 'columns' and 'rows'; 'csv' returns those rows as text/csv. Errors are always returned as JSON.

Response

Paginated ad rows plus totals

Changes