Skip to content

About

Google Ads Transparency Center API: every ad of an advertiser or domain with creative, format, regions and first/last shown dates. Docs, examples and schemas for the Apify Actor.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Google Ads Transparency Scraper: Ads by Advertiser or Domain

▶ Run it on Apify · API docs · Input schema · Output schema · Changelog

See every ad an advertiser runs on Google — Search, YouTube, Display, Shopping, Maps and Play — straight from the public Google Ads Transparency Center. Type a website (nike.com), an advertiser name (Nike), an advertiser ID (AR…) or paste a Transparency Center link, filter by country, format and dates, and get one clean row per ad:

  • advertiser, format (text, image, video), first and last shown, days shown
  • the ad image (Google archives most text and image ads as a picture of the ad) and the ad preview
  • for responsive display ads: headline, description, call to action, logo, image and landing page
  • for Shopping ads: the product title
  • optional: every country the ad ran in, with dates, and the ad's category

Perfect for competitor research, ad copy and creative inspiration, spotting new campaigns early (schedule it with Shown in the last N days) and checking which landing pages competitors push.

Quick start

Create a free Apify account, copy your API token from Console → Settings → Integrations and export it:

export APIFY_TOKEN="<your Apify API token>"

Python

pip install -U apify-client   # version 3 or newer
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

# maxAdsPerSearch keeps this demo small — remove it to get everything.
run = client.actor("sports-odds-lab/google-ads-transparency").call(run_input={
    "searches": ["nike.com"],
    "maxAdsPerSearch": 5,
})
items = client.dataset(run.default_dataset_id).list_items().items

for a in items:
    print(a["advertiserName"], "|", a["format"], "|", (a.get("headline") or "")[:50], "|", a["firstShown"][:10])

Full script: examples/quickstart.py.

JavaScript / Node.js

npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

