Google Ads Transparency Center API & Scraper
The Google Ads Transparency Center API turns adstransparency.google.com into JSON in six actions.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search looks up advertisers and domains the way the site's search box does, with each advertiser's country, approximate number of ads and verified status. advertisers lists every advertiser whose name matches, page by page, with the verified legal name. advertiser returns one advertiser: name, legal name, country, verification and, for election advertisers, the number of election ads and the registration id. ads lists every ad of one advertiser, or every ad that points to one domain from any advertiser, newest first: format (text, image or video), first and last shown date, days shown, the ad image or Google's preview link, and Google's own creative, customer and ad-group ids; filter by country (244 covered), format, platform (Search, YouTube, Shopping, Maps, Play) and date range, 1 to 100 per page. ad opens one ad: every variation, its topic, every country it ran in with first and last shown date, and for EU countries the impressions range per country and per platform plus the audience selection (demographics, locations, contextual signals, topics of interest, customer lists: included or excluded). political_ads lists the election ads of a country with the amount spent and impressions ranges in the advertiser's currency; election ads opened with ad add age, gender and location targeting. One ReefAPI key, the standard { ok, data, meta, error } envelope, no Google account.
Which number is which
The Transparency Center publishes ranges, not exact counts, and different ranges in different places. Field names as the API returns them, measured 2026-11-03.
| field | what it is | example |
|---|---|---|
| meta.total_min / total_max (ads) | The source's range for how many ads match | Nike, Inc.: 8,000 – 9,000; region DE: 90 |
| meta.total (political_ads) | Exact number of election ads in the country | United States: 981,207 |
| ads_count_min / ads_count_max (search) | The advertiser's ad count as the search box shows it | Nike, Inc.: 9,000 – 10,000 |
| days_shown | Days the ad was shown | 143 for an ad first shown 2026-04-28, last 2026-11-03 |
| regions[].impressions_min / max (ad) | Times shown in that EU country | Germany: 0 – 1,000 |
| eu.impressions_min / max (ad) | Times shown in the EU in total | 1,000 – 2,000 |
| spend.min / spend.max (election) | Amount spent, advertiser's currency | USD 10,000 – 15,000 |
The search-box count and the ads total for the same advertiser can differ (9,000 – 10,000 vs 8,000 – 9,000 for Nike, Inc.); both are the source's own figures. On an election ad that ran in more than one country, the political_ads row shows the figures listed for the country you searched and ad shows the ad's total: a US + Germany ad read 0 – 1,000 impressions in the Germany list and 30,000 – 35,000 in its detail.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/google-ads-transparency/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "nike"
}
}{
"ok": true,
"meta": {
"api": "google-ads-transparency",
"endpoint": "search",
"mode": "live",
"latency_ms": 501.7,
"record_count": 20,
"bytes": 1210,
"cache_hit": false,
"query": "nike",
"advertisers": 10,
"domains": 10,
"upstream_requests": 1,
"charged_credits": 1,
"version": "0.1.0",
"request_id": "44dcefa941d04b24",
"queue_ms": 1.1,
"fetched_at": "2026-11-03T13:40:18.415Z"
},
"data": {
"advertisers": [
{
"advertiser_id": "AR06641858037806006273",
"name": "Nike",
"country": "KE",
"ads_count_min": 1,
"ads_count_max": 1,
"verified": false,
"advertiser_url": "https://adstransparency.google.com/advertiser/AR06641858037806006273"
},
{
"advertiser_id": "AR13536189912721653761",
"name": "nikey",
"country": "BG",
"ads_count_min": 9,
"ads_count_max": 9,
"verified": true,
"advertiser_url": "https://adstransparency.google.com/advertiser/AR13536189912721653761"
},
{
"advertiser_id": "AR00337221161131704321",
"name": "Nikena",
"country": "BG",
"ads_count_min": 27,
"ads_count_max": 27,
"verified": true,
"advertiser_url": "https://adstransparency.google.com/advertiser/AR00337221161131704321"
}
],
"domains": [
{
"domain": "nike.cl"
},
{
"domain": "nike.in"
},
{
"domain": "nike.sk"
}
]
}
}What the Google Ads Transparency Center API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Look up advertisers and domains by name, the way the Transparency Center search box does. Returns matching advertisers (id, name, country, approximate number of ads, verified) and matching domains. Use the advertiser_id with `ads` / `advertiser`, the domain with `ads`. | SEO teams call search to look up advertisers and domains by name, the way the Transparency Center search box does. | query, limit |
| advertisers | Every advertiser whose name matches the query, paged, with the total the source reports. Rows carry the verified legal name and country. | Content strategists call advertisers to get every advertiser whose name matches the query, paged, with the total the source reports. | query, limit, page_token |
| advertiser | One advertiser: name, verified legal name, country, verification status and, for election advertisers, the number of election ads, the registration id (e.g. US EIN / FEC id) and the regions they are verified for. | Rank trackers call advertiser to get one advertiser. | advertiser_id |
| ads | All ads of one advertiser (`advertiser_id`) or all ads pointing to one domain (`domain`, any advertiser), newest first, with format, first / last shown date, days shown and the creative image or preview. Filter by country, format, platform and date range; page with page_token. One of advertiser_id or domain is required. | AI answer-monitoring tools call ads to get all ads of one advertiser (`advertiser_id`) or all ads pointing to one domain (`domain`, any…. | advertiser_id, domain, region, format, platform, ... |
| political_ads | Election ads shown in one country, newest first, with the advertiser, the impressions range and the amount spent range in the advertiser's currency (for an ad that also ran elsewhere these are the figures the source lists for this country; `ad` gives the ad's totals). Optionally one advertiser, one format or a date range. The total is exact. | SEO teams call political_ads to get election ads shown in one country, newest first, with the advertiser, the impressions range a…. | region, advertiser_id, format, date_from, date_to, ... |
| ad | One ad in full: every variation (image or preview), the topic, every country it ran in with first / last shown date, and for EU countries the impressions range per country and per platform, the EU total and the audience selection (demographics, locations, contextual signals, topics of interest, customer lists: included / excluded). Election ads add spend, impressions and age / gender / location targeting. | Content strategists call ad to get one ad in full. | creative_id, advertiser_id |
Call search from your stack
curl -X POST https://api.reefapi.com/google-ads-transparency/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike"}'import requests
r = requests.post(
"https://api.reefapi.com/google-ads-transparency/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nike"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/google-ads-transparency/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "nike"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.google-ads-transparency.search with {"query":"nike"}.Who uses this API and why
- Competitor ad monitoring: ads with a rival's advertiser_id or domain, newest first, and diff the creative_ids each day.
- Creative research: every video or image ad a brand ran on YouTube or Search in a country, with the ad image and preview.
- EU reach checks: ad gives impressions per EU country and platform and the audience selection behind an ad.
- Election ad tracking: political_ads per country with spend and impressions; ad adds age, gender and location targeting.
- Advertiser verification: advertiser returns the verified legal name and country behind an ad account.
Questions developers ask before integrating
Can I get every ad a competitor runs on Google?
Yes. Find the advertiser with search or advertisers, then call ads with its advertiser_id and page with page_token, up to 100 ads per page. Or call ads with domain=competitor.com to get every ad that points to that domain from any advertiser: nike.com returned 50,000 – 60,000 ads, more than Nike, Inc. alone (8,000 – 9,000).
Which filters are there?
Country (two-letter code, 244 countries and territories), format (text, image, video), platform (search, youtube, shopping, maps, play) and a date range. Each one changes the source's own count: Nike, Inc. goes from 8,000 – 9,000 ads to 90 in Germany, 100 – 200 videos, 13 on Google Play and 1,000 – 2,000 shown in October 2026.
Do I get the ad's text?
Text ads are published by Google as an image of the ad as it appeared on Search, so image_url is a picture of the headline, link and description. Image and video ads come with Google's preview link (preview_url) and, where Google provides one, an image. The text of image and video ads is not returned as separate fields.
How far back does it go?
As far as the Transparency Center lists ads: measured on 2026-11-03, a date window in December 2025 still returned 4,000 – 5,000 Nike ads, while January 2025 returned none for all three advertisers and domains tried.
What is in the EU data?
For ads shown in the European Union, ad returns per EU country the first and last shown date and the impressions range, split by platform, the EU total, and the audience selection: whether demographics, locations, contextual signals, topics of interest and customer lists were used to include or exclude people. Outside the EU the source publishes the last shown date per country.
Does it cover election ads?
Yes. political_ads takes a country (measured: United States 981,207 ads, India 75,285, United Kingdom 25,606, Brazil 18,270, Germany 16,451, France 16,243) and returns each ad with the advertiser, impressions range and spend range in the advertiser's currency. ad on an election ad adds first and last shown, days shown, the countries it ran in and age, gender and location targeting. advertiser on an election advertiser returns its number of election ads and its registration id.
What does verified mean?
Google's advertiser verification: verified is true when the Transparency Center shows the advertiser as verified. advertiser and advertisers also return the verified legal name and country.
How fast is it?
Measured on 80 calls on 2026-11-03: median 0.76 – 0.91 s per action; the slowest of 16 ad calls took 1.9 s.
What is the Google Ads Transparency Center API?
Google Ads Transparency Center API is a ReefAPI endpoint group for every advertiser on google and the ads they run: ads by advertiser or domain with format and first / last shown date, filtered by country, format, platform and date; one ad's countries, eu reach and audience selection; election ads with spend and targeting. It returns live JSON through POST requests under /google-ads-transparency/v1.
Is the Google Ads Transparency Center API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Google Ads Transparency Center calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Google Ads Transparency Center login or account?
No login to Google Ads Transparency Center is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Google Ads Transparency Center data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Google Ads Transparency Center API use?
Google Ads Transparency Center actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Google Ads Transparency Center from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call google-ads-transparency actions with the same key, credit pool and JSON envelope used by normal REST requests.