Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Google Ads Transparency Scraper icon

Google Ads Transparency Scraper

Scrape Google Ads Transparency Center by domain, advertiser name or ID. Get ad creatives, formats, first and last shown dates. $0.60 per 1,000 ads.

280 runs on Apify $0.0006 per Google ad result ($0.6 / 1,000)
Run this in the cloudRun on Apify →

Ad Intelligence & Competitor Research

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust advertiserDomains, advertiserNames, advertiserIds (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0006 per Google ad result = $0.6 per 1,000

You are charged forWhenPrice
Google ad resultOne real row returned from Google Ads Transparency Center — an ad creative, or an advertiser when you use "List advertisers only". Sample rows, empty results and errors are never charged.$0.0006

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-08, and they are what you are actually charged.

Inputs

FieldWhat it doesType
advertiserDomainsLanding-page domains to look up, for example nike.com. This is the easiest way in: you get every Google ad whose landing page sits on that domain, across all advertiser accounts.array
advertiserNamesAdvertiser names as they appear in Google's verification records, for example "Nike, Inc.". Each name is resolved to its advertiser ID and then scraped. Turn on "List advertisers only" to get the matching advertisers instead of their ads.array
advertiserIdsGoogle advertiser IDs such as AR16735076323512287233. You can read one off any adstransparency.google.com URL.array
startUrlsPaste advertiser or creative permalinks, e.g. https://adstransparency.google.com/advertiser/AR16735076323512287233?region=USarray
regionTwo-letter country code to restrict the ads to (US, GB, DE, BR, IN ...), or "anywhere" for every country. Regional filtering changes both the result set and the ad counts Google reports.string
adFormatKeep only one creative format.string
platformOnly ads Google showed on this platform. Google does the narrowing itself, so you only pay for matching ads. It takes one platform per search, so for two platforms run it twice. It does not work with "List advertisers only".string
maxItemsStop after this many rows in total, across every target. Only real rows count.integer
listAdvertisersOnlyWith "Advertiser names" filled in, return the matching advertisers (ID, name, verified country, ad-count band) instead of their creatives. Useful when you need to find an advertiser ID first.boolean
includeRegionStatsFetch each creative's full country breakdown: impression band, first/last shown date and surface split (Search, YouTube, Maps, Shopping, Play) per country. Adds one request per ad.boolean
includeAdvertiserDetailsLook up the advertiser's verified legal name and country once per advertiser.boolean
egressModeAdvanced. Leave on "auto" unless a run is repeatedly refused, then try another option.string

What you get

A structured dataset — each result includes fields like:

advertiserNameadvertiserIdcreativeIdadFormatfirstShownAtlastShownAtregionsShownCountlandingDomainpreviewImageUrlcreativeUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Ad Intelligence & Competitor Research

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Meta Ad Library Scraper iconAd Intelligence & Competitor Research

Meta Ad Library Scraper

Scrape Facebook and Instagram Ad Library ads by keyword, Page ID or URL. Get ad copy, creatives, dates and platforms. No login. $0.34 per 1,000 ads.

Ready to run — no setup

TikTok Trending Hashtags iconAd Intelligence & Competitor Research

TikTok Trending Hashtags

Get TikTok Creative Center hashtag rankings by country: rank, posts, views, popularity curve and top creators. Three at a time. No login needed.

2 use cases

SaaS Competitor Monitor: Pricing, Changelog & Positioning iconMonitors & Alerts

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track a competitor's SaaS pricing, changelog and positioning on a schedule. You get only what changed, sent to Slack. $0.01 per page checked.

4 use cases

G2 Reviews Scraper iconReviews & Reputation Data

G2 Reviews Scraper

Scrape G2 software reviews at $1.70 per 1,000: rating, title, full text, reviewer, date and URL. Works on any product. No G2 account or API key.

Ready to run — no setup

Google Trends Scraper iconAd Intelligence & Competitor Research

Google Trends Scraper

Get Google Trends data with no API key. Interest over time, interest by region or city, top and rising queries. $0.06 per 1,000 rows.

Ready to run — no setup

Yandex Search Engine Scraper (SERP API) iconAd Intelligence & Competitor Research

Yandex Search Engine Scraper (SERP API)

Scrape Yandex search results by keyword or URL. Get rank, title, URL, domain, snippet, ads and SERP features. Pick the region. $3.40 per 1,000.

1 use cases

See all Ad Intelligence & Competitor Research →

Google Ads Transparency Scraper: the ads a brand is running, by domain or advertiser

Give it a landing domain like nike.com, an advertiser name, an advertiser ID or a link from the Ads Transparency Center, and get one row per ad creative: the format, when Google first and last saw it serving, on how many days it served, and a link that opens the ad itself.

What it cannot give you, said up front: money. Google does not publish spend or budget anywhere in this archive. Impressions, where they exist at all, arrive as wide bands like "up to 1,000", per country, and only when you ask for them.

InputAdvertiser domains, names, IDs, or Ads Transparency links
OutputOne row per ad creative, or one per advertiser
Ceiling20,000 rows per run
Account neededNone, and no Google API key
Price$0.60 per 1,000 ads, flat on every plan

📣 What Google Ads Transparency Scraper does

The Ads Transparency Center is the public archive Google publishes of the ads running through its network. This reads it.

Four ways in. A domain catches every advertiser account pointing at it, which is the easiest start. A name is resolved to an advertiser ID first. An ID pins you to one entity. A link from the site works as pasted.

Two shapes of row. By default you get creatives. Switch listAdvertisersOnly on with a name and you get the matching advertisers instead, with their IDs, verified country and a rough ad-count band, which is how you find the right entity before spending anything.

Two optional extras. includeRegionStats adds the per-country breakdown: impression band, first and last shown dates, and the split across Search, YouTube, Maps, Shopping and Play. includeAdvertiserDetails adds the advertiser's verified legal name and country.

Creatives shared between two of your targets are deduplicated, so you are not billed twice for the same ad.

📥 What you give it

Fill in at least one of the first four.

{
  "advertiserDomains": ["nike.com"],
  "region": "US",
  "adFormat": "any",
  "maxItems": 100
}
FieldDefaultWhat it is
advertiserDomainsbox starts at nike.comLanding-page domains. Catches every advertiser account pointing there.
advertiserNamesnoneNames as Google verified them, like Nike, Inc.. Resolved to an ID, then scraped.
advertiserIdsnoneIDs like AR16735076323512287233, readable off any Ads Transparency link.
startUrlsnoneAdvertiser or creative permalinks pasted from the site.
regionanywhereTwo-letter country code, or anywhere. It changes the result set, not just the labels.
adFormatanyany, IMAGE, TEXT or VIDEO.
platformanyany, SEARCH, YOUTUBE, SHOPPING, MAPS or PLAY. Only ads Google showed there, and Google does the narrowing. One platform per search. Not with listAdvertisersOnly.
maxItems100Total rows across every target, up to 20,000. It is also the most a run can bill you.
listAdvertisersOnlyoffWith names filled in, return the advertisers instead of their creatives.
includeRegionStatsoffPer-country impression bands and surface split. One extra request per ad.
includeAdvertiserDetailsoffThe advertiser's verified legal name and country, looked up once each.
proxyConfigurationleave it emptyOptional. Your own servers in proxyUrls are used exactly as given and take priority.
egressModeautoAdvanced. Leave it on auto unless a run is repeatedly refused.

Run it with everything empty and you get one labelled sample row so you can see the shape. That row is not charged.

📤 What you get back

A real creative row from a recent run:

{
  "ok": true,
  "resultType": "creative",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR02873317349904089089",
  "adFormat": "TEXT",
  "firstShownAt": "2023-11-16T23:33:36.273Z",
  "lastShownAt": "2026-09-14T05:20:11.033Z",
  "regionsShownCount": 900,
  "landingDomain": null,
  "previewImageUrl": "https://tpc.googlesyndication.com/archive/simgad/17697651794169304493",
  "previewIframeUrl": null,
  "previewText": null,
  "creativeUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR02873317349904089089?region=anywhere",
  "advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=anywhere",
  "queriedBy": "advertiser:AR16735076323512287233",
  "region": "US",
  "position": 1,
  "scrapedAt": "2026-09-14T05:43:17.330Z"
}
FieldWhat it is
firstShownAt, lastShownAtWhen Google first and last observed the creative serving. A lastShownAt from the last day or two means it is live now.
adFormatTEXT, IMAGE or VIDEO, as Google files the ad. A Search ad like the one above is TEXT.
regionsShownCountHow many days Google saw the ad serve. Despite the name it counts days, not regions or countries: the ad above served on 900 days.
previewImageUrlA direct archive address of a picture of the ad. Text ads usually carry it, and so does the odd image ad.
previewIframeUrlThe renderer Google's own site embeds. Video ads and most image ads carry this instead, and some text ads too.
previewTextExpect null. It only fills when Google sends an ad as plain words, and none of the text ads we checked came that way: Google sends a text ad as a picture of it, or now and then as the renderer link.
landingDomainThe landing page's domain when Google exposes it, and null when it does not, as above.
creativeUrl, advertiserUrlLinks straight back into the Ads Transparency Center.
regionStatsWith includeRegionStats on: regionCode, regionName, impressionsLower, impressionsUpper, firstShownDate, lastShownDate and surfaces per country.
Advertiser rowsresultType: "advertiser", with advertiserId, advertiserName, advertiserCountry, adCountLower and adCountUpper.

🧾 Reading the output

RowHow to spot itCharged
An ad or an advertiserok: true, with a resultTypeyes
The sample row_sample presentno
A diagnostic_diagnostic present, with an error codeno
CodeWhat it means
NO_ADSThat target has no ads in that region. The row suggests trying region: "anywhere".
NO_ADVERTISER_MATCHNo verified advertiser matches that name. Try the domain instead.
NO_ADVERTISER_NAMESlistAdvertisersOnly is on but no names were given.
BAD_REGIONThat region code is not one Google recognises. The run stops here.
BAD_DOMAIN, BAD_ADVERTISER_ID, BAD_URLOne of your inputs is not in a usable shape.
RATE_LIMITEDGoogle throttled the run. Re-run it.
API_ERROR, HTTP_ERROR, BAD_BODYGoogle answered, but not with usable data.
NETWORKGoogle was unreachable or the response never finished.

The Overview table shows previewImageUrl, which text ads usually carry, so video ads and most image ads look like they have no preview there. Read previewIframeUrl in the JSON for those.

▶️ How to run it

1. Open Google Ads Transparency Scraper and click Try for free. 2. Put a landing domain into Advertiser domains, replacing the example. 3. Set Region to a country code if you want one market, and Max results to what you actually need. 4. Turn on Include per-region impressions only if you need the country breakdown, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.60 per 1,000 ads, which is $0.0006 a row. The same rate on every Apify plan, no volume tiers.

An advertiser row costs the same as a creative row. maxItems caps the total, so it also caps what a run can bill.

Not charged: the sample row, every diagnostic row, a target that turns out to have no ads, and creatives deduplicated across two of your targets.

💡 What people use it for

  • Seeing what a competitor is putting money behind this week, and which creatives they keep.
  • Judging what works for them: an ad that has been serving for two years is an ad that pays.
  • Finding a company's other advertising entities, since one domain often sits under several verified

advertisers per market.

  • Mapping which countries a campaign actually ran in, with includeRegionStats.

🚧 What it does not do

  • No spend, no budgets. Google does not publish them. Impressions are wide bands and plenty of

ads carry none at all.

  • No targeting criteria for political ads. Election ads show extra data in the site's own

interface; the rows here carry the same fields as any other ad.

  • No ad copy as text, not even on text ads. Google keeps nearly every text ad as a picture of

it, so the headline and description are in the picture at previewImageUrl, not in a field you can search. Video and rich media come as the renderer link, not a transcript.

  • regionsShownCount counts days, not places. It is how many days the ad served. Use

includeRegionStats when you need the countries.

  • A creative permalink is found by scanning that advertiser's first maxItems creatives, so a

creative further down their list comes back as NO_ADS even though it exists. Raise maxItems, or query the advertiser instead.

  • adFormat filters after reading, so asking for a rare format on a big advertiser takes a while.

It does not cost more, because you pay for rows that come back.

  • One platform per search. Google narrows by a single platform at a time, so YouTube and Maps

together take two runs.

  • It cannot find an advertiser who has never advertised on Google. An empty answer is a real

answer, and it is not charged.

🧭 Which Google scraper do you need?

If you wantUse
The ads a brand is runningThis one
The ads showing above a keyword's web resultsGoogle Search Results Scraper
Image tiles and their source pagesGoogle Images Scraper
News coverage of a brandGoogle News Scraper
A company's physical locations and reviewsGoogle Maps Scraper

❓ Questions people ask

Do I need a Google account or an API key? No. The archive is public and there is nothing to sign in to.

How do I find an advertiser ID? Put the company name in advertiserNames and turn on listAdvertisersOnly. You get every matching advertiser with its ID and rough ad count.

Why do several advertisers come back for one domain? Large companies run separate accounts per market or per legal entity, and Google verifies each one. A domain catches all of them; an ID pins you to one.

Can I filter by country? Yes. region changes the result set, not just the labels, so the same advertiser returns very different counts for US and GB.

How fast is it? A 1,000-row run came back in about a minute when it was measured in August 2026. includeRegionStats adds a request per ad, so it slows things down noticeably.

Is scraping this legal? The Ads Transparency Center is published deliberately, for public inspection. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the domain or advertiser ID, the region and the run ID. The error code on the diagnostic row usually names the problem on its own.