// maxAdsPerSearch keeps this demo small — remove it to get everything.
const run = await client.actor('sports-odds-lab/google-ads-transparency').call({
  searches: ['nike.com'],
  maxAdsPerSearch: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

for (const a of items) {
  console.log(a.advertiserName, '|', a.format, '|', (a.headline ?? '').slice(0, 50), '|', a.firstShown.slice(0, 10));
}

Save it as quickstart.mjs (ES modules) — full script: examples/quickstart.mjs.

cURL

curl -s -X POST "https://api.apify.com/v2/acts/sports-odds-lab~google-ads-transparency/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d @examples/input.json

run-sync-get-dataset-items waits for the run (up to 5 minutes). For long runs start the Actor asynchronously and poll it — see the Apify API docs.

AI agents (MCP)

Expose the Actor as a tool to any MCP client (Claude, Cursor, VS Code…) through the Apify MCP server:

{
  "mcpServers": {
    "google-ads-transparency": {
      "url": "https://mcp.apify.com?tools=sports-odds-lab/google-ads-transparency"
    }
  }
}

Sign in with your Apify account when the client asks; the agent then calls the Actor with the same input fields as above.

What you get — one row per ad

Field Example
advertiserName, advertiserId, domain Nike Retail BV, AR18378488041124659201, nike.com
creativeId, format CR11529870939114176513, text / image / video
firstShown, lastShown, daysShown 2021-10-25, 2026-09-30, 1620
imageUrl, imageWidth, imageHeight the ad as Google archived it
headline, description, callToAction "Découvrez des maisons, des hôtels, etc.", "Un Service Clients disponible 24h/24…", "Réserver"
displayUrl, landingUrl booking.com, http://www.booking.com/index.html?aid=2395786
logoUrl, productTitle, html5BundleUrl logo, "Nike Zoom Fly 6 Men's Road-Racing Trainers…", HTML5 ad bundle
previewUrl, adUrl Google's ad preview, the ad's page in the Transparency Center
regions, category [{"countryCode": "PL", "country": "Poland", "firstShown": "2023-04-09", "lastShown": "2023-04-09"}, …], "Apparel & Accessories"

The per-search summary (key-value store record SUMMARY) shows how many ads were saved and Google's estimate of all matching ads for every search.

Using the Apify Console (no code)

  1. Add advertisers or websites — one per line: nike.com, Nike, AR06641858037806006273 or https://adstransparency.google.com/advertiser/AR…?region=US.
  2. Optionally filter by country, ad format and dates (Shown in the last N days, or a date range).
  3. Click Start, then download JSON, CSV or Excel, or read the dataset through the Apify API.

A website returns the ads of every advertiser that promotes it (Nike runs ads through several legal entities); a name picks the best-matching verified advertiser — or all of them with Advertiser names: All matching.

Input example — a competitor's ads in the US from the last 30 days

{
  "searches": ["booking.com"],
  "region": "US",
  "lastDays": 30,
  "maxAdsPerSearch": 500
}

Input example — all video ads of several brands, with the countries they ran in

{
  "searches": ["nike.com", "adidas.com", "puma.com"],
  "adFormat": "video",
  "includeRegions": true
}

Output example (a real row, shortened)

{
  "advertiserName": "Booking.com",
  "domain": "booking.com",
  "creativeId": "CR04173554866964135937",
  "format": "text",
  "firstShown": "2026-08-27T05:50:16Z",
  "lastShown": "2026-09-30T13:21:34Z",
  "daysShown": 36,
  "headline": "Découvrez des maisons, des hôtels, etc.",
  "description": "Un Service Clients disponible 24h/24 et 7j/7, où que vous soyez.",
  "callToAction": "Réserver",
  "displayUrl": "booking.com",
  "landingUrl": "http://www.booking.com/index.html?aid=2395786",
  "imageUrl": "https://tpc.googlesyndication.com/simgad/13487100057649545191",
  "adUrl": "https://adstransparency.google.com/advertiser/AR02934798844673654785/creative/CR04173554866964135937?region=anywhere"
}

Speed and limits

About 40 ads per request, most recently shown first — a few hundred ads a minute. Google limits how many requests one IP may send; with Apify Proxy (on by default) the Actor moves to a fresh IP whenever that happens and continues from the same page, so long runs do not stop. Countries of each ad costs one more request per ad — turn it on when you need it.

Pricing

The Actor is pay-per-result: you pay for the rows it saves, platform usage included, nothing else. The current price per 1,000 results is on the Actor page; Apify's free plan includes monthly platform credit, so you can try real data before paying. Set a spending limit on a run for a hard cap — the Actor stops as soon as the limit is reached.

FAQ

What is "days shown"? The number of days Google reports the ad as shown. Long-running ads are usually the ones that work.

Why do some ads have only an image? Google's Transparency Center archives most text and image ads as a picture of the ad — you get that image. For responsive display and Shopping ads the Actor also reads the headline, description, product and landing page from the ad's preview.

What about video ads? You get the advertiser, dates and a link to the ad's preview and Transparency Center page.

Which countries? Every country Google lists in the Transparency Center; "Anywhere" searches all of them.

Where does the data come from? From the public Google Ads Transparency Center (adstransparency.google.com), which Google publishes so anyone can see who advertises and what. This Actor is not affiliated with Google.

Related

  • ⚽ Football Odds API — every football match from 1,000+ competitions: opening and closing odds from up to 42 bookmakers, no-vig consensus, xG, goal events — full seasons back to 2005
  • 🎾 Tennis Odds & Scores API — every ATP, WTA, Challenger and ITF match: live scores, results, rankings and odds from up to 42 bookmakers back to 2009
  • 🏀 NBA, NFL, MLB & NHL Odds API — moneyline, spread and total odds — opening and closing — from up to 42 bookmakers, no-vig consensus and box-score stats; full seasons back to 2009
  • 📊 Polymarket & Kalshi API — prediction-market odds, volume, price history and resolutions of both platforms in one table, with the full Kalshi archive
  • ⏱️ Flashscore Scraper API (24 sports) — live scores, results and odds of football, basketball, hockey, tennis, volleyball, handball, esports, MMA, cricket, darts and more
  • 🏟️ ESPN Box Scores & Player Stats API — box scores and player stats for the NFL, NBA, MLB, NHL, college sports and soccer leagues — one row per player per game, or one row per game
  • 💼 ATS Jobs API (Greenhouse, Lever, Ashby, Workday…) — open jobs straight from company career sites on 11 applicant tracking systems — by company name or URL, or search a directory of 15,000+ companies

All tools: apify.com/sports-odds-lab · GitHub: github.com/minmaxerdev

License

Documentation and example code in this repository are MIT-licensed. The Actor itself runs on Apify under Apify's terms; the data comes from publicly available sources and the Actor is not affiliated with them (see the FAQ).

About

Google Ads Transparency Center API: every ad of an advertiser or domain with creative, format, regions and first/last shown dates. Docs, examples and schemas for the Apify Actor.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors