Unique ad creatives observed on a domain, with their lifespan
Paginated catalogue of distinct ad creatives, each identified by a stable fingerprint that survives tracking-parameter churn, so the same creative is one entry across runs, models and vendors. Optionally narrowed to one advertiser. Each entry carries how long it has been in rotation (`observedFirstSeenAt`, `observedLastSeenAt`, `lifespanDays`, `stillRunning`) measured over the whole history, NOT over the requested window — `firstSeenAt`/`lastSeenAt` are the window-bounded pair. `lifespan` carries the distribution over every creative matching the filters, which is where average ad life duration comes from; its averages cover retired creatives only, because a creative still in rotation has no end date yet. Resolution is bounded by refresh cadence: a creative seen on a single day reports a zero-day span rather than a same-day retirement.
In: header
Path Parameters
Domain under analysis
Query Parameters
Start date for the report range (ISO 8601). On aggregated endpoints, omit to default to the last 6 months (there is no "all time"); an explicit start is honoured at any length.
End date for the report range (ISO 8601). Defaults to now when omitted.
Filter by specific models
Filter by specific topic ID
Filter raw results to a single prompt ID. Used by the sentiment heatmap drawer to lazy-load one cell's LLM response instead of bundling all responses in the aggregate.
Include variation calculation comparing to previous period
truePage number for paginated responses
1 <= value1Items per page for paginated responses
1 <= value <= 10050Filter by specific market/language pair ID
Filter by tag IDs (visibility_result joined with prompt_tag)
Restrict to one advertiser, using the key returned by the advertisers endpoint (the advertiser host, or its normalized name when no URL was reported).
Sort field. lifespan, firstSeen and lastSeen rank on the creative's whole observed life, not on the part of it inside the window; firstSeen is newest-first, so it answers "what has just launched".
"ads"Value in
- "ads"
- "executions"
- "lifespan"
- "firstSeen"
- "lastSeen"
Days before the end of the window within which a creative must have been observed to count as still running. Drives the retired/still-running split behind the lifespan averages.
1 <= value <= 903Row offset for pagination
0 <= value0Response Body
application/json
curl -X GET "https://example.com/api/domains/3fa85f64-5717-4562-b3fc-2c963f66afa6/ads/creatives"{ "creatives": [ { "observedFirstSeenAt": "2026-04-18T06:02:00.000Z", "observedLastSeenAt": "2026-05-25T10:30:00.000Z", "lifespanDays": 37.19, "observedDays": 31, "observedAds": 412, "stillRunning": true, "globalFirstSeenAt": "2026-04-02T11:45:00.000Z", "globalLastSeenAt": "2026-05-25T10:30:00.000Z", "adKey": "9f2c1b7a4e6d3805c1aa27b4d9e0f3a6c85b1d47", "advertiserKey": "nike.com", "advertiserName": "Nike", "cardType": "product_ad", "format": "product_card_v2", "title": "Nike Pegasus 41", "body": "Responsive cushioning for daily miles.", "ctaProductCopy": "Shop now", "imageUrl": "https://nike.com/img/pegasus41.jpg", "targetUrl": "https://nike.com/t/pegasus-41", "adCount": 63, "executionCount": 58, "promptCount": 4, "firstSeenAt": "2026-05-02T09:14:00.000Z", "lastSeenAt": "2026-05-25T10:30:00.000Z" } ], "total": 137, "lifespan": { "creatives": 137, "stillRunning": 48, "retired": 89, "singleObservationCreatives": 21, "averageLifespanDays": 18.42, "medianLifespanDays": 11.03, "p90LifespanDays": 54.87, "averageObservedSpanDays": 12.9, "averageObservedDays": 9.4, "activeWithinDays": 3, "activeSince": "2026-05-22T10:30:00.000Z" }}