Google Ads Transparency Center API: Programmatic Search & Display Intel
Google ships no official Ads Transparency Center API. What ATC exposes, how AR-id and domain queries work, and how to pull Google and YouTube ads in code.

Sections
Every PPC specialist eventually hits the same wall. You can open the Google Ads Transparency Center and browse any verified advertiser's Search, Display, and YouTube ads by hand. What you cannot do is call a Google Ads Transparency Center API, because Google never shipped one for commercial ads. The data sits there, rich and public, with no programmatic handle attached.
TL;DR: Google's Ads Transparency Center exposes every verified advertiser's creatives across Search, Display, and YouTube, but offers no official API for commercial ads. The only official feed is a BigQuery dataset limited to political ads. For scripted access you have two routes: scrape a JavaScript-heavy interface that breaks without notice, or query a commercial intelligence layer that resolves AR IDs and domains into clean JSON. This guide covers what ATC exposes, how AR-id and domain queries work, YouTube coverage, and how to merge Google data with Meta in one pipeline.
That gap matters more every quarter. Google holds the second-largest pool of ad transparency data on the planet, and most competitor research stacks ignore it entirely because there is no clean way to script against it. This post walks through what the Transparency Center actually contains, why the official API never arrived, what a working Google Ads Transparency Center API substitute looks like in code, and how to fold the output into the Meta data you already pull.
What the Google Ads Transparency Center actually exposes
Google launched the Ads Transparency Center in March 2023, announced on its official blog as a searchable hub for ads from verified advertisers. Before that, transparency data lived in scattered places: a political ads report here, an "About this ad" panel there. ATC pulled it into one interface at adstransparency.google.com.
Here is what you get when you look up an advertiser:
- Creative previews across formats. Text ads from Search, image ads from Display, and video ads from YouTube all appear in one grid.
- Region filtering. You can narrow results to the countries where an ad was shown, which is how you catch a competitor testing offers in one market before rolling them out elsewhere.
- Date context. Each creative carries information about when it last ran, so you can separate live campaigns from dead ones.
- Advertiser verification. Google's verification program ties ads to a confirmed legal entity name and location. When you see "Paid for by Allbirds, Inc." you know the spend traces to a real registered company, which kills a whole class of attribution guesswork.
Coverage windows vary by category. Commercial ads generally surface from roughly the last 30 days of serving activity. Ads shown in the European Union stick around far longer, because the Digital Services Act forces large platforms to maintain ad repositories with extended retention and additional disclosure for EU-served ads. Political ads have their own longer-lived reporting track.
The EU angle deserves a working note. If your competitor serves ads to any EU member state, their Transparency Center footprint is deeper and older than their US-only footprint, with reach context the rest of the world never sees. Researchers covering global brands routinely set the region filter to an EU market first for exactly this reason, then widen out once they know what the advertiser is capable of.
Now the limits. For commercial ads, ATC shows you the creative and almost nothing else. No impressions. No spend. No engagement signals. No targeting detail outside the EU disclosures. You can see that a competitor runs a YouTube ad. You cannot see whether it is a quiet test or the creative carrying their whole quarter. The meta-ad-transparency-center-guide breakdown shows Meta's equivalent has the same blind spot for non-political ads.
Why there is no official Google Ads Transparency Center API
Meta publishes an Ad Library API with documented endpoints, parameters, and an access flow. It is restrictive, covering political and social-issue ads globally plus EU/UK commercial ads, and the Meta ad library free API guide covers exactly where those boundaries sit. But it exists. You can register an app, pass review, and pull JSON.
Google made a different call. The Ads Transparency Center is a consumer-facing web app with no developer surface for commercial ads. No documentation, and no API keys to request. The interface talks to internal endpoints that change without notice and were never offered as a contract to outside developers.
Why? Google's transparency obligations are regulatory, and the regulations mostly target political advertising and EU-served ads. A full commercial API would effectively hand competitors and ad-tech vendors a free feed of Google's most valuable behavioral surface. Meta faced the same calculus and drew its API boundary at political and EU ads. Google drew the boundary at the browser.
For a PPC specialist, the practical consequence is blunt. Anything you want to do at scale with ATC data requires a workaround. The question is which workaround survives contact with production.
The one official dataset: political ads in BigQuery
There is exactly one sanctioned programmatic feed, and it covers a sliver of the picture. Google publishes its political advertising data as a public BigQuery dataset (google_political_ads), tied to its political ads transparency reporting. If your work touches election advertising, this dataset is genuinely useful. It includes advertiser spend ranges, impression buckets, and creative metadata for ads classified as political in covered regions.
Two caveats keep it from solving the real problem. First, scope: the dataset covers political ads only, which excludes essentially every advertiser a commercial PPC team cares about. Second, granularity: figures arrive as ranges rather than exact counts, the same bucketing pattern Meta uses in its own archive.
Treat the BigQuery dataset as a proof of concept. It demonstrates Google can publish structured ad transparency data when required to. It just is not required to do so for the running-shoe brand eating your client's market share.
Scraping the Transparency Center vs commercial APIs
With no official commercial endpoint, programmatic access comes down to two options. Teams underestimate how different they are until they have shipped one.
| Scraping ATC yourself | Commercial intelligence API | |
|---|---|---|
| Setup | Headless browser, proxy rotation, retry logic | One HTTP request with a bearer key |
| Stability | Breaks whenever the front end changes | Versioned contract maintained by the vendor |
| Coverage | Google surfaces only | Google plus ten other ad networks |
| Performance signals | None for commercial ads | Impressions, runtime, estimated spend, heat score |
| Terms of service | Conflicts with Google's ToS | Standard commercial agreement |
| Real cost | Engineering hours, proxies, constant repair | Subscription plus per-call credits |
Neither route hands you a true Google Ads Transparency Center API. What you are choosing is which imitation fails less often, and how much of the failure lands on your team.
The scraping route looks cheap on day one. The Transparency Center is a JavaScript-heavy single-page app, so you need headless Chrome or an equivalent, plus proxy infrastructure once Google starts rate-limiting your IP range. Then the markup shifts, your selectors die, and your nightly competitor report silently returns zero rows for a week before anyone notices. Our roundup of Meta ad library scraping tools documents the same failure pattern on Meta's side, and Google's front end churns at least as fast.
There is also the data-quality ceiling. A scraper can only extract what the page renders, and for commercial ads the page renders no performance signals at all. You can scrape ten thousand creatives and still have no idea which five actually scaled.
Commercial intelligence APIs take a different approach. They maintain the collection layer as their core product, normalize Google ATC data into the same schema as other networks, and attach the signals the public interface withholds, such as impression estimates, runtime, and estimated spend. Spend figures from any intelligence layer are estimates rather than advertiser-reported numbers, and impression data arrives in ranges. Honest vendors say so. The understanding ad transparency libraries piece covers why platforms bucket these figures in the first place.
Google Ads Transparency Center API access through a commercial layer
Worked example time. The AdLibrary API treats Google ATC as one provider inside a multi-network search endpoint, which means Google and YouTube ads come back in the same JSON shape as Facebook, TikTok, or LinkedIn results. Auth is a single bearer key with an adl_ prefix, no app review, no OAuth refresh dance. Full request and response shapes live in the API documentation and implementation guide.
To be clear about positioning: Meta's free Ad Library API is the original here, and for political ads on Meta it remains the right tool. Meta's free API is fine for one platform. The moment you want Google, YouTube, or TikTok data in the same query, you need a paid layer, because nobody offers that aggregation for free.
Step 0: resolve the brand to an AR ID, free
Every Google advertiser in ATC carries an identifier starting with AR followed by a long numeric string. You can see it in any Transparency Center URL: adstransparency.google.com/advertiser/AR.../. Scripts need that ID, and guessing it is impossible.
The advertiser resolution endpoint is free, so always run it before spending anything:
curl -G "https://adlibrary.com/api/advertisers/search" \
-H "Authorization: Bearer adl_your_api_key" \
--data-urlencode "q=allbirds" \
--data-urlencode "country=US"
The response cross-references Meta, Google, and LinkedIn, and tells you when the platforms agree on the same brand:
{
"best_match": {
"name": "Allbirds",
"confidence": 1.0,
"google": {
"id": "AR12345678901234567890",
"name": "Allbirds",
"legal_name": "Allbirds, Inc.",
"ad_count": 214
}
}
}
That google.id is the AR ID, with the verified legal_name attached and an ad_count telling you whether the advertiser is even worth a paid query. Zero credits so far.
Query by AR ID
With the AR ID in hand, one search call pulls the advertiser's Google ATC creatives as structured JSON. The googleAtcAdvertiserId parameter scopes the search to Google's transparency data alone:
curl "https://adlibrary.com/api/search" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"googleAtcAdvertiserId": "AR12345678901234567890",
"appType": "3"
}'
Each search costs one credit, and a failed search refunds it automatically. Results carry the normalized ad object: ad_key, advertiser_name, platform, creative text, media URLs, impression, days_count for runtime, and the landing page URL.
Query by domain
Sometimes you have a website and no brand name worth trusting, a common situation when auditing affiliate or dropshipping competitors. The googleAtcDomain parameter handles that:
curl "https://adlibrary.com/api/search" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"googleAtcDomain": "allbirds.com",
"appType": "3"
}'
Domain queries catch advertisers running under unfamiliar legal entities, because the landing destination stays constant even when the verified advertiser name means nothing to you. Between AR-id and domain queries you can corner almost any Google advertiser in two calls, one of them free.

