Google Ads Transparency Scraper - Ad Copy, Reach & New Ads avatar

Google Ads Transparency Scraper - Ad Copy, Reach & New Ads

Pricing

Pay per event

Go to Apify Store
Google Ads Transparency Scraper - Ad Copy, Reach & New Ads

Google Ads Transparency Scraper - Ad Copy, Reach & New Ads

Every Google ad of a domain, advertiser or brand from the Ads Transparency Center: first and last shown, ad copy and landing page (text ads read from their picture too), countries, EU reach and targeting, who paid. Watch mode returns only new and stopped ads. Works as an MCP tool for AI agents.

Pricing

Pay per event

Rating

0.0

(0)

Developer

CrawlPlant

CrawlPlant

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Independent tool, not affiliated with, endorsed by or connected to Google. It reads the public Google Ads Transparency Center (adstransparency.google.com), the ad library Google publishes for every visitor.

Every Google ad a competitor runs, one row per ad: text, image and video ads on Search, YouTube, Shopping, Maps and Play, with the advertiser, first and last day shown, days shown, whether it is running now, and a link to the ad. Paste domains, advertiser names, advertiser ids or Transparency Center URLs, mixed. On request, per ad: ad copy (headline, description, call to action, display URL, landing page), the YouTube video of video ads, product and merchant of shopping ads, every country it ran in with first and last day, and for ads shown in the EU impressions per country and platform and the kinds of targeting used, plus who paid (agencies and resellers). A watch mode returns only the ads that are new since your last run and the ones that stopped. Two more modes: a domain check (does a website advertise on Google, how many ads, since when, by whom) and an advertiser lookup.

Why this one

  • Only what changed, on a schedule. With onlyNew each run returns just the ads a competitor launched since the previous run, and with includeStopped the ones they switched off. The state stays in a key-value store in your own account; you pay for the new ads, not for the same 500 ads every day.
  • Where an ad ran and how many people saw it. Every country with its first and last day shown; for ads shown in the EU the impressions per country and per platform (Search, YouTube, Shopping...) and whether demographics, location, context, interests or customer lists were used for targeting, as Google discloses them under the Digital Services Act.
  • The words, not just a screenshot. Headlines, descriptions, calls to action and landing pages of search, video, shopping, local and display ads, YouTube video ids with length and channel, and the visible text of display banners. Most text ads exist in the Transparency Center only as a picture: the Actor reads their headline, description, display URL and sitelinks from that picture, in the language of your region (19 of 19 text ads of canva.com in Germany on 2026-10-01, umlauts included).
  • The right account for a brand name. "Nike" finds Nike Retail BV (80,000-90,000 ads) instead of the first suggestion, a one-ad "Nike" account: the Actor picks the biggest whole-word match and lists the other accounts in the log. Or ask for the domain and get every account that advertises it, agencies included.
  • Long-running ads first. Ads Google showed for months are the ones that keep paying off for the advertiser: filter by minDaysShown, sort by daysShown, or keep only the ads launched this week (firstShownFrom).
  • Fast and light. 100 ads come in one request: the default run takes about 5 seconds. 1,000 ads of nike.com took 18 seconds on 2026-09-29.
  • Runs that finish. A page or an ad that can't be read is retried through another route; what still fails leaves its fields empty, the run carries on and its summary says what was missing.

What can you use it for?

  • Competitor ad monitoring: a daily list of the ads your competitors launched and stopped, straight to Slack, e-mail or Google Sheets.
  • Creative research: the headlines, descriptions, calls to action and videos that competitors keep running for months.
  • Market and country research: who advertises in which country, on which Google platform, since when.
  • Lead generation for agencies: which of 1,000 websites advertise on Google right now, how many ads they run and who manages them.
  • Brand protection: ads that use your domain, run by accounts that aren't yours (resellers, affiliates, impostors).
  • AI agents: "what did canva.com launch on YouTube this month?" answered from a few rows.

