Google Ads Transparency Scraper (Ads by Advertiser or Domain)
Pricing
from $0.30 / 1,000 ad (creative)s
Google Ads Transparency Scraper (Ads by Advertiser or Domain)
Google Ads Transparency Center ads by brand, domain or advertiser ID: region, platform, format and date filters, image and preview links, days shown, optional per-country details. No proxy, no login. $0.30 per 1,000 ads.
Pricing
from $0.30 / 1,000 ad (creative)s
Rating
0.0
(0)
Developer
Prague Data Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Google Ads Transparency Scraper — ads by advertiser, domain or brand
Scrape Google Ads Transparency Center ads for any advertiser, website or brand name, and get one clean row per ad: advertiser (country, verified identity), website, format (text, image, video), first and last day shown, days shown, image or preview link and the ad page. Filter by country, Google platform (Search, YouTube, Shopping, Maps, Play), format and dates. $0.30 per 1,000 ads. No browser, no login, no proxy needed.
Quick start
Minimal input (the ads that point to nike.com and were shown in the US):
{"queries": ["nike.com"],"region": "US","maxAdsPerSearch": 50}
More: two countries, only YouTube video ads, a date range, details for each ad, and the ads of one advertiser by ID:
{"queries": ["adidas.com", "AR18378488041124659201"],"regions": ["DE", "FR"],"platforms": ["youtube"],"adFormat": "VIDEO","startDate": "2026-09-01","endDate": "2026-10-01","maxAdsPerSearch": 300,"includeDetails": true}
A query can be:
| You give | You get |
|---|---|
a domain (nike.com, https://www.nike.com/us) | the ads that point to that website, whoever pays for them (agencies included) |
an advertiser ID (AR18378488041124659201) | the ads of that advertiser |
a brand name (Nike) | the ads of the advertisers whose name contains the word, the ones with the most ads first (maxAdvertisersPerQuery, default 5) |
| a Transparency Center URL (advertiser page, ad page, domain search) | the same, with the region, platform, format and date parameters of the URL |
For exact results use the domain or the advertiser ID. A brand name can match several unrelated advertisers.
Compatible with the leading Actors
Switch by changing only the Actor ID. The input of both leaders is accepted as it is:
| Leader | Fields accepted |
|---|---|
scrapesage/google-ads-transparency-scraper | queries, domains, advertiserIds, startUrls, resultType (ads / advertisers), region (code or English name), platforms, adFormat (ALL, TEXT, IMAGE, VIDEO), startDate, endDate, maxAdsPerSearch, maxAdvertisersPerQuery, includeDetails (free here), detailConcurrency, onlyNewAds, monitorStoreName, includeRawData, urlsFromFile, proxyConfiguration |
solidcode/ads-transparency-scraper | searchQuery (keyword, domain or advertiser ID), maxResults (0 = all), platform (google_search, youtube, google_shopping, google_maps, google_play), region, dateFrom, dateTo |
Output field names follow theirs: creativeId, advertiserId, advertiserName, advertiserLegalName, advertiserCountry, advertiserVerified, domain, format, firstShown, lastShown, shownForDays (also as approxDaysShown), imageUrl, previewUrl, adUrl, region, matchedQuery.
Sample output row
A real row (nike.com, region US):
{"creativeId": "CR08772523512997871617","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","advertiserLegalName": "Nike, Inc.","advertiserCountry": "US","advertiserVerified": true,"domain": "nike.com","format": "TEXT","platform": null,"firstShown": "2023-11-16T22:45:12.585Z","lastShown": "2026-10-23T10:37:14.818Z","shownForDays": 905,"approxDaysShown": 905,"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/16152650943237359130","previewUrl": null,"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR08772523512997871617?region=US","advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US","region": "US","matchedQuery": "nike.com","scrapedAt": "2026-10-23T11:09:48.457Z"}
With includeDetails each row also has variationCount, variations, regionsShown (country, first and last day, range of times shown, same per platform), topic and adFundedBy:
{"variationCount": 4,"variations": [{ "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/16098087104589060523", "previewUrl": null }],"regionsShown": [{ "region": "ES", "firstShown": null, "lastShown": "2026-08-31", "timesShownLow": null, "timesShownHigh": 1000, "platforms": [{ "platform": "SEARCH", "timesShownLow": null, "timesShownHigh": 1000 }] }],"topic": null,"adFundedBy": "Adidas America, Inc"}
With resultType: "advertisers" each row is an advertiser: advertiserId, name, legalName, countryCode, verified, approxAdCountLow, approxAdCountHigh, advertiserUrl, matchedQuery.
Input
| Field | Type | Description |
|---|---|---|
queries | array of strings | Domains, advertiser IDs, brand names or URLs, one search each. |
domains, advertiserIds, startUrls | arrays | Same as queries, split by kind. startUrls takes Transparency Center URLs with their own region, platform, format, start-date, end-date parameters. |
searchQuery | string | One query (alias of solidcode). |
resultType | string | ads (default) or advertisers. |
region / regions | string / array | Country code (US, DE) or English name; anywhere for no filter. Default US. Each region is searched separately and the row says which. Alias: country. |
platforms / platform | array / string | search, youtube, shopping, maps, play (also google_search…). Empty means all. |
adFormat | string | ALL (default), TEXT, IMAGE, VIDEO. |
startDate, endDate / dateFrom, dateTo | string | Ads shown in this period, YYYY-MM-DD, end day included. |
maxAdsPerSearch / maxResults | integer | New ads saved per query and region, default 100, 0 = as many as exist. |
maxItems | integer | Rows in total, all searches together. |
maxAdvertisersPerQuery | integer | Advertisers kept for a brand name, default 5. |
includeDetails | boolean | Variations, countries, topic and payer. One extra request per ad, about 1.5 s each. No extra charge. |
detailConcurrency | integer | Detail requests in flight, default 2 (requests are spaced anyway). |
onlyNewAds, monitorStoreName | boolean, string | Skip ads that an earlier run with the same store already saved. Run it on a schedule to get only new ads. |
includeRawData | boolean | Adds Google's untouched answers in raw. |
urlsFromFile | string | Link to a text file, one query per line. |
proxyConfiguration | object | Not needed. Turn on the Apify proxy if Google asks for a captcha. |
Output fields
| Field | Description |
|---|---|
creativeId | Ad id (CR…). |
advertiserId | Advertiser id (AR…). |
advertiserName | Advertiser name as Google shows it. |
advertiserLegalName | Legal name of a verified advertiser, otherwise null. |
advertiserCountry | Country where the advertiser is based (ISO code). |
advertiserVerified | true when Google says the advertiser verified its identity. |
domain | Website the ad points to. |
format | TEXT, IMAGE or VIDEO. |
platform | SEARCH, YOUTUBE, SHOPPING, MAPS or PLAY when the search was limited to one platform, otherwise null. |
firstShown, lastShown | First and last time the ad was shown, ISO 8601 UTC. |
shownForDays, approxDaysShown | Days the ad was shown (not always consecutive). |
imageUrl | Picture of the ad (text and image ads), otherwise null. |
previewUrl | Script that renders the ad (display and video ads), otherwise null. |
adUrl, advertiserUrl | Pages of the ad and of the advertiser in the Transparency Center. |
region | Country searched, or anywhere. |
matchedQuery | The input line that found the row. |
variationCount, variations, regionsShown, topic, adFundedBy | With includeDetails. |
raw | With includeRawData. |
scrapedAt | When the row was saved. |
Advertiser rows (resultType: "advertisers"): advertiserId, name, legalName, countryCode, verified, approxAdCountLow, approxAdCountHigh, advertiserUrl, matchedQuery, scrapedAt.
Pricing
Pay per event: $0.0003 per ad ($0.30 per 1,000) and the same per advertiser row. Details, raw data and every filter are included. Duplicates are not saved and not charged. Set maxAdsPerSearch, maxItems or a maximum cost per run to control the total. No platform usage is added on top.
Limits and good to know
- Speed. Google returns 100 ads per request; the Actor sends about 1.5 requests per second, so 2,000 ads take about 30 seconds.
includeDetailsreads about 40 ads per minute because Google limits the detail requests; plan 25 minutes for 1,000 detailed ads. - Rate limit. If Google answers "too many requests", the Actor waits and slows down by itself. If Google asks for a captcha the Actor never tries to solve it: it stops, keeps what it saved, and a run that saved nothing ends as failed with nothing charged. Turn on the Apify proxy in that case.
- Platform. Google's list does not say which platform showed an ad. Use the
platformsfilter to get one platform, orincludeDetailsto see the platforms per country. - Times shown. Ranges are published for ads shown in the EU only. Where Google gives only an upper bound,
timesShownLowisnull. - Countries. 243 countries and territories. Russia is not available: Google shows no ads there.
- Advertisers are what Google publishes. Most are companies, but some are sole traders or individuals who advertise, and Google lists them under the verified name they gave. The Actor only returns what the Transparency Center shows publicly and stores nothing else. Even a domain search can list an individual who advertises a brand's website (an affiliate, for example), and a brand name can match advertisers that are people. Check the rules that apply to your use (for example GDPR) before you keep or share personal names.
- The ads belong to their advertisers; Google publishes them for transparency.