Google Ads Transparency Scraper: Ads & New-Ad Monitor avatar

Google Ads Transparency Scraper: Ads & New-Ad Monitor

Pricing

from $0.90 / 1,000 ad creative returneds

Go to Apify Store
Google Ads Transparency Scraper: Ads & New-Ad Monitor

Google Ads Transparency Scraper: Ads & New-Ad Monitor

Scrape ads from the Google Ads Transparency Center by brand, domain, advertiser ID or URL. Get creatives, images, first/last shown dates, variations and regions, filter by country, platform, format and date, and monitor competitors with only-new-ads mode.

Pricing

from $0.90 / 1,000 ad creative returneds

Rating

0.0

(0)

Developer

Fatih S.

Fatih S.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

Scrape any advertiser's ads from the public Google Ads Transparency Center. Search by brand name, domain, advertiser ID or by pasting a Transparency Center URL. Each ad comes back as a clean row: creative ID, advertiser, format, first and last shown dates, days live, image or preview URL, size and a link to the ad page. You can also get every creative variation and the countries the ad ran in.

Need daily competitor tracking? Turn on Only new ads. Each scheduled run then returns, and charges for, only ads you haven't seen before. A daily check of a competitor with no new ads costs almost nothing.

No Google account, no login and no browser needed. From $0.0012 per ad.

What you get

  • 🔎 Every way to search: brand names (Nike), domains (nike.com), advertiser IDs (AR16735076323512287233) and pasted URLs from adstransparency.google.com (advertiser pages, single ads and domain searches, with their filters kept).
  • 🧠 Smart brand matching: Google's autocomplete often lists a one-ad "Nike" account in Kenya above Nike, Inc. (9,000+ ads). We rank exact name matches first, ignoring Inc./LLC/Ltd/S.r.l., then sort by ad volume, so Nike gets you Nike's real ads.
  • 🎛️ All the website's filters: region (244 countries and territories, or anywhere), platform (Search, YouTube, Shopping, Maps, Play), format (text, image, video) and date range.
  • 🖼️ Ready-to-use creatives: direct image URLs with width and height for image and text ads, plus Google's preview URL for video and responsive ads.
  • 🧬 Ad details (optional): all variations of each ad, plus the countries it ran in, with last-shown date and impression ranges per platform where Google publishes them.
  • 🆕 Only-new-ads monitor: remembers creative IDs in a named key-value store. Schedule it daily and get only fresh ads.
  • 🏢 Advertisers mode: one row per advertiser with name, country, verified status and approximate ad count. Great for building competitor lists.
  • 🛡️ Reliable: uses the same public endpoints as the website. Retries with backoff on rate limits, rotates proxy sessions, keeps each input isolated so one bad input never kills the run, and writes a per-input SUMMARY.
  • 💸 Cheap and fair: no start fee, nothing charged for failed or empty lookups, and the max-charge limit you set is always respected.

Use cases

  • Competitor ad research: see every ad a competitor runs on Google Search, YouTube, Shopping, Maps and Play, and how long each has been live. Long-running ads are usually the winners.
  • Creative inspiration and swipe files: collect image and text ads with direct image URLs for your boards and AI tools.
  • Daily new-ad alerts: schedule Only new ads mode and send new rows to Slack, email or a sheet with Apify integrations.
  • Agency prospecting: find brands that are actively advertising in a country, with ad volume per advertiser.
  • Brand protection: watch which advertisers run ads for your domain or brand name.
  • Market and academic research: track ad formats, countries and campaign duration across an industry.

Input examples

All recent ads from a brand in the US

{
"queries": ["Nike"],
"region": "US",
"maxAdsPerSearch": 200
}

YouTube video ads for a domain in Germany, shown in September, with variations and countries

{
"domains": ["booking.com"],
"region": "DE",
"platforms": ["YOUTUBE"],
"adFormat": "VIDEO",
"startDate": "2026-09-01",
"endDate": "2026-09-30",
"includeDetails": true
}

Daily competitor monitor (schedule this as a task)

{
"queries": ["adidas", "puma.com"],
"advertiserIds": ["AR16735076323512287233"],
"region": "US",
"maxAdsPerSearch": 300,
"onlyNewAds": true,
"monitorStoreName": "sportswear-us-monitor"
}

Paste URLs straight from the website (their region, platform, format and date filters are kept)

{
"startUrls": [
{ "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US&format=VIDEO" },
{ "url": "https://adstransparency.google.com/?region=GB&domain=booking.com" },
{ "url": "https://adstransparency.google.com/advertiser/AR02934798844673654785/creative/CR03098079499674189825?region=anywhere" }
]
}

Find advertisers (not ads)

{
"resultType": "advertisers",
"queries": ["Nike", "booking.com"],
"region": "US",
"maxAdvertisersPerQuery": 5
}

Input reference

FieldDefaultNotes
queries–Brand names or domains. Names are resolved to advertisers via autocomplete; domains search all ads pointing to that domain. Advertiser IDs and Transparency Center URLs also work here.
domains–Exact domains (nike.com). Protocol, www. and paths are stripped.
advertiserIds–IDs starting with AR, as in advertiser page URLs.
startUrls–/advertiser/AR…, /advertiser/AR…/creative/CR… or /?domain=… URLs. URL filters override the global filters for that URL.
resultTypeadsads = one row per creative; advertisers = one row per advertiser.
regionUS2-letter country code or ANYWHERE.
platformsallSEARCH, YOUTUBE, SHOPPING, MAPS, PLAY. Each selected platform is searched separately; an ad found on several is output once.
adFormatALLALL, TEXT, IMAGE, VIDEO.
startDate / endDate–YYYY-MM-DD (both inclusive) or relative (30 days).
maxAdsPerSearch100Max ads scanned per input (and per platform). Results are ordered newest activity first. Values above 5,000 are clamped.
maxAdvertisersPerQuery5How many matching advertisers a brand-name query includes (max 50).
includeDetailsfalseAdds variationCount, variations[], regionsShown[] and platformsShown[] (one extra request per ad).
detailConcurrency6Parallel detail requests (1–20).
onlyNewAdsfalseMonitor mode; see below.
monitorStoreNameads-transparency-monitorNamed key-value store holding seen creative IDs.
includeRawDatafalseAttaches the raw payloads as raw.
proxyConfigurationApify residentialRecommended. If the proxy is unusable, the run falls back to a direct connection with a warning.

Output

Ads (resultType: "ads")

{
"creativeId": "CR02775595230328520705",
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"domain": null,
"format": "TEXT",
"firstShown": "2023-11-16T21:46:49.822Z",
"lastShown": "2026-10-08T19:13:38.071Z",
"shownForDays": 1058,
"servedDays": 902,
"previewType": "image",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/2146926076785337219",
"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/2146926076785337219",
"width": 348,
"height": 209,
"impressionsLow": null,
"impressionsHigh": null,
"isAdvertiserUnverified": false,
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR02775595230328520705?region=US",
"advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US",
"region": "US",
"platformFilter": null,
"dateRangeFilter": null,
"matchedQuery": "Nike",
"searchType": "advertiserName",
"variationCount": 5,
"variations": [
{ "previewType": "image", "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/2146926076785337219", "previewUrl": "…", "width": 348, "height": 209 },
{ "previewType": "script", "imageUrl": null, "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?…", "width": null, "height": null }
],
"regionsShown": [
{ "regionCode": "US", "regionName": "United States", "geoCriterionId": 2840, "firstShown": null, "lastShown": "2026-09-01", "impressionsLow": null, "impressionsHigh": null, "platforms": [] }
],
"platformsShown": [],
"scrapedAt": "2026-10-08T19:45:02.975Z"
}
FieldNotes
creativeIdStable unique ad ID (CR…). Use it for de-duplication.
formatTEXT, IMAGE or VIDEO. Google renders text ads as images, so text ads often have an imageUrl too.
firstShown / lastShownWhen the ad was first and most recently shown (ISO 8601, UTC), as reported by Google.
shownForDaysCalendar days from first to last shown, inclusive (same day = 1).
servedDaysNumber of days Google reports the ad actually ran (can be lower than shownForDays if it paused).
previewTypeimage (direct image in imageUrl), script (Google's preview renderer URL, used for video and responsive ads), iframe or html.
imageUrl, width, heightSet for image previews.
impressionsLow/HighOnly published by Google for some ads and regions (for example political ads and EU/EEA). Otherwise null.
domainMatched domain for domain searches.
region, platformFilter, dateRangeFilterFilters that produced the row.
matchedQuery, searchTypeThe input that produced the row, and whether it was advertiserName, domain, advertiserIds or creative.
variationCount, variations[]includeDetails only. Every version of the creative.
regionsShown[]includeDetails only. Countries the ad ran in, each with lastShown, firstShown where available, impression ranges and per-platform impressions where Google publishes them.
isNewonlyNewAds only. Always true, because only new ads are output.
rawincludeRawData only.

Advertisers (resultType: "advertisers")

{
"advertiserId": "AR02934798844673654785",
"name": "Booking.com",
"legalName": "Booking.com B.V.",
"countryCode": "NL",
"approxAdCountLow": 400000,
"approxAdCountHigh": 500000,
"isUnverified": false,
"domain": "booking.com",
"adsInScan": 200,
"advertiserUrl": "https://adstransparency.google.com/advertiser/AR02934798844673654785?region=US",
"region": "US",
"matchedQuery": "booking.com",
"scrapedAt": "2026-10-08T19:45:10.909Z"
}

approxAdCountLow/High is Google's ad-count range for the selected region and filters. For domain inputs, advertisers are found by scanning up to maxAdsPerSearch of the domain's ads (adsInScan = how many of them belong to that advertiser).

Run summary

Every run also saves a SUMMARY record in the default key-value store. It lists each input's status (ok, no_results, not_found, error, skipped), the advertisers a brand query resolved to, Google's total ad-count estimate, ads scanned and output, already-seen ads skipped, monitor state, charged events and HTTP stats.

Only-new-ads monitor mode

  1. Set onlyNewAds: true and pick a monitorStoreName (for example acme-competitors-us).
  2. The first run returns every ad it finds (up to your limits) and remembers their creative IDs. This is your baseline.
  3. Each later run with the same store returns only creatives not delivered before. You're charged only for those. Already-seen ads are skipped for free.
  4. Schedule it (daily is typical) and connect an integration such as Slack, email, Google Sheets or a webhook.

Details:

  • Seen IDs are stored in the named key-value store under SEEN_CREATIVE_IDS, split into chunks automatically for very large sets (up to 2 million IDs; the oldest are dropped after that). Named stores persist on your account until you delete them.
  • An ad is marked as seen only after it has been pushed to the dataset. If a run stops at your max-charge limit, the remaining new ads are delivered next time.
  • Results are ordered newest activity first. For each input, set maxAdsPerSearch comfortably above the number of new ads you expect per run.
  • One store can be shared by many inputs because creative IDs are globally unique. Use separate store names for independent monitors, and don't run two monitors on the same store at the same time.
  • To start over, delete the store or use a new monitorStoreName.

Pricing

Pay per event, with no start fee:

EventFREE planBRONZESILVERGOLDCharged when
ad-result$0.0012$0.0011$0.0010$0.0009Each ad row (in monitor mode, only new ads)
advertiser-record$0.0008$0.0007$0.0006$0.0005Each advertiser row
ad-detail$0.002$0.0018$0.0015$0.0012Each ad whose details (variations + regions) were fetched successfully. Only with includeDetails.

Examples on the FREE plan: 1,000 ads cost $1.20. 1,000 ads with full details cost $3.20. A daily monitor of 10 competitors that finds 20 new ads a day costs about $0.72 a month.

Nothing is charged for inputs that fail, find nothing or match no advertiser, or for ads skipped as already seen. The run stops cleanly at your maximum cost per run.

Tips

  • Can't find a brand? Advertisers are listed under their legal or account name. Try the domain (brand.com), set region to ANYWHERE, or open the brand on adstransparency.google.com and paste the URL.
  • Want only one advertiser account? Use advertiserIds or an advertiser URL instead of a brand name.
  • Getting 429 warnings? They're retried automatically. Lowering detailConcurrency makes runs gentler.
  • Video and responsive ads have no static image. Use previewUrl (Google's renderer) or open adUrl.

FAQ

Is it legal? The Actor reads only the public, no-login data that Google publishes in the Ads Transparency Center for transparency purposes. It doesn't bypass any login or paywall. You're responsible for using the data in line with applicable laws and Google's terms, especially if you republish creatives, which may be protected by the advertisers' copyright.

How fresh is the data? Live: every run queries the Transparency Center directly.

Why are impressions often empty? Google only publishes impression ranges for some ads (for example political ads and ads shown in the EU/EEA).

Disclaimer

This is an independent tool. It is not affiliated with, endorsed by or sponsored by Google LLC. "Google", "Google Ads", "YouTube" and related marks are trademarks of Google LLC. The Actor uses publicly available data from adstransparency.google.com. The site's internal endpoints can change without notice; if they do, we update the Actor as quickly as possible.