Google Ads Transparency API: every ad a business runs
Give a website and get the ads that promote it, from every account running them: text, image and video, on Search, YouTube, Shopping, Maps and Play, with the day each ad was first and last shown and a link to see it. The data is the public Ads Transparency Center, read the way its own pages read it.
GET/v1/ads/search
{
"data": [
{
"creative_id": "CR05867015907196272641",
"advertiser_id": "AR16735076323512287233",
"advertiser_name": "Nike, Inc.",
"format": "text",
"first_shown": "2026-05-05T16:30:04Z",
"last_shown": "2026-09-30T04:32:54Z",
"days_shown": 120,
"domain": "nike.com",
"image_url": null,
"ad_url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR05867015907196272641?region=US"
},
"… 39 more ads"
],
"searched": {
"kind": "domain",
"value": "nike.com",
"advertisers": []
},
"pagination": {
"limit": 40,
"returned": 40,
"total_min": 700,
"total_max": 800
},
"meta": {
"request_id": "req_4f1c09a7d2b3",
"credits_used": 40,
"latency_ms": 1432
}
}
What you get
Every field in the response.
| Field | Meaning |
|---|---|
advertiser_id, advertiser_name | The account that ran the ad, as the Transparency Center publishes it |
creative_id | The ad's own ID, CR followed by digits |
format | text, image or video |
first_shown, last_shown | When the ad was first and last shown, UTC. A last_shown from today or yesterday means it is still running |
days_shown | Days on which the ad was shown, as the Transparency Center counts them. It can be lower than the span between the two dates, because an ad can pause |
domain | The website the ad promotes, on a website search |
image_url, image_width, image_height | The ad's image, where the listing itself carries a static one. Null otherwise |
ad_url | The ad's own page on the Ads Transparency Center, open to anyone |
searched | How q was read: a website, an advertiser ID or a name, and for a name the advertisers it matched exactly |
suggestions[] | When a name matched nobody: the advertisers whose names start that way, with their IDs. That answer costs nothing |
pagination | total_min and total_max are the Transparency Center's own count of every ad matching the search; next_cursor fetches the next page |
How it works
What happens between your request and the response.
A website finds every advertiser
The Transparency Center files ads by the account that paid for them, and a brand is usually several accounts. Searching a website instead returns every account promoting it: for nike.com that is Nike, Inc., its Japanese company and the resellers, in one list, with the website on every row.
Names match exactly or not at all
The Transparency Center's own name search matches loosely - its first answer for nike is a one-ad account in Kenya called Nike - so a name here has to match an advertiser exactly, ignoring case and punctuation. When nothing does, the answer is free and lists the advertisers whose names start that way, so the next call can ask by ID.
Filters the site itself uses
Country, platform, format and dates go to the Transparency Center as the same fields its own pages send, recorded from those pages rather than guessed, so a filtered answer is the one a person would see there.
Stops at a refusal
Public, logged-out pages only, through the same residential network our map search uses, at a conservative pace. A CAPTCHA page ends the request with a 503: it is never retried through a different address, and it is never charged.
Pricing
One credit system for every endpoint.
One credit per ad returned, up to a hundred in a call. A name that matches no advertiser costs nothing and names the ones it nearly matched. The free plan's 75 credits a month are 75 ads.
Run it on Apify.
For bigger runs, or without writing any code, the same engine runs on Apify as the listing below. Apify bills per result, so there is no subscription and nothing to pay us, and Apify's own free plan includes $5 of usage a month with no card.
Questions
Things people ask about the Google Ads Transparency API.
Where does the data come from?
From the Ads Transparency Center, the public library where Google publishes the ads advertisers run. We read the same logged-out pages anyone can open in a browser, live on every call. There is no account, no login and no API key involved on that side.
Why is there no headline or body text for text and video ads?
The Transparency Center draws those ads with a separate script of about 170 KB per ad, and reading it for every row would cost far more than the row. Each ad links to its own page instead, and carries the image wherever the listing has one.
Can I see where an ad ran and how often it was seen?
Not in this version. Per-country breakdowns and impression ranges live on each ad's own page, which ad_url opens. What every row does carry is the first and last day it was shown and how many days it ran, and you can ask for one country's ads only.
How far back does it go?
As far as the Transparency Center does. Long-running ads come back with first shown dates years old, and start_date and end_date narrow a search to any window you choose.
What happens when Google asks us to slow down?
The request ends with a 503 and a Retry-After, and nothing is charged. We never try the same request again through another address, which is what working around a site's request to slow down would mean.