agenttoolworks

An Apify Actor live

Google Ads Transparency scraper: every Google ad of a brand, a website or an advertiser

Search a brand, a website or an advertiser ID, or paste the Transparency Center URL you already have open. Get one row per ad: format, the text of text ads, first and last day shown, targeting, a link to the ad's own page and, for ads shown in the EU, impressions per country and per platform (Search, YouTube, Maps, Play, Shopping). No Google account, no API key.

$0.50per 1,000 ads, details and ad text included
4ways in: brands, websites, advertiser IDs, Transparency Center URLs
5,000ads at most per search, most recently shown first
0Google accounts, logins or API keys

What you get

One row per Google ad, with the details Google publishes.

Where Google does not publish a field, it is null rather than guessed. The dataset opens in three views in Apify Console (Ads, Reach by country, All fields) and exports as JSON, CSV, Excel or XML, or through the API.

How to scrape the Google Ads Transparency Center

Four ways in, and the page's own filters.

Each brand, website, advertiser ID or URL is its own search. Google lists the most recently shown ads first, and the Actor reads them in that order.

InputWhat it reads
BrandsBrand or advertiser names, each its own search. The Actor finds the advertiser named like the brand (nike finds Nike, Inc.), the biggest by ad count, and returns its ads. A brand that advertises under its company's name (temu) is read through its own website when Google suggests it, and the run summary says so.
WebsitesAdvertiser websites (nike.com): every ad that points to the site, whichever advertiser account ran it.
Advertiser IDsGoogle advertiser IDs (AR and 20 digits), as in the address bar of an advertiser's page.
Pasted URLsTransparency Center URLs from your browser: a search by website, an advertiser's page or one ad's page. Each URL's region, platform, format and dates are kept, the date menu's presets (today, yesterday, the last 7 or 30 days) included. A URL whose filters cannot be read is left out with a note, never searched without them.
input: three competitors, their search ads in the US
{
  "domains": ["nike.com", "adidas.com", "puma.com"],
  "countries": ["US"],
  "platforms": ["SEARCH"],
  "maxAdsPerSearch": 100
}

Only new ads

Monitor a competitor, pay only for what is new.

With Only new ads on and a monitor name, the Actor remembers, per search, the ads it returned, in a key-value store of your own Apify account. Each run lists the ads Google shows for the search, leaves out the ones returned before, before reading their details, and returns and charges only the new ones. The first run returns everything it reads. Listing is cheap, so set Max ads per search deep enough to cover the brand's active ads. A different country, platform, format or date window is a different search with its own memory; use one monitor name per schedule.

Measured in the cloud

150 ads with their details in 42 seconds.

Details take one more request per ad, paced per IP. The Actor reads them on five lanes, each with its own proxy sessions and the same pacing, so a run reads faster without asking any one IP more often.

42 s150 ads with details, samsung in Germany, five lanes (about 210 a minute)
109 sthe same 150 ads on one lane; 77 s on three
6.7%of requests refused by Google in 20 runs across 20 countries, each retried
20 / 20of those runs read, through Apify Proxy

Google answers HTTP 429 to many requests from the Apify cloud's shared IPs, so the Actor reads through Apify Proxy: a new IP after each refusal, residential IPs after two in a row, at no extra charge to you. The 20 runs (2026-10-26, the same Google reader, up to 50 ads each with details) read 821 ads. A short result is never silent: the run summary gives each search a status, its requests and its refusals.

Why this one

The Google Ads Transparency scrapers on Apify, price by price.

scrapesage/google-ads-transparency-scraper, solidcode/ads-transparency-scraper and silva95gustavo/google-ads-scraper, from their public Store records (prices and 30-day figures) read on 2026-10-26. We ran none of them. With full details and, from 2026-11-01, ad text, scrapesage comes to up to $7 per 1,000 ads; this Actor charges $0.50 with the details and the ad text.

Pointscrapesagesolidcodesilva95gustavoThis Actor
1,000 ads, Free plan$2.00$1.50$1.90$0.50
1,000 ads, top tier$2.00$0.80$0.90$0.40
Full details+$3.00 per 1,000No separate eventNo separate eventIncluded
Ad text+$2.00 per 1,000 from 2026-11-01No separate eventNo separate eventIncluded
Advertiser records$3.00 per 1,000None listedNone listed$3.00 per 1,000 (opt-in)
Run startNone listed$0.001 per GB of memory$0.00005$0.00005
Users, 30 days1,282628467New
Public runs, 30 days31,015 (0 failed, 0 timed out)237,207 (2 failed, 29 timed out)338,807 (1,171 failed, 3,473 timed out)New
Rating5.0 (1 review)1.9 (4 reviews)4.9 (19 reviews)New

Top tier: the price each Actor lists for the highest Apify plan it prices. Full details: reach per country, dates and variations. Ad text: the text of text ads. "No separate event" means the Actor lists one price per result; whether its rows carry those fields was not checked, and what each one returns was not compared on the same input. Where we lose: the other three have users, runs and reviews, and ours is new. silva95gustavo states "up to 400 ads per minute"; this Actor read about 210 a minute with details, and the listing alone is faster.

A real run

A Nike search ad in the United States, as the Actor returns it.

