Google Ads Transparency Scraper – Advertiser Ads avatar

Google Ads Transparency Scraper – Advertiser Ads

Pricing

from $0.50 / 1,000 ad returneds

Go to Apify Store
Google Ads Transparency Scraper – Advertiser Ads

Google Ads Transparency Scraper – Advertiser Ads

Scrape Google's Ads Transparency Center: every ad an advertiser or domain runs, with format, first and last shown dates, days shown, image or preview, a link to the ad and Google's ad count. Look up by name, domain or advertiser ID; filter by country, format and date. No login. Unofficial.

Pricing

from $0.50 / 1,000 ad returneds

Rating

0.0

(0)

Developer

Simple Actor

Simple Actor

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Scrape Google's Ads Transparency Center as structured data. Give it a website, an advertiser or a link from the Center, and every ad Google shows for it comes back as a row: the ad's format, when it was first and last shown, how many days it has run, a picture of the ad or its preview, the advertiser behind it and where they are based, and a link to the ad's own page — newest-shown first.

Built for competitor research, ad monitoring, agency pitches and brand safety: see what a competitor is running right now, what they launched this month, and which countries each ad reached.

No login, no API key, no browser, no account of yours involved. A hundred ads arrive in one request.

$0.50 per 1,000 ads — $0.05 for a typical 100-ad lookup. Apify platform usage included, nothing else to pay. A line that cannot be looked up is never charged.

Unofficial. Not affiliated with, endorsed by, or sponsored by Google.

Features

  • Look up anything you have — a website (nike.com, or any link to it), an advertiser ID (AR16735076323512287233), an advertiser name (Nike), or a link copied from the Transparency Center.
  • A website finds every advertiser behind it — a brand's own accounts, its regional entities and its agencies. nike.com returns ads from 30-odd advertisers.
  • Google's own count on every rowgoogleAdCountMin/googleAdCountMax say how many ads Google holds for the lookup, so you can see how complete your pull is before asking for all of them.
  • Country filter, or anywhere — ads shown in one country, or in any.
  • Format filter — text, image or video ads only.
  • Date windows that workshownSince for what is running now, firstShownSince for what was launched recently. Both are applied exactly on each ad's own dates.
  • Where each ad ran — optional per-ad list of every country it was shown in, with the last date it ran there, and its number of variations.
  • The advertiser's country on every ad row, not only in a separate lookup.
  • Runs stay green. A line that cannot be looked up becomes an error row, so one bad line never costs the rest of the job.

Input

{
"targets": ["nike.com", "AR16735076323512287233", "Nike"], // one per line
"maxAds": 100, // ads per line, newest-shown first (up to 50,000)
"region": "anywhere", // a two-letter country code, or anywhere
"adFormat": "any", // any | text | image | video
"shownSince": "30 days", // optional: only ads shown in this window
"firstShownSince": "", // optional: only ads first shown in this window
"includeAdDetails": false // add the countries each ad ran in
}
FieldTypeDefaultWhat it does
targetsarrayWebsites (or links to them), advertiser IDs, advertiser names, or Transparency Center links, one per line.
maxAdsinteger100Ads per line, up to 50,000. A hundred arrive per request.
regionstringanywhereTwo-letter country code (US, GB, DE…), or anywhere.
adFormatstringanytext, image or video.
shownSincestringOnly ads shown on or after this date: 2026-08-01, or a window like 30 days.
firstShownSincestringOnly ads first shown on or after this date — new ads.
includeAdDetailsbooleanfalseAdd each country the ad ran in, with its last date there, and its variation count. One extra request per ad.

