Every ad Google runs.
Search, YouTube, Shopping.
Find the ads any advertiser is running across Google Search, YouTube, Shopping, Maps and Play. Creative versions, formats, run dates, the countries each ad ran in, verified advertiser identity, and the actual video and image files — as structured JSON. No Cloud project, no OAuth, no Ads API developer token.
Trusted by developers shipping real products.
493,455 served today
Request
$ curl -X POST \ https://api.fetchlayer.dev/google-ad-library/advertiser-ads \ -H "Authorization: Bearer ss-your-key" \ -H "Content-Type: application/json" \ -d '{"advertiser":"Nike","region":"US","surfaces":["youtube"]}'
Response
{
"advertiserName": "Nike, Inc.",
"ads": [{
"adId": "CR01234567890...",
"format": "video",
"firstShownDate": "2026-07-14",
"daysShown": 48,
"domain": "nike.com",
"variationCount": 2
}],
"approximateTotal": { "min": 1000, "max": 5000 },
"nextCursor": "eyJwYWdlIjoy..."
} Built for feedback workflows
Fetch the public signal. Use it wherever your team works.
Advertiser-first, by design
Google organises transparency data by advertiser, so that is where you start. Resolve a brand name or a website into an advertiser ID, then pull everything it is running. There is no keyword search over ad copy — none exists upstream — and every search reports which advertisers it matched so you can check it found the right company.
Five surfaces, every country
Filter to Search, YouTube, Shopping, Maps, or Play in any combination, across one country or twenty. Each ad reports the countries it ran in with the last date it was seen in each — so you can see a campaign roll out market by market.
The creative files, not screenshots
Every video, image, and thumbnail as a downloadable asset URL, with the YouTube video ID where the creative is hosted there. Stream the bytes through GET /media with HTTP Range support, and skip Google’s own signed URLs — those expire and only play back from the address they were issued to.
Every version of the creative
One ad-detail call returns each version of an ad’s creative, its format, and when it first ran. Google publishes ads as pictures of the rendered ad rather than as separate headline and body fields — so you get the creative as it was actually shown.
Run dates that mean something
firstShownDate and daysShown tell you how long an ad has actually been shown, not just the calendar span — paused days are excluded. Long-running creative is the creative an advertiser keeps paying for, and that is the signal worth building a swipe file around.
Verified advertiser identity
Advertiser profiles return the legal name on an advertiser’s completed Google identity verification alongside the name it advertises under, plus the country it verified in. For political and issue advertising, that gap is usually the whole story.
Ceilings reported, not hidden
Google publishes counts as ranges rather than exact figures, and a long page walk can stop short. Every response carries a notes array saying what happened to that specific result, so an incomplete answer never arrives looking complete.
AI-ready JSON
Hand formats, run dates, surfaces, and creative URLs to an LLM or an MCP agent to cluster campaigns, spot rotation, and write the brief — no HTML parsing, no headless browser, no wrapper code.
Map a competitor’s whole Google presence—then export it.
Prefer not to write code? Give FetchLayer Research Chat a brand, ask what it is running on Search and YouTube and which creative has survived longest, and turn the whole rotation into a structured file for your swipe folder, client deck, or media plan.
- ✓Ask questions in plain English
- ✓Analyze themes, sentiment, and pain points
- ✓Download the structured results as CSV or JSON
No code or setup required · Uses your FetchLayer credits
Find the advertiser behind this brand, pull everything it is running in the US across Search and YouTube, flag which creatives have run longest, then export it as CSV.
I matched the brand to one registered US advertiser, pulled its live rotation across Search and YouTube, and marked the four creatives that have been shown for over 90 days. The full ad-level breakdown is ready to download.
google-ad-library-competitor-ads.csv
214 ads · 12 columns · ready to download
Solutions
Build the workflow around the feedback.
Cover the other half
Pull the same competitor’s paid social from the Facebook Ad Library, in the same JSON shape.
Explore →Read the reaction
A video ad’s public comments say more about how it landed than any impression count.
Explore →Find the demand
Search public discussions for the objections and problems your next creative should answer.
Explore →From raw feedback to action
One request is the start of the workflow.
Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.
- 01
Resolve the advertiser
Search a brand name or a website to get its advertiser ID. Several advertisers often share one brand name, so compare the verified country and approximate ad count to pick the right one.
- 02
Pull the ads and the creative
Filter by country, format, surface, and date, page through with a cursor, then request the media assets for the ads worth keeping.
- 03
Turn ads into intelligence
Build a swipe file, diff the rotation week over week, track a campaign rolling out market by market, or hand the JSON to an agent to write the creative brief.
MCP & agents
Your AI already knows
how to use this.
Use the Google Ad Library endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.
Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.
Get your free API keyFree tier · no credit card · any MCP host
Find the advertiser behind this brand, show me everything it is running on YouTube and Search in the US, and tell me which creative has been live the longest.
Matched one registered US advertiser and pulled 214 ads across Search and YouTube. The longest-running creative has been shown for 146 days, video outnumbers text three to one, and the media files are ready to download.
Works with every MCP-compatible tool
Use cases
What teams build with Google ad data.
Same API, endless applications. Here is what teams ship with public Google ad data.
Competitor creative tracking
See every ad an advertiser runs across Google Search, YouTube, Shopping, Maps and Play, with formats and run dates.
AI agent context
Give Claude, Codex, or your MCP agent structured ad records and creative URLs instead of a folder of screenshots.
Ad fatigue & rotation
Poll an advertiser on a schedule to see which creatives get killed, which keep running, and what replaces them.
Political & issue ad research
Read the verified legal identity behind an advertiser alongside the countries and dates each ad actually ran.
Creative swipe files
Download the real video and image files behind long-running ads and build a searchable inspiration library.
Agency client reporting
Pull a client’s whole category on demand and turn live competitor activity into a report that writes itself.
Compare approaches
Spend time on the insight, not the collection layer.
| What you need | FetchLayer | Official API | Build it yourself |
|---|---|---|---|
| Read competitor ads without an ads account | ✓ | Your campaigns only | You build it |
| Search, YouTube, Shopping, Maps & Play | ✓ | Not exposed | You build it |
| Downloadable video & image assets | ✓ | Not exposed | You extract them |
| Bearer auth from one account | ✓ | Cloud project + OAuth | You manage it |
| Ready for AI and MCP workflows | ✓ | Your integration | Your integration |
FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.
Pricing
Start free. Scale when ready.
Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.
Free plan — 30 requests
Verify responses, inspect the API, no credit card required.
Pay as you go
$1.99
per 1,000 requests
$0.00199 per request · credits never expire
How credits work — no multipliers
One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.
- No multipliers — 1 request = 1 credit
- No monthly commitment
- Credits never expire
- Same API & MCP access as subscribers
- ∞ req/min, ∞ API keys
∞
Expiry
Credits stay until you use them. No monthly reset, no pressure to hit a quota.
0
Commitments
No subscription, no contract, no minimums. Start, pause, or scale whenever.
100%
Access
Every endpoint and MCP included. Not a limited tier — same data as any subscriber.
API reference
Every parameter, documented.
All requests are POST with a JSON body and Bearer auth header.
POST /google-ad-library/search-ads Find the ads a brand or website is running across Search, YouTube, Shopping, Maps, and Play. Matches advertiser names, not ad wording — Google publishes no searchable index of ad copy — and reports what it matched on matchedAdvertisers.
query* string Advertiser or brand name to find ads for. Matches advertiser names, not ad wording. domain string Search by advertiser website instead of by name, e.g. nike.com. advertiserLimit number How many matching advertisers to pull ads from (max 10). Defaults to 1. region string Two-letter country code, or ANYWHERE. Defaults to ANYWHERE. regions string[] Several countries at once (max 20); overrides region. adFormat string 'text' | 'image' | 'video'. surfaces string[] 'search' | 'youtube' | 'shopping' | 'maps' | 'play'. shownAfter string Only ads shown on or after this YYYY-MM-DD date. shownBefore string Only ads shown on or before this YYYY-MM-DD date. limit number Maximum ads returned (max 2000), or -1 for everything available. Defaults to 30. pages number Pages of results to collect in one request (max 100). cursor string Resume from a previous response's nextCursor. sortBy string 'first_shown' | 'days_shown' | 'none'. POST /google-ad-library/advertiser-ads Every ad one advertiser is running, with the same filters as a brand search. Once you hold an advertiser ID this is the endpoint to use: it skips name resolution, so the wrong registered advertiser can never be matched.
advertiser* string Advertiser ID, Ad Library advertiser URL, or advertiser name region string Two-letter country code, or ANYWHERE. adFormat string Restrict to text, image, or video ads. surfaces string[] Search, YouTube, Shopping, Maps, Play. limit number Maximum ads returned (max 2000), or -1 for everything available. pages number Pages of results to collect in one request (max 100). POST /google-ad-library/search-advertisers Find advertisers by name. Returns the advertiser ID every lookup needs, the country each one verified in, and roughly how many ads it is running — several distinct advertisers often share one brand name, so compare the counts.
query* string Advertiser or brand name to look up region string Two-letter country code, or ANYWHERE. regions string[] Several countries at once (max 20). limit number Maximum advertisers returned (max 100), or -1 for everything available. includeDomains boolean Also return advertiser websites matching the name. Defaults to true. POST /google-ad-library/advertiser-profile An advertiser’s verified identity: the name it advertises under, the legal name on its completed Google advertiser verification, and the country it verified in.
advertiser* string Advertiser ID, Ad Library advertiser URL, or advertiser name region string Two-letter country code. POST /google-ad-library/ad-detail One ad in full: every version of the creative, the format, the countries it ran in with the last date seen in each, and when it first ran. Pass a full Ad Library ad URL, or an ad ID together with its advertiser.
ad* string Ad ID, or an Ad Library ad URL advertiser string The ad’s advertiser. Required unless ad is a full Ad Library ad URL. region string Two-letter country code. includeRunDates boolean Also report when the ad first ran and how many days it ran. Defaults to true. POST /google-ad-library/ad-media An ad’s videos, images, and thumbnails as downloadable asset URLs, including the YouTube video ID where there is one. Pair it with GET /google-ad-library/media, which streams the bytes with HTTP Range support so video seeking works.
ad* string Ad ID, or an Ad Library ad URL advertiser string The ad’s advertiser. Required unless ad is a full Ad Library ad URL. kinds string[] 'image' | 'video' | 'thumbnail'. Defaults to all three. probe boolean Confirm each asset is still downloadable and report its size and content type. inline boolean Return the bytes base64-encoded. Refused for assets over the inline size limit. POST /google-ad-library/resolve-url Parse any Ads Transparency Center URL into the structured filters it encodes — whether it points at one ad, one advertiser, or one website, plus the region, format, surface, date, and political-only filters in the query string. Free: it never consumes a credit.
url* string Any Ad Library URL, to be parsed into structured filters Fields marked * are required. Full API reference →
FAQ
Common questions.
Is the Google Ad Library public data?
Yes. Google publishes the Ads Transparency Center so anyone can see the ads an advertiser is running across Search, YouTube, Display, Shopping, Maps, and Play. FetchLayer retrieves those publicly available records and returns them as structured JSON. FetchLayer is not affiliated with, endorsed by, or sponsored by Google.
Can I search the text inside ads?
No — and neither can anyone else. Google publishes no searchable index of ad copy, so full-text search over ad wording does not exist upstream and no API can offer it. What /search-ads does instead is resolve a brand name, or an advertiser website via the domain parameter, to the advertisers Google has registered, then return their ads. Every response tells you which advertisers it matched on matchedAdvertisers, so you can confirm it found the right company before you trust the results. Once you hold an advertiser ID, /advertiser-ads skips the resolution step entirely.
Do I need a Google Cloud project or an Ads API developer token?
No. You authenticate with your FetchLayer API key — the same Bearer token you use for every other platform. There is no Google Cloud project to create, no OAuth consent screen, no developer token to apply for, and no advertiser account required. The Google Ads API is for managing your own campaigns; this is for reading what everyone else is running.
What identifiers can I pass in?
For an advertiser: an advertiser ID, an Ads Transparency Center advertiser URL, or a plain advertiser name. For a single ad: a full Ad Library ad URL, or an ad ID together with its advertiser — Google needs both to locate an ad, so an ad ID on its own is not enough. If you only have a brand name, /search-advertisers turns it into an advertiser ID, and /resolve-url parses any Ad Library URL into the structured filters it encodes without consuming a credit.
Which Google surfaces are covered?
Search, YouTube, Shopping, Maps, and Play. Pass the surfaces filter to restrict a listing to any combination of them — YouTube plus Search to isolate video and text campaigns, Shopping on its own to see what a retailer is pushing on product listings. Each ad also reports the countries it ran in, with the last date it was seen in each.
Can I download the actual video and image files?
Yes. /ad-media resolves every video, image, and thumbnail on an ad into a downloadable asset URL, including the YouTube video ID where the creative is hosted there, optionally probed to confirm it is still live and to report its size and content type. Use each asset’s downloadUrl rather than Google’s own URL: Google’s video URLs are signed, expire, and only play back from the address they were issued to. GET /google-ad-library/media then streams the bytes with HTTP Range support, so video seeking works in a player.
Does it cover political and issue ads?
Yes. Google’s transparency reporting was built around election advertising, and political and issue ads are part of the same corpus this API reads. /resolve-url reports the political-only flag carried in an Ad Library URL, and advertiser profiles return the legal name on an advertiser’s completed Google identity verification alongside the name it advertises under — which is often what you actually want to know about a political advertiser.
What does Google not publish?
Three things worth planning around. Ad counts come back as ranges, never exact figures — approximateTotal is a min and a max. Ads are published as pictures of the rendered ad rather than as separate headline, body, and call-to-action fields, so there is no ad copy to read as text. And daysShown counts days an ad was actually shown, which is lower than the calendar span whenever the ad paused. Every response carries a notes array reporting anything specific to that result — a page walk that stopped short, a listing that may be incomplete, run dates that could not be resolved. Read it before treating a result set as complete.
Can I use this with an AI model or MCP agent?
Yes. Every response is structured JSON you can store, embed, or hand to an LLM, and all eight endpoints are exposed through FetchLayer’s MCP server — so an agent can resolve a brand to its advertiser, pull the live rotation across Search and YouTube, and fetch the creative files without any wrapper code.
How does billing work?
One API request equals one credit, the same as every other FetchLayer platform — no multipliers. Each page walked counts as one request, so pages: 10 bills as ten. Parsing an Ad Library URL with /resolve-url is free and consumes nothing; streaming media bytes bills as a normal request. Google Ad Library is in Beta while coverage expands, at standard pricing.
Start pulling Google Ad Library data today.
Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.
Used by developers at
Individual developers or teams — not official partnerships