Google Ad Library API — Competitor Ads as JSON | FetchLayer
Unofficial Third-party API
8 endpoints live

Every ad Google runs.
Search, YouTube, Shopping.

Ads across five surfaces Downloadable video & images Verified advertiser identity AI-ready JSON

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.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

493,455 served today

POST /google-ad-library/advertiser-ads
200 OK

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..."
}

Used by developers at

Individual developers or teams — not official partnerships

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.

FetchLayer Research Chat

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
Research ads in Chat

No code or setup required · Uses your FetchLayer credits

Google Ad Library research

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.

Y

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

CSV

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.

  1. 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.

  2. 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.

  3. 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

Live

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.

1
Pick your editor
2
Agent discovers 8+ tools
3
Query any platform instantly
connect your agent ~30s

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 key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

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.

Used fetchlayer.google_ad_library_advertiser_ads

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.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 8 endpoints exposed as tools
Official & maintained
Free to install

Use cases

What teams build with Google ad data.

Same API, endless applications. Here is what teams ship with public Google ad data.

01

Competitor creative tracking

See every ad an advertiser runs across Google Search, YouTube, Shopping, Maps and Play, with formats and run dates.

competitorsadsresearch
02

AI agent context

Give Claude, Codex, or your MCP agent structured ad records and creative URLs instead of a folder of screenshots.

llmagentsmcp
03

Ad fatigue & rotation

Poll an advertiser on a schedule to see which creatives get killed, which keep running, and what replaces them.

alertsmonitoringcron
04

Political & issue ad research

Read the verified legal identity behind an advertiser alongside the countries and dates each ad actually ran.

politicstransparencyidentity
05

Creative swipe files

Download the real video and image files behind long-running ads and build a searchable inspiration library.

creativeassetsswipe
06

Agency client reporting

Pull a client’s whole category on demand and turn live competitor activity into a report that writes itself.

agenciesreportingcsv

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Read competitor ads without an ads accountYour campaigns onlyYou build it
Search, YouTube, Shopping, Maps & PlayNot exposedYou build it
Downloadable video & image assetsNot exposedYou extract them
Bearer auth from one accountCloud project + OAuthYou manage it
Ready for AI and MCP workflowsYour integrationYour 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.

Try free

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
Get API key

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.