DEV Community

Cover image for Google Ads Transparency Center scraper: 60 Nike ads, and 17 of the text ads had no text
Agnes the Dev
Agnes the Dev

Posted on

Google Ads Transparency Center scraper: 60 Nike ads, and 17 of the text ads had no text

I exported 60 Nike ads from the Google Ads Transparency Center to see what's actually in there.

17 of the text ads came back with no text at all. Google publishes them as pictures only. None of the 60 were video. And the oldest one has been showing up since October 2021.

The problem

The Transparency Center at adstransparency.google.com lists the ads an advertiser runs on Google. Search, shopping, display, YouTube. It's free and public. It also has no export, so you click through one card at a time.

Scrapers fill that gap. What they can't fix is that the columns you'd expect, headline and description, are often empty, because Google publishes a lot of text ads as rendered images and never publishes the words.

Limits first. No spend, no budgets, no keywords, no bids, no clicks. Google publishes none of that, so nothing can scrape it.

The same search ad as text and as a rendered picture

What 60 Nike ads actually contained

Input: domain nike.com, region anywhere, format all, cap 60. Run on 2026-10-03 at 16:06 UTC, 59 seconds, run ID BLC69zWNQOcBuulfD. The run read 80 creatives over two result pages and delivered 60, my cap.

First surprise, nike.com isn't one advertiser. It maps to four verified accounts: Nike Retail BV (37 ads), Nike, Inc. (20), Nike Global Trading B.V. Singapore Branch (2) and a media agency account, WPP Media Management (1).

By ad type:

Ad type Ads Headline as text Picture of the ad Notes
Search 41 41 33 description and display URL on all 41
Text, picture only 17 0 17 Google publishes no words for these
Shopping 2 2 2 (product photo) product title, merchant "Nike Officiel"
Video 0 none in this sample

The 17 picture only ads still come back with the rendered image of every variation, so you can read them, just not search them as text. 50 of the 60 ads had at least one variation picture. 25 had one, 25 had two to four.

The search ads have real copy. One Polish ad reads "Oficjalna strona Nike" with the description "Odkryj {Keyword} online na Nike.com". That {Keyword} is a dynamic placeholder, published as is, so you can see they swap the search term into the copy. Google counts it as shown on 345 days, in 29 countries.

Dates. daysShown is Google's own count of days the ad was shown:

Ads
Last shown in the past week 60 of 60
Shown on 90 days or more 58
Shown on 365 days or more 27
Most days shown 1,792

The 1,792 is a shopping ad for a kids' Kobe V basketball shoe, in French, size 36.5. First shown 2021-10-25, last shown 2026-10-03, so Google counts 1,792 days shown in a 1,804 day window.

Countries: 33 of the 60 ads ran in one country, 18 of those in the US. The widest ran in 50. Across all 60, France and Italy show up most (24 ads each), then Spain and Germany (22), then the US (21).

The solution

I use my own Google Ads Transparency Center Scraper on Apify for this. You give it a domain, an advertiser name or an advertiser ID starting with AR. It returns one row per ad: the copy as text where Google publishes it, the rendered picture of every variation, the product title, photo and merchant for shopping ads, the YouTube link for video ads, and first and last shown dates overall and per country.

Rows with no usable content at all are delivered free with the reason. Every ad in this run had content, so all 60 were charged.

Quick start (3 minutes)

  1. Open the Google Ads Transparency Center Scraper and click Try for free.
  2. Type a domain in Website domains, for example nike.com. Leave region on anywhere and format on all, and set max ads to 60.
  3. Click Start, then open the Ads table or download CSV or JSON.

Code example

Node, using apify-client. Pulls the ads, counts picture only rows and prints the longest running ones:

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('agnes.developer.queen/google-ads-transparency-scraper').call({
    domains: ['nike.com'],
    region: 'anywhere',
    format: 'all',
    maxAdsPerAdvertiser: 60,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

const pictureOnly = items.filter((ad) => !ad.headline && ad.variations?.length);
console.log(`${pictureOnly.length} of ${items.length} ads have pictures but no text`);

const longest = [...items].sort((a, b) => b.daysShown - a.daysShown).slice(0, 5);
for (const ad of longest) {
    console.log(ad.daysShown, ad.adType, ad.headline ?? '(picture only)', ad.transparencyUrl);
}
Enter fullscreen mode Exit fullscreen mode

countries is a list with first and last shown dates per country. CSV spreads it over a column per country and field, so keep the JSON export if you need it.

Use cases

  • Competitor copy research. Every search headline and description a rival runs, and in which countries.
  • Swipe files. The rendered picture of every variation, without screenshotting anything.
  • Market checks. Set region to one country and see which of a competitor's ads run there.
  • Weekly monitoring. Turn on onlyNewSinceLastRun and later runs only return ads that are new since the last one.

Pricing

$0.0025 per ad, plus $0.00005 per run. 100 ads cost $0.25. My 60 Nike ads cost $0.15.

Rows without usable content are free. Apify gives every account $5 of free credit a month, which covers about 2,000 ads.

FAQ

Can I see how much Nike spends on Google Ads?

No. Google doesn't publish spend in the Transparency Center, so no scraper can return it.

Why do some text ads have no headline?

Google publishes those only as rendered pictures. You get the picture of every variation instead.

Does it get video ads?

Yes, when the advertiser runs them, with the YouTube link in videoUrl. This Nike sample just didn't have any.

Do I need a Google account?

No. The Transparency Center is public and nothing logs in.

Get started

Open the Google Ads Transparency Center Scraper, click Try for free and put in a competitor's domain.

Run on Apify

Do you need competitor ad copy as text, or are the rendered pictures enough for what you do?

Top comments (0)