For developers
Ship ad data features without six scrapers.
Platforms change their libraries every few weeks. We keep the adapters working, so your integration talks to one stable REST API.
One schema
Ads, advertisers and creatives look the same on every platform. Fields a platform does not publish are null, never guessed.id = <platform>:<platform_ad_id>History built in
Every response is stored and versioned. Ask for the history of an ad or the timeline of an advertiser, including ads the platform no longer shows.GET /v1/ads/{id}/historyDomain in, advertisers out
Resolve a brand's domain to its advertiser ids on all platforms, each with a score and the reason for the match. Wrong match? Report it, and the fix applies for everyone.GET /v1/advertisers/resolve?domain=Company profiles
All ad accounts of a company across platforms and countries in one object, with combined counts, countries, formats and its longest-running ads. Agencies and resellers that run ads for the brand are listed apart.GET /v1/companies/{domain}Webhooks, not polling
Watchlists crawl on your interval and post advertiser.changes events, HMAC-signed, retried and redeliverable.POST /v1/watchlistsBatch jobs
Hand over hundreds of lookups in one request and collect the results when the job is done.POST /v1/batchHonest billing
Credits per delivered result. Empty results, timeouts and upstream errors cost nothing. Usage per endpoint is one call away.GET /v1/usage
Response shape (abridged)
GET /v1/search?domain=nike.com&platform=meta,google&country=US&limit=2
{
"data": [
{
"id": "meta:1037130442034659",
"platform": "meta",
"advertiser": { "id": "meta:15087023444", "name": "Nike" },
"status": "inactive",
"first_shown": "2026-07-21T00:00:00Z",
"last_shown": "2026-08-14T00:00:00Z",
"first_seen_by_us": "…",
"countries": ["US"],
"placements": ["instagram"],
"creatives": [{ "type": "image", "text": "Pegasus Laufschuhe. …" }],
"derived": { "days_running": 24, "variant_count": 1 }
}
],
"meta": { "count": 2, "platforms": ["meta", "google"], "errors": null },
"next_cursor": "…"
}