Google Ads Transparency Scraper: Competitor Ads by Brand avatar

Google Ads Transparency Scraper: Competitor Ads by Brand

Pricing

from $1.00 / 1,000 ads

Go to Apify Store
Google Ads Transparency Scraper: Competitor Ads by Brand

Google Ads Transparency Scraper: Competitor Ads by Brand

Google Ads Transparency Center scraper for competitor ads: every ad a brand runs on Google Search, YouTube, Maps, Play and Shopping, with creatives, format, first and last shown, and EU impressions and targeting. Pay per ad.

Pricing

from $1.00 / 1,000 ads

Rating

0.0

(0)

Developer

DTK Foundry

DTK Foundry

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

A Google Ads Transparency Center scraper for competitor ads: every ad a brand runs on Google Search, YouTube, Google Maps, Google Play and Google Shopping, from Google's public Ads Transparency Center: the creative, its format, when it was first and last shown, and the advertiser behind it. Turn on details to add each ad's variations and topic, the countries it ran in, and for EU countries how many times it was shown (overall and per platform) and how its audience was selected.

  • Search the way you think: a brand name ("Nike"), a website ("temu.com") or an advertiser account ID. Brand names are matched to the brand's own website when Google knows it, so "Temu" finds Temu's ads even though they run under the name Elementary Innovation Pte. Ltd. Every row says what your search matched.
  • Filters that match the site: country (or anywhere), format, platform, and a date range.
  • Reliable. Tested on 200 varied searches (50 brands, 20 websites, 10 countries, random format, platform and date filters, details on 30%): all 200 answered, none failed, median 2.6 seconds per search.
  • Pay per ad: $0.001. Searches that fail or find nothing are never charged.

Input

FieldTypeDefaultDescription
advertisersarray[]One per line: brand name, website, or account ID (AR...). Empty = a free format example.
regionstringUS2-letter country code where the ads were shown, or anywhere.
formatstringallall, text, image, video.
platformstringallall, search, youtube, maps, play, shopping.
shownFrom / shownTodateany timeOnly ads shown in this date range.
maxAdsPerAdvertiserinteger1001-5,000, newest first.
includeDetailsbooleanfalseVariations, topic, countries, and EU reach and targeting. One more request per ad.
{
"advertisers": ["Nike", "temu.com"],
"region": "DE",
"format": "all",
"platform": "youtube",
"shownFrom": "2026-07-01",
"maxAdsPerAdvertiser": 100,
"includeDetails": true
}

Output (one record per ad)

A real record from a run on 2026-10-20 (searched nike.com in Germany with details on; lists shortened):

{
"searchedFor": "nike.com",
"searchType": "website",
"region": "DE",
"scrapedAt": "2026-10-20T20:31:54+00:00",
"advertiserIds": null,
"estimatedAdsMin": 2000,
"estimatedAdsMax": 3000,
"status": "ok",
"rank": 2,
"advertiserId": "AR18378488041124659201",
"advertiserName": "Nike Retail BV",
"creativeId": "CR02281612109399719937",
"website": "nike.com",
"format": "text",
"firstShown": "2021-10-25",
"lastShown": "2026-10-20",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/8919616364878071",
"imageWidth": 364,
"imageHeight": 305,
"previewUrl": null,
"adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR02281612109399719937?region=DE",
"topic": null,
"variations": [
{
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/8919616364878071",
"imageHeight": 305,
"imageWidth": 364
}
],
"variationCount": 4,
"regions": [
{
"countryCode": "US",
"region": "United States",
"firstShown": null,
"lastShown": "2026-10-19",
"timesShownMin": null,
"timesShownMax": null,
"timesShownByPlatform": []
},
{
"countryCode": "DE",
"region": "Germany",
"firstShown": "2023-03-01",
"lastShown": "2026-10-20",
"timesShownMin": 60000,
"timesShownMax": 70000,
"timesShownByPlatform": [
{
"platform": "Google Search",
"timesShownMin": 45000,
"timesShownMax": 50000
},
{
"platform": "Google Shopping",
"timesShownMin": 0,
"timesShownMax": 1000
}
]
}
],
"timesShownEuMin": 175000,
"timesShownEuMax": 200000,
"audienceSelection": {
"demographicInfo": "included",
"geographicLocations": "included",
"contextualSignals": "included"
}
}

The detail fields (topic to audienceSelection) appear only with includeDetails. Times shown and audience selection are published by Google for EU countries only (EU Digital Services Act); elsewhere the regions list has dates only.

  • imageUrl is the archived creative image. Text ads are archived by Google as images too, so their wording is in the image, not in a text field. Ads Google renders on the fly (most video and some image ads) have a previewUrl instead: Google's own preview script for that ad.
  • estimatedAdsMin/Max is Google's estimate of how many ads match the whole search.
  • resolvedTo (brand-name searches) says what the name matched: website nike.com or advertiser Nike, Inc..
  • A search with no ads gives one record with status: "no-results"; a search that could not be completed gives status: "failed" and an error. Neither is charged.

Pricing

Pay per event, no subscription.

EventPriceWhen it is charged
Ad$0.001Once per ad delivered. 100 ads = $0.10.
Ad details$0.001Once per ad whose details were delivered (only with includeDetails).

Set a maximum charge in the run options and the actor stops before it would go over. Apify's standard run-start event adds $0.00005 per run.

Limits, stated plainly

  • Brand names are matched as well as Google's own suggestions allow. For an exact search use the website or the advertiser ID from the advertiser's Transparency Center page (adstransparency.google.com/advertiser/AR...).
  • Google limits how fast this site can be read. The actor spreads requests over fresh connections and waits when told to; very large runs (thousands of ads with details) take minutes, not seconds.
  • Political ads (Google's separate political ads report) are not covered.
  • Public data only: no login, no personal data.

Privacy

Only your search terms are sent to Google. Results are stored only in your run's dataset. The actor runs with limited permissions and reads nothing else in your account.