Google Ad Library API — Find a Brand’s Ads
Documentation menu
FetchLayer FetchLayer API

Find the ads a brand is running

Find the ads run by the advertisers matching a brand or company name, or by an advertiser website when domain is given, across Google Search, YouTube, Shopping, Maps and Play. The query matches advertiser names, not the wording inside ads — Google publishes no searchable index of ad copy, so there is no full-text search over creative. The advertisers the query resolved to come back on matchedAdvertisers so you can confirm what it matched before trusting the ads. A name that matches nothing returns 404 rather than an empty list.

POST /search-ads Ads
https://api.fetchlayer.dev/google-ad-library/search-ads
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

query string required

Advertiser or brand name to find ads for. This matches advertiser names, not ad wording.

domain string optional

Search by advertiser website instead of by name, for example nike.com.

advertiserLimit number optional

How many matching advertisers to pull ads from (max 10). Raise it when a brand name resolves to several registered advertisers. (default: 1)

region string optional

Two-letter country code, or ANYWHERE. (default: ANYWHERE)

regions string[] optional

Several countries at once (max 20). Overrides region.

adFormat string optional

text, image, or video. Google publishes one format per ad.

surfaces string[] optional

Restrict to the Google surfaces the ad ran on: search, youtube, shopping, maps, play.

shownAfter string optional

Only ads shown on or after this YYYY-MM-DD date.

shownBefore string optional

Only ads shown on or before this YYYY-MM-DD date.

limit number optional

Maximum ads returned (max 2000), or -1 for everything available. (default: 30)

pages number optional

Pages of results to collect in one request (max 100), or -1 for the maximum allowed.

cursor string optional

Resume from a previous response's nextCursor.

delayMs number optional

Milliseconds to wait between pages (max 30000).

sortBy string optional

first_shown, days_shown, or none.

sortDirection string optional

asc or desc.

Response Fields

search-ads

Find the ads a brand is running

query string

The name the search ran with.

matchedAdvertisers object[]

The advertisers the query resolved to, with their ids, verified country and approximate ad counts. Check this before trusting the ads — a common brand name can resolve to the wrong registered advertiser.

ads object[]

The matching ads.

ads[].adId string

Ad id — the handle for ad-detail and ad-media, which also need the advertiserId.

ads[].adLibraryUrl string

Public Google Ad Library permalink for this ad.

ads[].advertiserId string

Advertiser running the ad.

ads[].advertiserName string

Advertiser name as Google publishes it.

ads[].format string

text, image, or video.

ads[].firstShownDate string

First day the ad was seen, as YYYY-MM-DD.

ads[].daysShown number

Days the ad was actually shown. Approximate, and lower than the span between its first and last day whenever the ad paused.

ads[].domain string

The advertiser's website, when Google reports it.

ads[].regions object[]

Countries the ad ran in with the last date seen in each. Populated on a single-ad lookup; empty on a listing.

ads[].variations object[]

Each version of the creative. Google publishes ads as pictures of the rendered ad, not as separate headline and body text — see the note on ad-detail.

ads[].variationCount number

How many creative versions the ad carries.

ads[].previewImageUrl string

First picture of the ad across its versions, for a quick preview.

filters object

The filters this request actually ran with, after defaults were applied.

adCount number

Number of ads in this response.

approximateTotal object

Roughly how many ads match in total, as a { min, max } range. Google publishes counts as ranges, never exact figures.

pagesScraped number

Pages actually walked. Each page counts as one request against your plan.

pagesRequested number

Pages the request asked for, which can exceed pagesScraped when the listing ran out.

nextCursor string

Pass back as cursor to continue, or null when the listing is exhausted.

hasNextPage boolean

Whether more results are available beyond this response.

notes string[]

Caveats about this particular result — a walk that stopped short, or a listing that may be incomplete. Read it before treating a result set as the whole picture.

Request

curl -X POST "https://api.fetchlayer.dev/google-ad-library/search-ads" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"query":"Nike","region":"US","surfaces":["youtube","search"],"adFormat":"video","limit":30}'

Response

{
  "query": "Nike",
  "adCount": 30,
  "pagesScraped": 1,
  "hasNextPage": true,
  "approximateTotal": {
    "min": 1000,
    "max": 5000
  },
  "matchedAdvertisers": [
    {
      "advertiserId": "AR01234567890123456789",
      "advertiserName": "Nike, Inc.",
      "countryCode": "US",
      "approximateAdCount": {
        "min": 1000,
        "max": 5000
      }
    }
  ],
  "ads": [
    {
      "adId": "CR01234567890123456789",
      "advertiserId": "AR01234567890123456789",
      "advertiserName": "Nike, Inc.",
      "format": "video",
      "firstShownDate": "2026-07-14",
      "daysShown": 48,
      "domain": "nike.com",
      "variationCount": 2
    }
  ],
  "notes": []
}