Google Ads Transparency Center Scraper: Ads and Impressions avatar

Google Ads Transparency Center Scraper: Ads and Impressions

Pricing

from $0.97 / 1,000 results

Go to Apify Store
Google Ads Transparency Center Scraper: Ads and Impressions

Google Ads Transparency Center Scraper: Ads and Impressions

See every ad a competitor runs on Google. Search by domain or advertiser ID and export image, HTML5, video, search and Shopping ads with dates and impressions per country. Filter by platform, format, date and several countries, and monitor only new ads on a schedule. No login.

Pricing

from $0.97 / 1,000 results

Rating

5.0

(2)

Developer

Oski

Oski

Maintained by Community

Actor stats

2

Bookmarked

28

Total users

11

Monthly active users

6 days ago

Last modified

Share

Google Ads Transparency Center Scraper

See every ad an advertiser runs on Google, with the per-country impression ranges and first and last shown dates that most scrapers drop. Give it a domain like booking.com or an advertiser ID and get one clean row per ad creative: the image, HTML5 banner, video or text ad, when it ran and where. On a platform test, 1,000 Booking.com ads came back in under a minute for about $1.

No API key, no browser, no Google login. Part of an ad-intelligence suite with the Facebook Ad Library Scraper and the LinkedIn Ad Library Scraper, so you can cover Google, Meta and LinkedIn from one account.

What you can use it for

  • Agencies: pull a prospect's full Google ad history before a pitch and show them what their competitors are running.
  • Founders and marketers: track a competitor's new creatives each week and see which countries they are pushing.
  • Creative teams: build a swipe file of real HTML5 banners, YouTube ads and search text ads, with headlines and calls to action as text.
  • Media buyers: estimate how long a creative has run and how widely, from first and last shown dates and impression buckets per country.
  • Lead generation: list which brands in a sector are actively spending on Google Ads right now.
  • Competitor monitoring: schedule a daily run with Only new ads switched on and get, and pay for, only the creatives a competitor launched since yesterday.
  • Channel research: see only a brand's YouTube video ads, or only its Search or Shopping ads, in the countries you care about.

How to use it

  1. Under Domains or brand names, add the website a brand advertises, such as nike.com. Brand names and pasted links work too.
  2. Pick a Country (or list several under More countries), and optionally a platform, ad format or date range.
  3. Leave Max ads in total at 1,000 (or change it) and click Start.
  4. When it finishes, open the Output tab and download as CSV, Excel or JSON.

While it runs, the status line at the top of the run page shows progress (for example "Advertiser 1 of 3: nike.com. 400 ads so far."). When it finishes, the same line says what was found and explains anything that was skipped, so you never have to read the log.

How much does it cost?

You pay a $0.002 start fee plus $0.001 per ad returned, whatever the detail level. Resolving banners, videos and text ads is included. You only pay for ads actually delivered.

Ads returnedMathsCost
100$0.002 + 100 x $0.001about $0.10
1,000$0.002 + 1,000 x $0.001about $1.00
10,000$0.002 + 10,000 x $0.001about $10.00

A typical 1,000-ad competitor export costs about $1.

Input

FieldWhat it does
searchTermsAdvertisers: a website domain (nike.com, most reliable), a brand name, or a pasted website link.
advertiserIdsExact advertiser IDs (AR02934798844673654785) or advertiser links copied from adstransparency.google.com.
regionCountry filter, or anywhere. Genuinely filters results.
regionsSeveral countries in one run: names or codes (United Kingdom, Ireland, US). Overrides Country.
platformsOnly ads shown on search, youtube, shopping, maps or play. Filtered by Google, so narrow runs are fast. Google records platform only for ads shown since September 2023.
adFormatall, text, image or video, filtered by Google.
datePresetany, last7, last30, last90, last365, or custom to use dateFrom and dateTo. Filtered by Google.
detailLevelbasic (fastest, one row per creative) or full (adds per-country impressions and dates). Same price per row.
resolveMediaOn by default. Reads each ad's rendering script to return the real banner, video or text ad. Turn off for the fastest raw listing.
maxResultsHard cap on total rows (default 1,000).
maxResultsPerAdvertiserOptional per-brand cap.
dateFrom / dateToCustom date window from the date pickers or relative dates such as 30 days, used when datePreset is custom or any.
onlyNewAdsMonitoring mode: remembers every ad this search returned and skips them on later runs, so you only get and pay for new ads.
monitorNameOptional name for that memory, so several schedules can share or separate it.
writeSummaryOn by default. Saves a free per-advertiser summary as SUMMARY in the run's key-value store.
maxPagesPerAdvertiserAdvanced. Safety stop, 100 creatives per page, default 25 (up to 2,500 ads per advertiser).
proxyConfigurationAdvanced. Apify Proxy, residential by default. The actor rotates IPs through it.

Example for a competitor sweep:

{
"searchTerms": ["booking.com", "expedia.com", "hotels.com"],
"region": "GB",
"detailLevel": "full",
"maxResults": 1000,
"maxResultsPerAdvertiser": 400,
"dateFrom": "2026-01-01"
}

Output

One record per ad creative:

{
"search_term": "booking.com",
"advertiser_id": "AR02934798844673654785",
"advertiser_name": "Booking.com",
"creative_id": "CR13943466878123900929",
"format": "image",
"first_shown": "2021-10-25",
"last_shown": "2026-07-05",
"days_running": 1715,
"is_active": false,
"image_url": "https://tpc.googlesyndication.com/archive/simgad/10226145935904981944",
"creative_url": "https://adstransparency.google.com/advertiser/AR029.../creative/CR139...?region=GB",
"regions": [
{ "region_code": "BE", "region_name": "Belgium", "impressions_min": 1000, "first_shown": "2023-03-27", "last_shown": "2026-07-05" }
],
"region_count": 4,
"impressions_min_total": 4000,
"detail_level": "full"
}

format is image, html5, video, text or shopping, worked out from the creative's real content and Google's own format code. Search text ads keep a picture preview in image_url, but are labelled text. days_running counts the days from first to last shown, and is_active is true when the ad was shown in the last 3 days. Extra fields depend on the ad type:

Ad typeFields
HTML5 bannerhtml5_url, width, height
YouTube videoyoutube_video_id, youtube_url, video_thumbnail_url, often headline, description, video_duration
Video (VAST)video_urls (MP4 files with width, height and bitrate, largest first), landing_url, video_duration
Responsive displayheadline, description, call_to_action, display_advertiser, image_urls, logo_url
Search text adheadline, display_url, description, sitelinks, call_to_action, and locations (store name, address, city, postcode) for location ads
Shopping adheadline (product title), display_advertiser (merchant), image_urls

search_term says which input found each row, so a 20-brand run stays easy to split even when a domain returns an agency's ads. media_resolved tells you whether the rendering script was read. When Google itself cannot render an ad, preview_unavailable_reason gives Google's reason. Impressions are published by Google as ranges, so impressions_min is the lower bound of the bucket, never an exact count.

Tips for bigger runs

  • Add more advertisers. Put 10 to 50 competitor domains in one run and use maxResultsPerAdvertiser so one giant brand does not use the whole budget.
  • Raise the caps together. For advertisers with more than 2,500 creatives, raise both maxResults and maxPagesPerAdvertiser.
  • Use basic for volume, full for depth. Both cost the same; basic is quicker, full adds per-country impressions and dates.
  • Keep the residential proxy on. Google rate limits per IP, and the actor rotates to a fresh IP the moment it is throttled.
  • Filter at the source. platforms, adFormat, datePreset and regions are applied by Google itself, so a run for one brand's recent YouTube ads is quick and cheap.
  • Monitor instead of re-downloading. With onlyNewAds on a daily schedule you only pay for creatives that are new since the last run.
  • Read the summary first. The free SUMMARY record in the run's key-value store shows each advertiser's total and active ads, format mix and top countries at a glance.

Scheduling and integrations

Save your input as a task and schedule it daily or weekly in Apify to track competitors over time. Results can go straight to Google Sheets, a webhook, Make, Zapier or your own code via the Apify API:

curl -X POST "https://api.apify.com/v2/acts/oski~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["booking.com"], "region": "GB", "maxResults": 200}'

The sync endpoint waits up to 5 minutes. For bigger runs, start the actor with the runs endpoint and fetch the dataset when it finishes.

If something looks wrong

The status line at the end of every run explains anything that was skipped or came back empty. The common messages:

MessageWhat to do
Input problem: ...Something in the input needs changing, and the message says what. The run stopped before anything was charged.
No ads found for: ...Try the exact domain the brand sends ads to, another country, or a wider date range.
Could not match: ...The brand name did not match an advertiser. Use its website domain instead.
Max ads in total (N) was reached before ...Raise Max ads in total to include every advertiser.
Google slowed us down on ...Run it again later; ads already collected are kept.

Still stuck? Open an issue on the actor page with the run link and it gets looked at quickly.

FAQ

Is it legal? It reads only public disclosure data that Google publishes in its Ads Transparency Center. It uses no login and accesses no private account. You are responsible for how you use the data, including respecting privacy law where it applies.

Do I need a Google account or API key? No. Google has no official API for the Transparency Center, and this actor needs none.

Why did I get fewer ads than expected? The advertiser may run fewer ads in the chosen country or date window, a brand name may have matched a small namesake (use the domain or advertiser ID), or a cap was hit. When an input finds nothing, the run's status message says which one.

How fresh is the data? Each run reads the Transparency Center live, so you get what Google shows at that moment.

Why can some ads not be previewed? Contact form, checkout and password-protected creatives cannot be previewed by anyone. They are returned with preview_unavailable_reason rather than faked.

What if it breaks? Open an issue on the actor page. It gets fixed fast.

Other scrapers from Oski