Google Ads Transparency Scraper: Competitor Ads & EU Reach avatar

Google Ads Transparency Scraper: Competitor Ads & EU Reach

Pricing

from $1.70 / 1,000 ads

Go to Apify Store
Google Ads Transparency Scraper: Competitor Ads & EU Reach

Google Ads Transparency Scraper: Competitor Ads & EU Reach

Scrape the Google Ads Transparency Center by domain, advertiser ID or name. Get every ad with advertiser, verified status, format, dates, regions and creative links, plus optional EU impressions, targeting and video files. New-ads monitoring. No login.

Pricing

from $1.70 / 1,000 ads

Rating

0.0

(0)

Developer

Hydrocore Data

Hydrocore Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Security

Limited permissions

Share

See every ad a company runs on Google (Search, YouTube, Display, Shopping, Maps and Play) straight from the public Google Ads Transparency Center. Type a website such as nike.com, an advertiser ID or a company name. You get a clean spreadsheet of their ads, with when each ran, where, what it looked like and, for the EU, how many people saw it.

No Google account, no login, no cookies, no browser extension. The scraper reads the same public data the Transparency Center website shows to anyone.

Sample result (real row from a test run on shopify.com, trimmed):

{ "advertiserName": "Shopify Inc.", "advertiserVerified": true, "domain": "shopify.com", "format": "video",
"firstShownAt": "2026-10-19T17:37:23.000Z", "lastShownAt": "2026-11-05T12:42:06.000Z", "daysShown": 18,
"adUrl": "https://adstransparency.google.com/advertiser/AR01625195283841286145/creative/CR14427873261364707329?region=anywhere" }

What does it do?

For every ad it finds, the scraper gives you:

  • Advertiser: name, Google advertiser ID, country and whether Google has verified their identity
  • Ad: ad ID, link to the ad's own page on the Transparency Center, format (text, image or video), first and last shown dates, and the number of days it ran
  • Creative: image link and size, preview link and, where Google shows it, the headline, description and display URL

Turn on Ad details to also get:

  • Every country the ad ran in, with first and last shown dates for each
  • EU reach: impression ranges (for example 70K–80K) per EU country and per platform (Google Search, YouTube, Maps and so on). Google publishes these under the EU Digital Services Act.
  • Audience selection: whether the advertiser targeted by demographics, location, contextual signals or customer lists, and whether they included or excluded each one
  • All variations of the ad, the video file and its length for video ads, and the visible text of the preview

Monitoring mode ("Only new ads since the last run") remembers what you already have. Scheduled runs then return, and charge for, only ads you haven't seen yet.

What can I use it for?

  • Competitor ad research: see every ad a competitor runs, which formats they favour, and how long their best ads stay live. Long-running ads are usually the ones that work.
  • Creative inspiration: collect image and video ads in your niche to brief designers and copywriters.
  • Campaign monitoring: schedule a daily or weekly run with monitoring on and get only new competitor ads, ready to send on to Slack, email or Google Sheets with Apify integrations.
  • Market and expansion research: find out which countries a brand advertises in and, in the EU, roughly how much reach each country gets.
  • Lead generation for agencies: find businesses that actively spend on Google Ads in a region or category.
  • Brand protection: search your own domain to find other advertisers whose ads point to your site (resellers, affiliates or look-alikes).
  • Compliance and journalism: check political or regulated-industry advertisers and whether they are verified.

How do I use it?

  1. Click Try for free (or Start).
  2. Enter one or more websites (nike.com), advertiser IDs (AR16735076323512287233, or paste the whole advertiser page link) or advertiser names (Decathlon).
  3. Optionally pick regions (a country such as US, DE, GB, or EU for all 27 EU countries), a date range, an ad format and a platform.
  4. Set Max ads per search to keep the first run small, for example 20.
  5. Click Start. Small runs usually finish in under 15 seconds. Download the results as Excel, CSV, JSON or HTML, or open them in the table view.

Tip: to find an advertiser ID, open the advertiser on adstransparency.google.com. The ID is the part of the link that starts with AR.

Input

FieldWhat it doesExample
Websites (domains)Ads that point to this website, from any advertisernike.com
Advertiser IDsOne specific advertiser's ads. Accepts the ID or the page link.AR16735076323512287233
Advertiser namesLooks the name up in Google's advertiser search and scrapes the best match(es)Decathlon
Advertisers per nameHow many matching advertisers to take for each name (default 1)2
Regionsanywhere (default), EU, or 2-letter country codes["DE","FR"]
Date from / to, or Last N daysOnly ads shown in that period2026-10-01
Ad formatall, text, image or videovideo
PlatformSearch, YouTube, Shopping, Maps, Play, or anyyoutube
Sort ads byLast shown (Google's order, default), first shown newest/oldest, or longest running. Applied before the limit.longestRunning
Max ads per search / in totalStops after this many ads (default 100 per search)50
Ad detailsAdds countries, EU reach, audience selection, variations and video (charged per ad)true
Advertiser infoAdds advertiser country and verified status (free, on by default)true
Only new ads since last runMonitoring mode, see belowtrue
Monitor nameOptional name for a monitoring list, so several schedules don't mixcompetitors-de
Max spend (USD)The run stops before it would cost more than this1
ProxyOptional. Only needed if Google starts showing "unusual traffic" pages.off

Example input:

{
"domains": ["nike.com"],
"regions": ["DE"],
"includeDetails": true,
"maxAdsPerSource": 4
}

Output

Each ad is one row, always with the same columns in the same order (null when Google doesn't give a value). Dates are ISO 8601 in UTC. Here is a real row from a test run on 3 November 2026 (input above), shown in the v1.1 column order. The regions and variations lists are shortened to one entry. The full row listed all 12 countries.

{
"adId": "CR09348754140953575425",
"advertiserName": "Nike Retail BV",
"advertiserVerified": true,
"advertiserCountry": "NL",
"domain": "nike.com",
"format": "text",
"headline": "Unlock Nike Exclusives",
"description": "Discover {KeyWord} Online At Nike.com. Shop The Official Nike Site.",
"displayUrl": "nike.com",
"callToAction": null,
"firstShownAt": "2025-09-19T13:09:20.000Z",
"lastShownAt": "2026-11-04T02:33:12.000Z",
"daysShown": 411,
"regionCount": 12,
"regionCodes": ["PL", "ES", "IE", "GB", "FR", "RO", "PT", "CY", "DE", "GR", "IT", "NL"],
"topic": null,
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/14549645752058020395",
"imageWidth": 348,
"imageHeight": 365,
"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/14549645752058020395",
"videoUrl": null,
"videoId": null,
"videoFileUrl": null,
"videoDurationSec": null,
"variationCount": 2,
"adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR09348754140953575425?region=DE",
"advertiserId": "AR18378488041124659201",
"advertiserUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201",
"detailScraped": true,
"topicId": "10014",
"euReach": {
"firstShown": "2025-09-19",
"lastShown": "2026-11-03",
"impressionsMin": 0,
"impressionsMax": 1000,
"platforms": [
{"platform": "Google Search", "impressionsMin": 0, "impressionsMax": 1000},
{"platform": "Google Maps", "impressionsMin": 0, "impressionsMax": 1000}
]
},
"audienceSelection": [
{"category": "Demographic info", "included": true, "excluded": false},
{"category": "Geographic locations", "included": true, "excluded": false},
{"category": "Contextual signals", "included": true, "excluded": false}
],
"regions": [
{
"countryCode": "PL",
"country": "Poland",
"regionId": 2616,
"firstShown": "2025-09-23",
"lastShown": "2026-11-03",
"impressionsMin": 0,
"impressionsMax": 1000,
"platforms": [{"platform": "Google Search", "impressionsMin": 0, "impressionsMax": 1000}]
}
],
"variations": [
{
"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/14549645752058020395",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/14549645752058020395",
"width": 348,
"height": 365
}
],
"adTextSnippets": ["Sponsored", "nike.com", "Unlock Nike Exclusives", "Unit 23 Cheetham Hill Road", "website", "call", "directions"],
"isNew": null,
"regionFilter": "DE",
"searchType": "domain",
"searchQuery": "nike.com",
"scrapedAt": "2026-11-04T04:40:17.549Z"
}

{KeyWord} in the description is real. It is Google's keyword-insertion placeholder, which the advertiser's ad fills in with the searcher's keyword.

In the same test, a Zalando video ad came back with "videoFileUrl": "https://gcdn.2mdn.net/videoplayback?..." (a playable MP4) and "videoDurationSec": 20.1. Its EU reach in Germany was "over 10M" impressions on YouTube (impressionsMin: 10000000, impressionsMax: null).

Without Ad details, the detail columns (topic, regions, euReach, audienceSelection, variations, video fields ...) are null and detailScraped is false. The run also saves a RUN_SUMMARY record to the key-value store. It lists each search, how many ads Google says exist (totalAdsMin/totalAdsMax), how many were saved, plus any warnings and request statistics.

Views. The Output tab opens in Overview (creative image, advertiser, format, text, first/last shown, days shown, regions, link). There are also Timeline, Ad details (reach), Advertisers and Detailed (all fields) views.

Changed in v1.1: firstShown / lastShown are now firstShownAt / lastShownAt (same ISO values; the per-country entries inside regions and euReach keep their day-only firstShown / lastShown). topicId is now a string. Every row has the same columns in a fixed order, with null instead of missing or empty values, and Google's escaped placeholders like \<dynamically generated ...\> are shown as <dynamically generated ...>. New input Sort ads by.

How much does it cost?

You pay per result (pay-per-event). Apify platform usage is included, so there are no separate compute costs.

EventPriceWhen
Actor start$0.002Once per run
Ad$0.0017Each ad saved ($1.70 per 1,000)
Ad details$0.0025Each ad, only when "Ad details" is on

Worked examples:

RunCalculationTotal
20 ads for nike.com$0.002 + 20 × $0.0017$0.036
100 ads$0.002 + 100 × $0.0017$0.172
1,000 ads$0.002 + 1,000 × $0.0017$1.702
100 ads with details$0.002 + 100 × ($0.0017 + $0.0025)$0.422
Weekly monitoring that finds 15 new ads$0.002 + 15 × $0.0017$0.0275
Nothing found / invalid inputstart fee only$0.002

You are never charged for duplicates, for ads you already received in monitoring mode, or for advertiser info. Set Max spend (USD), or the run's maximum cost in Apify, and the scraper stops cleanly before it goes over. In our test, a $0.02 limit with details on stopped at 4 ads and $0.0188.

How does it compare?

Here is a comparison with the other Google Ads Transparency actors on the Apify Store, based on their public Store listings checked on 3 November 2026. Prices and ratings change, so check the listings for current figures.

ActorPrice per adDetail / extraRatingMonthly users
This actor$0.0017$0.0025 per ad with detailsnewnew
scrapesage/google-ads-transparency-scraper$0.002$0.003 detail, $0.003 advertiser, $0.002 ad text5.0 (1 review)~1,450
solidcode/ads-transparency-scraper$0.0015 (lower on paid Apify plans) + $0.001 start—1.93 (4 reviews)~660
s-r/google-ads-transparency$0.002—no reviews~190
memo23/google-ad-transparency-scraper-cheerio$0.002 + $0.005 start$0.003 per asset5.0 (6 reviews)~160

Why we think this one is a good choice:

  • Competitive pricing with pay-only-for-useful-results — duplicates and already-seen monitoring ads are free; advertiser name, ID, country and verified status included at no extra charge.
  • EU reach and targeting built in: impressions per EU country and platform, plus audience selection. All of it was tested on live data on 3 November 2026.
  • Video files: a direct MP4 link and duration for video ads where Google provides one.
  • Monitoring mode that only charges for new ads, for cheap scheduled tracking.
  • Fails softly: one bad domain or a Google hiccup never stops the other searches. Every problem is written to the log and the RUN_SUMMARY in plain English.
  • Hard spending limit respected to the cent.

FAQ

How can I see a competitor's Google ads? Enter the competitor's website (for example shopify.com) in Domains and run. You get every ad Google lists for them in the Ads Transparency Center, with format, dates and a link to each ad.

Can I see how much a competitor spends on Google Ads? Google does not publish spend. You do get how long each ad ran, where it ran and, for ads shown in the EU, impression ranges per country (turn on Ad details), which is a good signal of budget.

Is it legal to scrape the Google Ads Transparency Center? The Transparency Center is a public website that Google created so anyone can see who is advertising and what. Under the EU Digital Services Act, large platforms must publish this ad repository. The scraper reads only that public data, without logging in, solving captchas or getting around any access control. It collects advertiser (business) names, not personal data about people. Still, you are responsible for how you use the data. Respect Google's terms, copyright in the ad creatives, and privacy laws such as the GDPR. If in doubt, ask a lawyer.

Do I need a Google account, API key or proxy? No. A proxy is optional and only helps if Google starts answering with "unusual traffic" pages.

Why is the headline empty for many ads? Google stores most text ads as a screenshot image, not as text, and image and video ads have no text fields. When the preview contains readable text, you get headline, description and adTextSnippets, mostly with Ad details on. Otherwise use imageUrl to see the ad.

Why are impression numbers ranges, and only for some ads? Google only publishes impressions for ads shown in the EU (and a few other DSA regions), and only as ranges such as 1K–2K. A missing maximum means "over 10M". Google's impression figures can lag by weeks or months, and many recent ads have none yet.

A domain search returned ads from other advertisers. Why? A domain search returns every advertiser whose ads link to that website, such as agencies, resellers and regional subsidiaries. Use Advertiser IDs to get one advertiser only.

How does monitoring mode work? The scraper remembers the IDs of ads it has delivered for the same search (or the same Monitor name). The next run returns only ads you haven't received yet, and you only pay for those. Schedule it daily or weekly.

How fast is it? In our tests, 20 ads took about 8 seconds and 6 ads with full details about 15 seconds. The scraper paces its requests to Google on purpose.

Limits

  • Data is only as complete as Google's Transparency Center. Some advertisers, older ads and some regions have little or no data, and Google can remove ads at any time.
  • Google limits how far back the data goes. A date range far in the past (for example early 2024) may return no ads even for big brands.
  • Text ads usually come as images. Ad copy is only available when Google's preview includes it.
  • Impressions are ranges, EU (DSA) only, and can lag.
  • Google shows "topics" as numbers for most ads. topicId is filled, while topic (the label) is often empty.
  • One audience category Google uses has no public label, so it is shown as "Category 4".
  • If Google temporarily rate-limits the IP ("unusual traffic"), the scraper backs off and then stops cleanly with a message rather than retrying forever. Run again later, or turn on a proxy. The scraper never tries to solve captchas.
  • Google can change its website and the internal endpoints this scraper uses without notice. If something breaks, please open an issue and we'll fix it quickly.

Ready-made examples

Open one, click Try for free and change the inputs to your own:

Support

Found a bug or need a field we don't have yet? Open an issue on the Issues tab. Please include the run link.