YouTube ad coverage: the blind spot in most PPC stacks
Here is the part that surprises people doing competitor analysis for the first time: the Transparency Center includes YouTube creatives, because YouTube ads run through Google's ad systems. Video is where most competitor research pipelines go dark, and ATC quietly fixes that for anyone who knows to look.
This matters for two reasons. First, video creative is expensive to produce, so a competitor sustaining a YouTube campaign for 90 days is signaling real conversion economics, which is the logic behind our YouTube ad library deep dive. Second, Performance Max pushes advertiser creatives across Search, Display, and YouTube simultaneously, so the video assets in ATC often reveal the full asset group a competitor feeds into PMax.
Programmatically, YouTube is a platform filter on the same search endpoint:
curl "https://adlibrary.com/api/search" \
-H "Authorization: Bearer adl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"keyword": "running shoes",
"platform": ["youtube"],
"adsType": ["2"],
"daysBack": 30,
"sortField": "-days",
"appType": "3"
}'
The sortField: "-days" ordering surfaces the longest-running videos first. Runtime is the most reliable public proxy for a winner, since advertisers kill underperforming video within weeks but let converters run. Pair that with daysBack: 30 and you get creatives that are both proven and currently in-market. For a wider comparison of programmatic options on the video side, the ad library alternative for YouTube ads roundup goes deeper.
One honest caveat. No third-party layer sees YouTube targeting or auction data, so what you get is the creative, the advertiser, the runtime, and reach signals. That is still far more than the zero rows most teams currently pull from YouTube.
Combining Google ATC data with Meta in one pipeline
Single-platform research produces single-platform conclusions. A brand's Google Search ads tell you which keywords they defend. Their Meta ads tell you which creative angles they scale to cold traffic. Read together, you see the whole funnel, which is the premise behind our Meta ads vs Google ads comparison and the cross-platform strategy playbook.
Because the AdLibrary API normalizes both networks into one schema, the merge is a few lines of Python rather than an ETL project:
import requests
API = "https://adlibrary.com/api/search"
HEADERS = {"Authorization": "Bearer adl_your_api_key"}
def search(filters):
r = requests.post(API, headers=HEADERS, json={"appType": "3", **filters})
r.raise_for_status()
return r.json()
google_side = search({"googleAtcDomain": "allbirds.com"})
meta_side = search({"keyword": "allbirds", "platform": ["facebook", "instagram"]})
ads = google_side["results"] + meta_side["results"]
ads.sort(key=lambda a: a.get("days_count", 0), reverse=True)
for ad in ads[:20]:
print(ad["platform"], ad.get("days_count"), (ad.get("title") or "")[:60])
print("Credits left:", meta_side["_credits"]["remaining"])
Two credits total, and you have a runtime-ranked board of the brand's most persistent creatives across both ecosystems. The _credits.remaining field comes back on every response, so your script always knows its own budget.
What do you do with the merged view? The highest-value read is angle divergence. When a competitor runs comfort-focused hooks on Meta but defends price-comparison keywords on Google Search, they are telling you their Meta angle does not survive high-intent traffic. That kind of competitive intelligence read is invisible inside any single platform's library. Feed the merged JSON into an AI workflow, as covered in Claude Code AdLibrary API workflows, and the analysis step automates too. Teams building ad data into AI agents use exactly this merge as the retrieval layer.
Since ATC publishes no spend for commercial ads, plug observed runtime and format mix into the ad spend estimator to model what a competitor's Google presence costs them, then sanity-check your own side with the CPC calculator.
The tier-gating reality on commercial APIs
Time for the part vendors bury in pricing footnotes. Anyone selling Google Ads Transparency Center API access is selling a collection layer they maintain at real cost, and that cost shows up in tier structure. Google ATC data is consistently gated to higher plans across the ad-intelligence market, because collecting and normalizing it is more expensive than Meta data, where a free official API covers part of the load. Whatever vendor you evaluate, check which tier actually includes Google and YouTube results before you commit. Entry plans frequently exclude them, and demo accounts rarely make the exclusion obvious until your first scripted query comes back empty.
AdLibrary is no exception, and the structure is worth stating plainly. Google ATC results are available on Pro and Business plans, and API keys themselves are a Business plan feature at €329/mo with 1000+ monthly credits. Each search costs one credit regardless of how many filters you stack, advertiser resolution stays free, and rate limits sit at 10 requests per minute and 10,000 per day per key.
Whether that price clears your bar depends on what the manual alternative costs. An analyst spending four hours a week screenshotting competitor ads across Google, YouTube, and Meta costs more than €329 in loaded salary before the month is half over, and produces a deck instead of a dataset. The multi-platform coverage is the actual product. One key replaces eleven collection problems.
If you want to validate the data quality before automating anything, run searches manually on a lower tier first, then move up when the scripts are ready. The ad library alternative with API access comparison lays out how the tiers map to research workflows.
A scheduled monitoring workflow you can run tonight
Theory aside, the standard production pattern for Google ads monitoring is a short nightly job. It mirrors the setup from our competitor ad monitoring setup guide, adapted for Google ATC:
- Resolve once, store forever. Run the free advertiser resolution for each competitor and cache the AR IDs. They are stable identifiers, so this is a one-time cost of zero credits.
- Query nightly by AR ID. One search per competitor per night. Ten competitors means ten credits a night, roughly 300 a month, comfortably inside a Business allowance.
- Dedupe on
ad_key. Google creatives arrive keyed with agoogle_prefix. New keys since yesterday are new creatives, which is your alert condition. - Sort survivors by runtime. A creative crossing 45 days of
days_counthas earned a closer look. That threshold cuts alert noise dramatically. - Enrich only the winners. The AI ad enrichment endpoint turns a single ad into a full teardown and replication brief for one credit. Run it on the two or three creatives that cleared your runtime bar, never on everything.
Scheduling is whatever your stack already uses. Cron and a Python script is enough, the n8n Meta ads automation recipes translate directly to Google queries, and if your team lives in an AI coding agent, building your own AdLibrary MCP server wires the same calls into chat. The general discipline of how to monitor competitor ads applies regardless of tooling, and the full pattern is documented as the automate competitor ad monitoring use case.
The alert itself can be as plain as a Slack webhook with the new creative's landing_page_url and runtime, or as elaborate as an auto-generated brief in your project tool. Start plain. The teams that keep these monitors alive for years are the ones that shipped a boring version in an afternoon and let the demand for richer output come from actual use.
Budget the credits like an engineer. Searches are the metered unit, so cache results on ad_key, schedule narrow pulls instead of weekly full sweeps, and let free resolution calls answer every "who is this advertiser" question. A disciplined ten-competitor watch costs less per month than one hour of the analyst time it replaces, and the ad budget planner helps you model the spend side it informs.
Frequently Asked Questions
Does Google have an official Ads Transparency Center API?
No. There is no official Google Ads Transparency Center API for commercial ads. The only official programmatic feed is the google_political_ads BigQuery dataset, which covers political advertising exclusively. Commercial ad data is accessible by browsing adstransparency.google.com manually or through third-party commercial intelligence APIs that normalize the data.
How do I find a Google advertiser's AR ID?
Open any advertiser page in the Ads Transparency Center and the AR ID appears in the URL after /advertiser/. Programmatically, the AdLibrary API's free advertiser resolution endpoint returns the AR ID, verified legal name, and ad count for any brand name, alongside matching Meta and LinkedIn identifiers.
Can I see YouTube ads in the Google Ads Transparency Center?
Yes. YouTube ads run through Google's ad systems, so video creatives from verified advertisers appear in the Transparency Center alongside Search and Display ads. Programmatic layers expose the same coverage, typically via a youtube platform filter combined with format and date parameters.
Is scraping the Google Ads Transparency Center allowed?
Scraping conflicts with Google's terms of service, and the Transparency Center's JavaScript-heavy front end breaks scrapers whenever its markup changes. Most teams that start with scrapers move to a commercial API because maintenance costs exceed subscription costs within months, and scraped pages contain no performance signals for commercial ads anyway.
How much does programmatic access to Google ATC data cost?
On AdLibrary, API access is part of the Business plan at €329/mo, which includes 1000+ monthly credits. Each multi-platform search costs one credit, advertiser resolution is free, and failed searches refund automatically. Google ATC results specifically require a Pro or Business tier, a gating pattern common across the ad-intelligence market.
Build the shovel before the next audit
The Google Ads Transparency Center is the rare case where the data already exists, verified and public, and the bottleneck is purely access. Waiting for an official Google Ads Transparency Center API is not a strategy, since Google has had years to ship one and built a browser interface instead. Scraping is a strategy with a half-life measured in weeks.
The commercial-layer route is the one that survives production: resolve a brand to its AR ID for free, pull its Google and YouTube creatives as structured JSON for one credit, merge with Meta data in the same schema, and schedule the whole loop. If your competitor research already lives in scripts, API access on the Business plan at €329/mo is the missing Google-shaped piece, and the searches you run manually today on unified ad search translate one-to-one into the API calls you will schedule tomorrow. The transparency data has been sitting there since 2023. Bring a shovel.
Related Articles