Quick start

  1. Click Try for free (or Start) with the default input: the 100 most recently shown ads for nike.com, everywhere. About 5 seconds; about $0.10 on the Free plan.
  2. Put your competitors in Domains, advertisers or Transparency Center URLs: competitor.com, Competitor Inc, AR16735076323512287233 or a URL copied from adstransparency.google.com.
  3. Pick a country, a format and a platform; turn on Ad copy or Countries, impressions and targeting if you need them.
  4. Download the table as CSV, Excel or JSON, or save the input as a task and schedule it with Only new ads.

Copy to your AI assistant

Paste this into ChatGPT, Claude or any agent so it knows how to use the Actor:

crawlplant/google-ads-transparency on Apify: ads from the Google Ads Transparency Center. Input: mode ("ads" default = one
row per ad, most recently shown first; "advertisers" = one row per advertiser account; "domainCheck" = one row per domain:
hasAds, adCountMin/Max, isAdvertisingNow, lastAdShown, advertisers), targets (domains like nike.com, advertiser ids
AR..., advertiser names, or adstransparency.google.com URLs incl. single-ad URLs; default ["nike.com"]). Filters: region
(ISO country code or "anywhere"), format (all|text|image|video), platform (all|search|youtube|shopping|maps|play),
dateFrom/dateTo (shown between; 2026-09-01, yesterday, -30; last ~13 months), firstShownFrom (ads started on/after),
minDaysShown, activeOnly, sortBy (lastShown|firstShown|daysShown). Extras: includeDetails (countries with first/last day,
EU impressions per country/platform, targeting types, variations, paidBy), includeAdContent (headline, description,
callToAction, displayUrl, landingUrl, videoUrl, youtubeChannel, merchant, adTexts; text ads kept as a picture are read
by OCR, copySource "ocr", languages from region or ocrLanguages like ["eng","deu"]). Monitoring: onlyNew (only ads not
returned before for the same target+filters; first run = baseline), includeStopped. maxItems = ads per target (default
100). Output rows: creativeId, advertiserId, advertiserName, format, firstShown, lastShown, daysShown, isActive,
matchedDomain, imageUrl, adUrl, watchStatus, ...

Modes

ModeOne row perReadsTypical use
ads (default)ad (creative)1 request per 100 ads; +1 per ad for details, +1 per ad for ad copycompetitor ads, monitoring, creative research
advertisersadvertiser account2 requests per accountfind a brand's accounts; who advertises a domain
domainCheckdomain1 request per domainwhich websites advertise on Google; lead lists
summarycompetitor (target)1 request per 100 ads listed; +copy of the maxItems newestcompare competitors' strategy
messagesmessage (ads grouped by headline)1 request per 100 ads; +copy per adwhich messages a competitor invests in
timelineweek of the last year, per competitor1 request per 100 ads, nothing per adwhen a competitor launched and stopped ads, how many ran

Targets can be mixed in one run:

  • a domain or website URL: nike.com, https://www.nike.com/us/ (reduced to nike.com; the Transparency Center indexes the main domain, so shop.example.co.uk becomes example.co.uk),
  • an advertiser id: AR16735076323512287233 (in the address of an advertiser page),
  • an advertiser name: Shopify (the biggest matching account; advertisersPerName reads more),
  • a Transparency Center URL: an advertiser page, a single ad (/advertiser/AR.../creative/CR...) or a domain search (/?domain=nike.com). The URL's own region, format, platform and dates are used for that target.

Ready-to-use examples

1. The latest ads of a competitor's domain

{ "targets": ["nike.com"], "maxItems": 100 }

2. A competitor's YouTube video ads in the UK, with the video and the copy

{ "targets": ["canva.com"], "region": "GB", "format": "video", "includeAdContent": true, "maxItems": 50 }

3. Search ad copy: headlines, descriptions and display URLs

{ "targets": ["booking.com"], "format": "text", "platform": "search", "includeAdContent": true, "maxItems": 100 }

4. A brand by name (the biggest matching account)

{ "targets": ["Shopify"], "maxItems": 200 }

5. Advertiser ids and Transparency Center URLs, mixed