Website, advertiser or name?

  • A website (nike.com) is the widest net and the right choice for a brand: it finds every advertiser whose ads point at that site, agencies included.
  • An advertiser ID (AR…, from an advertiser's page in the Center) is exact: one account's ads.
  • A name (Nike) is looked up among Google's suggestions, and the matching advertiser with the most ads is used — Nike means Nike, Inc., not the one-ad account called "Nike". Every row names the advertiser, so you can see which one was used.
  • A pasted link keeps its own country, because it is the view you were looking at.

How many ads

Ads come a hundred per request, newest-shown first, and every row carries Google's own count for the lookup. Big brands hold thousands; maxAds decides how far to read. shownSince stops reading as soon as older ads begin, so "what are they running this month" is fast even for a brand with 10,000 ads.

Output

One item per ad, in the run's dataset:

{
"type": "ad",
"position": 1,
"adId": "CR03243835622955155457",
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"advertiserCountry": "US",
"format": "text",
"firstShown": "2022-11-30T14:48:56.165Z",
"lastShown": "2026-09-11T00:28:36.454Z",
"daysShown": 1371,
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/5268894407758702852",
"imageWidth": 348,
"imageHeight": 275,
"previewUrl": null,
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR03243835622955155457?region=anywhere",
"domain": null,
"regions": null,
"variations": null,
"googleAdCountMin": 7000,
"googleAdCountMax": 8000,
"target": "AR16735076323512287233",
"targetType": "advertiser",
"region": "anywhere",
"retrievedAt": "2026-09-11T08:00:00.000Z"
}
FieldWhat it is
adId, advertiserIdGoogle's IDs for the ad and the advertiser — stable, for deduplicating across runs.
advertiserName, advertiserCountryWho runs the ad, and the country they are based in.
formattext, image or video.
firstShown, lastShown, daysShownWhen Google first and last showed the ad, and for how many days. lastShown is today for an ad still running.
imageUrl, imageWidth, imageHeightA picture of the ad as Google archived it — how Google keeps nearly every text ad.
previewUrlGoogle's preview script that renders the ad, for video ads and ads without a picture.
adUrlThe ad's page in the Transparency Center.
domainOn a website lookup, the site Google files the ad under.
regions, variationsWith includeAdDetails: each country the ad ran in with its last date there, and how many variations it has.
googleAdCountMin, googleAdCountMaxGoogle's own count of ads for this lookup, as the range it states.
positionThe ad's place in Google's newest-shown-first order. With a date filter, skipped ads leave gaps.
target, targetType, regionThe line it answered, how that line was read, and the country it was limited to.

A line that could not be looked up is its own row with type: "error", an error code (bad_input, not_found or read_failed) and an errorDescription. The run itself stays green either way, and its status message says how many lines could not be looked up — so if you run on a schedule, check for type: "error" rows rather than trusting the run status.

An empty dataset means every line was looked up and Google shows no ads for it. An advertiser ID that does not exist comes back as a not_found row, not as silence.

How to use

From Apify Console

  1. Open the Actor and click Try for free / Start.
  2. Put one website, advertiser ID or name per line into Advertisers or websites. For a brand, the website finds the most.
  3. Set Ads per advertiser or website. Every row shows Google's own count, so a first run of 100 tells you how many there are.
  4. Optionally narrow by Country, Format, or a date window.
  5. Click Start, then open the Dataset tab — the Ads view shows a picture of each — and export as JSON, CSV or Excel.

From the API

curl -s "https://api.apify.com/v2/acts/simple.actor~google-ads-transparency/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"targets": ["nike.com"], "shownSince": "30 days", "maxAds": 200}'

Monitoring a competitor's new ads with the JavaScript client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('simple.actor/google-ads-transparency').call({
targets: ['competitor.com'],
firstShownSince: '7 days',
maxAds: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
// Deduplicate across scheduled runs on `adId`, which is stable.

Use cases

  • Competitor research — everything a rival is running, by format and country, with how long each ad has lasted.
  • New-ad monitoring — a weekly run with firstShownSince catches every ad a competitor launches.
  • Agency pitches and audits — pull a prospect's full ad history before the meeting.
  • Brand safety — find advertisers running ads that point at your domain.
  • Market mapping — which advertisers and agencies are active in a category, and where.

Pricing

Simple pay-per-result pricing — no subscription and no start fee.

EventPrice
Ad returned$0.0005
Ad details added (countries it ran in, variations)$0.0005

What that comes to:

  • A lookup at the default depth, 100 ads: $0.05.
  • 1,000 ads: $0.50 — or $1.00 with details on.
  • A big brand's whole list, around 8,000 ads: about $4.

Error rows are never charged, and a lookup Google has no ads for costs nothing.

Limits worth knowing

  • Most text ads are pictures. Google archives text ads as an image of the ad, so their words come as a picture (imageUrl), not as text.
  • No platform filter. The Center does not reliably filter by Search, YouTube, Shopping or Maps, so it is not offered.
  • Political ads are not covered. They live in a separate part of the Center.
  • Google's count is a range ("8,000–9,000"), as the Center itself shows it.

FAQ

Is scraping the Google Ads Transparency Center legal? The Center is a public transparency tool Google publishes so anyone can see who is advertising and what. This Actor reads the same data the Center's own page loads. Check the platform's terms and your own use before relying on it.

Do I need a Google account, cookies or an API key? No. There is no login, no cookie and no key.

Why did a name give me a different advertiser than I expected? A name is matched among Google's suggestions and the matching advertiser with the most ads is used. Every row names the advertiser; for an exact account, use its advertiser ID from the Center, and for a whole brand, its website.

How do I know a lookup failed if the run stays green? Check for rows with type: "error" — that is the failure channel by design, so one bad line never costs the rest of the job. The run's status message also counts how many lines could not be looked up.

Data comes from Google's Ads Transparency Center and is subject to Google's terms. Unofficial, and not affiliated with Google.