One row from a cloud run of 2026-10-26 (search nike, United States, run HZTZnOehVcQeCsxPh), preview link shortened and empty fields left out. Google renders this text ad as text, so its headline and description are in the row.

a Google adreal
{
  "platform": "google",
  "adId": "CR04371376104225636353",
  "adLibraryUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR04371376104225636353?region=US",
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "firstShown": "2023-11-16",
  "lastShown": "2026-10-26",
  "format": "text",
  "title": "Nike® Volleyball Collection",
  "body": "Designed and created to enable outstanding performance, The Nike® Volleyball Collection.",
  "displayUrl": "nike.com",
  "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/1293885961370619522",
  "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&...",
  "publisherPlatforms": [],
  "countries": ["US"],
  "countriesBasis": "reach",
  "reachByCountry": [{ "country": "US", "countryImpressionsMin": null, "countryImpressionsMax": null, "countryLastShown": "2026-10-26" }],
  "query": "nike",
  "scrapedAt": "2026-10-26T16:06:35.261Z"
}

Searched in the United States, the row has no impressions: Google publishes them for ads shown in the EU. A YouTube video of nike.com searched in France (run a0Ge0clnYRfqbkNUm) carried the platforms MAPS, SEARCH and YOUTUBE and one reach entry per EU country with its impressions range and dates.

Meta and Bing too

Need Facebook, Instagram and Bing ads in the same table?

The Facebook Ad Library scraper reads the Meta Ad Library, the Google Ads Transparency Center and the Microsoft Ad Library in one run. Its Google rows come from the same reader in the same format as this Actor's, so the two datasets merge without mapping. Use this one for Google alone, with its platform and format filters, advertiser IDs, Transparency Center URLs and the only-new-ads monitor.

Limits

What it does not do, said up front.

Ready-to-run examples

Open one, change the input, run it.

Each example opens the Actor on Apify with its input filled in. All examples on the Apify Store.

Pricing

Pay per ad, details and text included.

$0.50 per 1,000 ads on Apify's Free and Bronze plans, $0.45 on Silver, $0.40 on Gold and up, billed by Apify with platform usage and proxies included; $0.0005 an ad on the Free plan. 1,000 ads with text, reach and targeting cost $0.50, 100 ads $0.05, and a weekly monitor of 300 ads that finds 20 new ones $0.01 a week. An ad already returned in the run is never charged twice. Advertiser records are off unless you ask for them ($3.00 per 1,000), and a run starts at $0.00005. Apify's free plan covers about 10,000 ads a month. Set a maximum cost per run and the Actor stops cleanly when it is reached: it starts no further search, and reads no ad it could not charge.

For developers

The Google ads library in one HTTP call.

Run it and get the ads back in the same request through the Apify API. Snippets for Node.js and Python are in the Actor's README.

http
curl -X POST "https://api.apify.com/v2/acts/agenttoolworks~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["nike.com"], "countries": ["US"], "maxAdsPerSearch": 50}'

Questions

Is there an API for the Google Ads Transparency Center?

Google publishes no API for it. The Actor reads the Transparency Center the way a logged-out visitor's browser does and returns the ads as JSON rows, through the Apify API or any Apify integration (Make, Zapier, n8n, Google Sheets). No Google account, no API key.

Can I search the text of Google ads by keyword?

No: Google has no keyword search of ad text. A brand name is matched to advertiser names as a whole word (nike finds Nike, Inc.), and the biggest advertiser by ad count is read, more if you ask for advertiser records. Brands that advertise under a legal name, such as Temu (Whaleco Inc.), are read through their own website when Google suggests it. For an exact brand, search its website.

How do I get every ad of one advertiser?

Paste the advertiser's page URL (adstransparency.google.com/advertiser/AR...) or its ID in Advertiser IDs, and raise Max ads per search (up to 5,000 per search). To get every ad that points to a website, whichever account ran it, use Websites.

Can I get ads shown in the United States or outside the EU?

Yes: set the country or leave countries empty. Impressions per country and per platform are published by Google for ads shown in the EU; the rest come with their creative, text and dates.

Why does a platform filter return fewer ads than the same search without it?

Google's platform filter only covers ads shown since 4 September 2023, and only the five platforms it lists (Search, YouTube, Maps, Play, Shopping).

How do I get only new ads every week?

Turn on Only new ads, give the schedule a Monitor name, and schedule the Actor (or a saved task) in Apify Console. Each run returns and charges only the ads the previous runs did not return.

What does it cost?

$0.50 per 1,000 ads on Apify's Free and Bronze plans, $0.45 on Silver, $0.40 on Gold and up, billed by Apify with platform usage and proxies included. Details and ad text cost nothing extra, and an ad already returned in the run is never charged twice. Advertiser records are off unless you ask for them ($3.00 per 1,000). Apify's free plan includes $5 of monthly usage, about 10,000 ads.

Can AI agents use it through MCP?

Yes. Apify's hosted MCP server exposes Store Actors to MCP clients such as Claude or Cursor: https://mcp.apify.com?tools=agenttoolworks/google-ads-transparency-scraper.

Public ad data only: no login, no account, no data about the people who saw the ads. Not affiliated with Google or Apify.