{
"targets": [
"AR16735076323512287233",
"https://adstransparency.google.com/advertiser/AR13289988016354361345?region=US&format=VIDEO"
],
"maxItems": 100
}

6. Where each ad ran, EU impressions and targeting

{ "targets": ["zalando.de"], "region": "DE", "includeDetails": true, "maxItems": 100 }

7. The longest-running ads that are still live

{ "targets": ["hubspot.com"], "minDaysShown": 90, "activeOnly": true, "sortBy": "daysShown", "maxItems": 50 }

8. Ads launched in the last 7 days

{ "targets": ["temu.com"], "firstShownFrom": "-7", "sortBy": "firstShown", "maxItems": 100, "maxScanPages": 30 }

9. Ads shown in the US during the first half of September

{ "targets": ["nike.com"], "region": "US", "dateFrom": "2026-09-01", "dateTo": "2026-09-15", "maxItems": 500 }

10. Daily watch: new and stopped ads of three competitors, with copy

{
"targets": ["canva.com", "adobe.com", "figma.com"],
"onlyNew": true,
"includeStopped": true,
"includeAdContent": true,
"maxItems": 500
}

11. One ad by its URL, with every detail

{
"targets": ["https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR14738787052023709697?region=DE"],
"includeAdContent": true
}

12. Which of these websites advertise on Google?

{ "mode": "domainCheck", "targets": ["nike.com", "hubspot.com", "notion.so", "example.com"] }

13. Which of them advertise in Germany?

{ "mode": "domainCheck", "targets": ["nike.com", "hubspot.com", "notion.so"], "region": "DE" }

14. Every Google Ads account of a brand

{ "mode": "advertisers", "targets": ["Canva"], "maxItems": 20 }

15. Everyone advertising a domain: the brand, agencies, resellers

{ "mode": "advertisers", "targets": ["hubspot.com"], "maxItems": 50 }

16. Compare competitors in one table: running and new ads, top messages, landing pages, campaigns

{ "mode": "summary", "targets": ["canva.com", "figma.com", "miro.com"], "region": "US", "maxItems": 100 }

17. A competitor's messages, most used and longest running first

{ "mode": "messages", "targets": ["semrush.com"], "region": "US", "maxItems": 200 }

18. A competitor's year of Google Ads, week by week

{ "mode": "timeline", "targets": ["figma.com", "miro.com"] }

How to…

See when a competitor launched and stopped its Google ads