YouTube Ad Library: What It Actually Is and How to Use It in 2026
There is no Meta-style YouTube Ad Library. The official tool is Google Ads Transparency Center — narrow, gated, limited. Here's what it does, what it can't, and what serious researchers use instead.

Meta Ad Transparency Center: Complete Guide
How to use the Meta Ad Transparency Center to research competitor ads, decode creative strategy, and build a systematic swipe file for your campaigns.

How to Monitor Competitor Ads: The Ongoing Playbook for Diff-Detection and Alerts
Stop refreshing ad libraries manually. Build a competitor ad monitoring system with scheduled API pulls, diff-detection, and Slack alerts that tells you what changed since last week.

Meta ad library scraping tools: 8 best for 2026
Compare 8 meta ad library scraping tools by data method, spend signals, and ToS risk—plus one API-native option that skips scraping entirely.

Claude Code + adlibrary API: End-to-End Competitor Intelligence Workflows
Run five Claude Code workflows against the adlibrary API for automated competitor monitoring: Slack alerts, bulk teardowns, hook extraction across 500 ads, monthly landscape reports, and new entrant detection.

Full adlibrary API Documentation and Implementation Guide
Complete API documentation for AdLibrary. Extract Meta Ads, Google Ads, TikTok Ads and more via REST API. Code examples, endpoints, authentication, and rate limits.