mode: "timeline" (example 18) gives 52 rows per competitor, one per week of the last year: ads launched (by format), ads stopped, ads shown and ads running on an average day. It reads the whole ad list (100 ads per request, nothing per ad), so a year of a big advertiser costs a few cents and takes seconds: figma.com and miro.com together, 104 rows, 98 requests on 2026-10-01. figma.com launched 450 ads in the week of 2026-02-23: from ~130 ads running on an average day in late January to ~490. Ads often pause between their first and last day (47% of miro.com's): avgRunningAds counts each ad in proportion to the days it was really shown, adsShown is every ad whose run touches the week.

Compare competitors' Google Ads strategy

mode: "summary" (example 16) gives one row per competitor. It counts from the ad list: ads running now, ads launched in the last 7 and 30 days, formats, the median number of days an ad runs and which accounts run them. It reads the copy of the maxItems most recently shown ads for the top messages, longest-running ads, top landing pages and top campaigns (the utm_campaign tags of the landing URLs). For a domain, accounts that only link to it now and then are left out of the figures (adsFromOtherAdvertisers); accounts named after the brand and agencies running its ads stay. On 2026-10-01, canva.com in the US: 1,449 ads listed, 1,363 running, 420 launched in the last 30 days, top campaign us_en_all_payback_generic_lower_rev_demand-gen_youtube.

See which messages a competitor invests in

mode: "messages" (example 17) groups the ads by message (the headline, or the first line of text) and ranks them by number of ads, then by the longest run: the messages a competitor keeps paying for come first, each with its ads running now, days shown, landing pages and campaigns.

See a competitor's campaign structure

Every ad row with copy carries landingPage and the URL's campaign tags utmCampaign, utmSource, utmMedium, utmContent and utmTerm. Advertisers name campaigns by market, language, goal and channel (uk_en_all_mau_generic_mid_acq_demand-gen_youtube), so they show how the account is organised.

Get every Google ad a competitor runs

Put the competitor's domain in targets (example 1). The domain search finds the ads of every account that advertises that domain: the brand's regional accounts, its agencies and resellers (advertiserName, matchedDomain). Raise maxItems to go deeper; ads come most recently shown first, 100 per request.

Monitor a competitor's new Google ads every day

Save example 10 as a task and schedule it daily. The first run returns the current ads (watchStatus: "baseline"); every later run returns only ads not returned before ("new") and, with includeStopped, ads that were running at the previous run and aren't any more ("stopped"). Connect Slack, e-mail or Google Sheets to the task's dataset.

See where a Google ad ran and how many people saw it

Turn on includeDetails (example 6): countries lists every country the ad was shown in, countryReach adds the first and last day per country, and for ads shown in the EU the impressions per country and per platform. euImpressionsMin / euImpressionsMax is the EU total as Google publishes it (a range, e.g. 10,000-15,000).

Get competitors' Google ad copy and landing pages

Turn on includeAdContent (examples 2, 3, 10): headline, longHeadline, description, callToAction, displayUrl and landingUrl where the ad has them; shopping ads give the product title and merchant; display banners give their visible text in adTexts and their images in adImageUrls. Text ads kept as a picture are read from the picture (copySource: "ocr"): headline, description, display URL, and the sitelinks in adTexts.

Download a competitor's YouTube ads

format: "video" (or platform: "youtube") with includeAdContent gives videoUrl (youtube.com/watch?v=...), videoId, videoDuration and youtubeChannel for each video ad.

Find a competitor's winning (long-running) Google ads

Advertisers switch off ads that don't work. minDaysShown: 90 with activeOnly: true and sortBy: "daysShown" (example 7) lists the ads that have been running for months and still are.

Check which websites advertise on Google

mode: "domainCheck" (examples 12 and 13): one row per domain with hasAds, isAdvertisingNow, the ad count range, the last day an ad was shown, the newest ad's start, the advertisers behind it and the formats of its recent ads. One request per domain, so a list of 1,000 domains takes a few minutes.

Find all Google Ads accounts of a brand

mode: "advertisers" with a name (example 14) lists every matching account, biggest first, with its legal name, billing country, verification and ad count; with a domain (example 15) it lists everyone who advertises that domain.

Input options

OptionDefaultWhat it does
modeadsads, advertisers or domainCheck (see Modes).
targets["nike.com"]Domains, advertiser ids, advertiser names, Transparency Center URLs.
regionanywhereOnly ads shown in this country (2-letter code: US, GB, DE, FR, AU, ... 244 countries and territories).
formatalltext, image or video.
platformallsearch, youtube, shopping, maps or play.
dateFrom, dateToemptyOnly ads shown between these days (2026-09-01, yesterday, -30). About the last 13 months.
firstShownFromemptyOnly ads that started on or after this day.
minDaysShown0Only ads shown on at least this many days.
activeOnlyfalseOnly ads shown in the last 2 days.
sortBylastShownlastShown (the site's order), firstShown (newest ads first), daysShown (longest running first).
includeDetailsfalseCountries, first/last day per country, EU impressions and targeting, variations, who paid. +1 request per ad.
includeAdContentfalseHeadline, description, call to action, landing page, YouTube video, merchant, visible text. +1 request per ad.
ocrTextAdstrueWith includeAdContent: read headline, description, display URL and sitelinks of text ads that Google keeps only as a picture.
ocrLanguagesemptyLanguages of that text (eng, deu, fra, spa, pol, jpn...); empty = English plus the language of region.
onlyNewfalseWatch mode: only ads not returned before for the same target and filters.
includeStoppedfalseWith watch mode: also ads that stopped running since the previous run.
advertisersPerName1Ads mode, advertiser names: how many matching accounts to read.
maxItems100Ads per target (watch mode: how many of the latest ads each run compares); advertisers mode: accounts per target; summary and messages modes: ads read with their copy per target.
maxScanPages20Pages (100 ads each) read per target when a filter (minDaysShown, firstShownFrom, activeOnly) keeps few ads.

The country, format, platform and date filters are applied by the Transparency Center itself, so they cost nothing extra. minDaysShown, firstShownFrom and activeOnly are checked on the ads read; you pay only for the rows returned.

Example output

One video ad with includeDetails and includeAdContent (run on 2026-09-29; long URLs shortened):

{
"recordType": "ad",
"creativeId": "CR08146901164865093633",
"advertiserId": "AR01625195283841286145",
"advertiserName": "Shopify Inc.",
"isAdvertiserVerified": true,
"format": "video",
"firstShown": "2026-08-31T18:01:19.000Z",
"lastShown": "2026-09-29T22:17:41.000Z",
"daysShown": 30,
"runDays": 30,
"isActive": true,
"matchedDomain": "shopify.com",
"imageUrl": null,
"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&...",
"adUrl": "https://adstransparency.google.com/advertiser/AR01625195283841286145/creative/CR08146901164865093633?region=GB",
"advertiserUrl": "https://adstransparency.google.com/advertiser/AR01625195283841286145?region=GB",
"countries": ["GB", "IE"],
"countryReach": [
{ "countryCode": "GB", "country": "United Kingdom", "impressionsMin": null, "impressionsMax": null, "firstShown": null, "lastShown": "2026-09-29", "platforms": [] },
{ "countryCode": "IE", "country": "Ireland", "impressionsMin": null, "impressionsMax": null, "firstShown": "2026-08-31", "lastShown": "2026-09-29", "platforms": [] }
],
"euImpressionsMin": null,
"euImpressionsMax": null,
"euFirstShown": "2026-08-31",
"euLastShown": "2026-09-29",
"targeting": {
"included": ["demographics", "geography", "contextual", "customer-lists"],
"excluded": ["contextual", "customer-lists"],
"ageRanges": [], "excludedAgeRanges": [], "genders": [], "excludedGenders": [], "locations": [], "excludedLocations": []
},
"targetingTypes": ["demographics", "geography", "contextual", "customer-lists", "exclude:contextual", "exclude:customer-lists"],
"variations": [{ "kind": "script", "previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...", "imageUrl": null, "width": null, "height": null }],
"variationCount": 4,
"paidBy": null,
"containsSyntheticMedia": null,
"headline": "Launch your brand on Shopify",
"longHeadline": "The entrepreneur life is calling. Launch your brand on Shopify.",
"description": "Build the business and life you've always wanted on Shopify. Start for free.",
"callToAction": null,
"displayUrl": "shopify.com",
"landingUrl": "https://shopify.com/free-trial",
"merchant": null,
"videoId": "HHQgF6hBHO0",
"videoUrl": "https://www.youtube.com/watch?v=HHQgF6hBHO0",
"videoDuration": "0:15",
"youtubeChannel": "Shopify",
"adImageUrls": [],
"adTexts": [],
"watchStatus": null,
"firstSeenAt": null,
"target": "https://adstransparency.google.com/?region=GB&domain=shopify.com&format=VIDEO",
"targetType": "domain",
"region": "GB",
"scrapedAt": "2026-09-29T22:41:34.368Z",
"source": "live",
"store": "google-ads-transparency"
}

A domainCheck row (nike.com in Germany, 2026-09-29):

{
"recordType": "domainCheck",
"domain": "nike.com",
"hasAds": true,
"adCountMin": 20000,
"adCountMax": 30000,
"isAdvertisingNow": true,
"lastAdShown": "2026-09-29T22:19:14.000Z",
"newestAdFirstShown": "2026-07-30T15:50:40.000Z",
"advertiserCount": 5,
"topAdvertiser": "Nike Retail BV",
"recentFormats": { "text": 95, "image": 0, "video": 5 },
"recentAdsRead": 100,
"domainUrl": "https://adstransparency.google.com/?region=DE&domain=nike.com"
}

Output fields

Ad rows (recordType: "ad"):

FieldMeaning
creativeId, advertiserIdGoogle's ids of the ad and the advertiser account (stable).
advertiserName, isAdvertiserVerifiedThe account's name and whether Google verified it.
formattext, image or video.
firstShown, lastShownFirst and most recent time the ad was shown (UTC).
daysShownDays the ad was shown, as Google counts them. runDays: calendar days from first to last shown.
isActiveShown in the last 2 days.
matchedDomainThe advertised domain.
imageUrl, imageWidth, imageHeightA picture of the ad, when Google archives it as one (most text ads, many image ads).
previewUrlGoogle's interactive preview of the ad (a script the Transparency Center renders).
adUrl, advertiserUrlThe ad's and the advertiser's pages in the Transparency Center.
countries, countryReachWith includeDetails: countries shown in; per country the first and last day, impressions (EU), platforms.
euImpressionsMin/Max, euFirstShown, euLastShownWith includeDetails: EU total, for ads shown in the EU.
targeting, targetingTypesWith includeDetails, EU ads: kinds of targeting used to include or exclude people.
variations, variationCountWith includeDetails: every version of the ad (sizes, headlines, assets).
paidByWith includeDetails: who paid for the ad, when Google names them (often an agency).
headline, longHeadline, description, callToAction, displayUrl, landingUrlWith includeAdContent, when the ad has them.
videoId, videoUrl, videoDuration, youtubeChannelWith includeAdContent: video ads.
merchant, adImageUrls, adTextsWith includeAdContent: shopping merchant, images in the ad, every line of text in the ad (sitelinks included).
landingPage, utmCampaign, utmSource, utmMedium, utmContent, utmTermWith ad copy: the landing URL without its query and its campaign tags.
copySourcepreview (read from the ad itself) or ocr (read from the picture of a text ad); empty without copy.
watchStatus, firstSeenAtWith onlyNew: baseline, new or stopped, and when the watch first saw the ad.
target, targetType, regionWhich target and country filter the row came from.
scrapedAt, source, storeWhen it was read (always live).

Advertiser rows (recordType: "advertiser"): advertiserId, advertiserName, legalName, country (billing country), isVerified, adCountMin / adCountMax (with the region, format and platform filters), lastAdShown, adsForDomainMin / adsForDomainMax (domain targets: this account's ads for that domain), nameHistory, advertiserUrl.

Domain rows (recordType: "domainCheck"): domain, hasAds, isAdvertisingNow, adCountMin / adCountMax, lastAdShown, newestAdFirstShown, advertiserCount, topAdvertiser, advertisers (id, name, recentAds among the 100 most recent), recentFormats, recentAdsRead, domainUrl.

Summary rows (recordType: "summary"): adCountMin / adCountMax, adsListed, coversAllRunningAds, activeAds, newAds7d, newAds30d, formats, medianDaysShown, advertisers, adsFromOtherAdvertisers, adsAnalyzed, messageCount, topMessage / topMessages, longestRunning, topLandingPage / topLandingPages, topCampaign / topCampaigns, topCountries (with includeDetails), adsWithoutText.

Week rows (recordType: "week"): week (Monday), partialWeek, launched, launchedByFormat, stopped, adsShown, avgRunningAds, complete (the whole list was read).

Message rows (recordType: "message"): rank, headline, description, adCount, activeAds, formats, firstShown, lastShown, maxDaysShown, totalDaysShown, landingPages, utmCampaigns, imageUrl, adUrls.

The Transparency Center gives ad counts and impressions as ranges (e.g. 10,000-20,000); both ends are returned.

Alerts and scheduling

  • Daily competitor digest: schedule example 10 every morning and send the dataset to Slack or e-mail with an Apify integration. Empty days cost only the run start.
  • Weekly creative review: example 7 on Mondays into Google Sheets.
  • Lead list refresh: example 12 monthly with your prospect domains; filter isAdvertisingNow.
  • Webhooks: add a webhook on "run succeeded" to push new ads into your own system.

Run it through the API

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawlplant/google-ads-transparency').call({ targets: ['canva.com'], format: 'video', includeAdContent: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const ad of items) console.log(ad.advertiserName, ad.headline, ad.videoUrl, ad.firstShown);

Python:

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("crawlplant/google-ads-transparency").call(run_input={"mode": "domainCheck", "targets": ["nike.com", "notion.so"]})
for d in client.dataset(run["defaultDatasetId"]).iterate_items():
print(d["domain"], d["hasAds"], d["adCountMin"], d["topAdvertiser"])

Use with AI agents

Add the Actor as a tool through Apify's MCP server: https://mcp.apify.com?tools=crawlplant/google-ads-transparency. An agent can pass a competitor's domain and read what it advertises, where and since when; watch mode fits agents that run on a schedule ("what's new since yesterday?"). Flat field names and plain values (ISO dates, country codes, numbers) are easy to quote or store for retrieval.

How much does it cost to scrape the Google Ads Transparency Center?

Pay per result: platform usage is included.

EventFree planStarterScaleBusiness and up
EventFree planStarterScaleBusiness and up
---------------
Ad (per 1,000)$1.00$0.90$0.80$0.70
Advertiser account (per 1,000)$3.00$2.70$2.40$2.10
Domain check (per 1,000)$3.00$2.70$2.40$2.10
Ad analysed in summary or messages mode, copy and OCR included (per 1,000)$2.00$1.80$1.60$1.40
Week of a competitor timeline (per 1,000 rows; 52 rows per competitor)$2.00$1.80$1.60$1.40
Extra for an ad: countries, EU impressions and targeting (per 1,000 ads)$0.50$0.45$0.40$0.35
Extra for an ad: ad copy read from the ad (per 1,000 ads that returned copy)$1.00$0.90$0.80$0.70
Extra for an ad: text ad copy read from its picture (per 1,000 ads that returned text)$1.50$1.35$1.20$1.05
Extra for an ad: new in watch mode (per 1,000 new ads)$1.00$0.90$0.80$0.70
Actor start (per run)$0.00005$0.00005$0.00005$0.00005

An ad's extras are charged only when you turn them on and the ad has them. The baseline run of a watch and stopped-ad rows pay the ad price only. In summary and messages modes you pay per ad analysed (maxItems per target, copy and OCR included); the summary and message rows and the list counts are free.

Example on the Free planRowsCost
Default run: 100 ads of nike.com100~$0.10
1,000 ads of a domain1,000~$1.00
100 ads with countries, EU impressions and ad copy100~$0.30
Daily watch of 3 competitors, ~20 new ads a day with copy~600 a month~$2.00 a month
1,000 domains checked1,000~$3.00
20 advertiser accounts of a brand20~$0.06
Summary of 3 competitors, 100 ads analysed each3~$0.60
A year's timeline of one competitor52~$0.10

Set a maximum cost per run in the run options to stop a large run at your budget.

Other Google Ads Transparency Actors on the Apify Store, Free-plan prices read from the Store on 2026-09-29:

ActorUsers (30 days)Price
scrapesage/google-ads-transparency-scraper723$2.00 / 1,000 ads; full creative detail +$3.00 / 1,000; advertiser $3.00 / 1,000
solidcode/ads-transparency-scraper519$1.50 / 1,000 ads (from $0.80 on higher plans) + $0.001 per run
s-r/google-ads-transparency179$1.50 / 1,000 ads + $0.00005 per run
pulsedata/google-ads-transparency-scraper36$1.00 / 1,000 ads
domestic_buffalograss/google-ads-transparency-scraper21$1.00 / 1,000 ads + $0.01 per run; detail +$2.00 / 1,000; OCR text +$2.00 / 1,000
alkausari_mujahid/google-ads-transparency-scraper (domain check)52$12.00 / 1,000 domains
This Actornew$1.00 / 1,000 ads; countries and EU reach +$0.50; ad copy +$1.00 (text ads from their picture +$1.50); domain check $3.00 / 1,000

Reliability

  • Requests are spaced at a polite pace. When the Transparency Center refuses an address anyway, that address rests and the next request goes out from a fresh one, so large runs with details keep going. An ad whose details or copy still can't be read keeps every other field, with the missing part empty and not charged.
  • The run always finishes: it stops starting new requests shortly before the time limit and saves what it has.
  • Every run writes a summary to the key-value store (OUTPUT): rows saved, requests, data read, warnings (targets that matched nothing, names without an advertiser, filters that kept nothing) and the events charged.

Data freshness

Every run reads the Transparency Center at that moment. lastShown moves within the hour while an ad runs, so isActive and the watch mode see today's activity. Day-by-day activity (the date filter) covers about the last 13 months; the ads themselves go back years (still-running ads first shown in 2021 in our test runs).

Troubleshooting

  • Fewer ads than expected: maxItems is per target (default 100); filters combine. minDaysShown, firstShownFrom and activeOnly are checked on up to maxScanPages pages: raise it for very selective filters.
  • No ads for a domain: use the main domain (example.com, not shop.example.com); some advertisers show a different domain in their ads. Try the brand name or mode: "advertisers" with the domain to see who advertises it.
  • A name found the wrong account: the log lists the matching accounts; use the advertiser id (AR...) from the advertiser page, or raise advertisersPerName.
  • Odd letters in a text ad's copy (copySource: "ocr"): set region to the ads' country, or list their languages in ocrLanguages (["eng", "deu"]). The picture itself is in imageUrl.
  • No impressions or targeting: Google publishes them for ads shown in the EU (and for political ads); other ads have countries and dates.
  • A watch run returned nothing: no new ads since the last run. Changing the targets' filters starts a new watch (baseline).

FAQ

How much does it cost to scrape the Google Ads Transparency Center?

About $0.10 for the default run of 100 ads and $1.00 per 1,000 ads; details and ad copy are optional extras. See the price table.

Is there an official Google Ads Transparency Center API?

Google offers no API for commercial ads in the Transparency Center (only a BigQuery dataset of political ads). This Actor gives you the same data as the website, as JSON, CSV or Excel, and through the Apify API.

Can I see how much a competitor spends on Google Ads?

Google does not publish spend for commercial ads. You get the number of ads, how long each one ran, where, on which platforms, and for ads shown in the EU the impressions per country: the best public proxy for effort and budget.

How do I track when a competitor launches new ads?

Schedule the Actor with onlyNew: true (example 10). Each run returns only the ads launched since the previous run, and includeStopped adds the ones they switched off.

Which ads are included?

Everything the Transparency Center shows for commercial advertisers: Search, YouTube, Shopping, Maps and Play ads, in text, image and video formats. Political ads are not the target of this Actor.

How far back does it go?

Ads keep their first-shown date however old it is (ads running since 2021 in our test runs); the date filter works on about the last 13 months of daily activity.

The Actor reads public pages that Google publishes for transparency, without logging in, at a polite pace. Advertiser names can be names of people (sole traders); how you store and use the data is your responsibility under your local law (e.g. GDPR, CCPA) and Google's terms.

Limits

  • 100 ads per request; ad counts and impressions come as ranges.
  • Ad copy depends on the ad's template: search, video, shopping and local ads give headline and description; display banners give visible text and images; text ads kept as a picture give headline, description and sitelinks read from it.
  • Impressions and targeting: ads shown in the EU only. Spend: not published for commercial ads.
  • Details and ad copy: about 3-4 ads per second.
  • Watch mode compares the maxItems most recently shown ads per target; for advertisers with thousands of running ads, raise maxItems (only new ads are charged). Up to 10,000 ads are remembered per watch.

Run summary

Every run stores OUTPUT in its key-value store: itemsPushed, warnings, charged (events per type), requests and data read, and which route answered.

Privacy

The data is what Google publishes about advertisers: account names (companies, and sometimes people who advertise as individuals), ids, countries, and their ads. No logins, no personal data of viewers. Each run sends the developer anonymous feature-usage statistics (the mode and which options were used, never your targets); your Apify account id is replaced by a one-way hash on arrival.