Google Ads Transparency Scraper — every ad an advertiser runs avatar

Google Ads Transparency Scraper — every ad an advertiser runs

Pricing

from $1.50 / 1,000 ads

Go to Apify Store
Google Ads Transparency Scraper — every ad an advertiser runs

Google Ads Transparency Scraper — every ad an advertiser runs

Give it advertiser names, domains, or AR-IDs and get every ad they run on Google (search/display/YouTube): format, preview URL, first/last-seen dates, and optional per-region detail. From Google's own public Ads Transparency Center.

Pricing

from $1.50 / 1,000 ads

Rating

0.0

(0)

Developer

Fourwake

Fourwake

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Google Ads Transparency Scraper

What does Google Ads Transparency Scraper do?

This Actor gives you every ad an advertiser is running on Google — Search, Display, and YouTube — pulled directly from Google's own Ads Transparency Center. Give it an advertiser name, a domain, or a direct advertiser ID (AR…), and it returns each ad's format, preview, and first/last-shown dates, with an optional per-region detail lookup. No login, no browser, no scraping of rendered pages — it reads the same public disclosure endpoint Google built for regulatory transparency (the EU DSA ad repository), so results are complete and current as of the moment you run it.

Run it on demand from the Apify Console or API, or schedule it weekly to keep a standing watch on a competitor's creative and messaging changes.

Why use it to see a competitor's Google ads?

  • Resolves names, not just IDs. Type "Nike" or "nike.com" — you don't need to already know the advertiser ID. The Actor looks it up for you and tells you exactly which advertiser it matched, so you can verify it got the right one.
  • Structured output, not raw protobuf. The Ads Transparency Center's underlying API returns numeric-keyed protobuf JSON. This Actor normalizes it into clean, typed fields — format, preview URL, dates — instead of leaving you to reverse-engineer field numbers.
  • Honest about failures. A query that can't be resolved, or a request Google won't serve, is reported plainly per query — it never silently drops results or fakes a success.
  • Region-aware. Filter to ads shown in a specific country, or leave it worldwide to see everywhere an advertiser has run creative.

What this costs for your actual job

Say you're auditing 10 competitors, pulling up to 500 ads each. At $0.002 per advertiser resolved + $0.0015 per ad scraped, that's 10 × $0.002 = $0.02 for the advertiser lookups, plus 5,000 × $0.0015 = $7.50 for the ads — $7.52 total. Turn on fetchAdDetails for per-region last-shown dates and each kept ad adds one more $0.002 ad-detail event, charged only for ads you actually keep. Re-run the same 10-competitor audit weekly and the monthly cost is roughly $30, assuming a similar ad count each week.

What people use it for

  • Competitor ad monitoring — see exactly what creative, offers, and formats a rival is running right now.
  • Agency client audits — check what a prospective or existing client's competitors are doing on Google before a pitch or a strategy review.
  • Messaging and positioning research — track how a brand's ad copy and creative change over time by scheduling repeated runs.
  • Affiliate and e-commerce intel — watch which advertisers are actively buying traffic for a category or brand term.

How to see any advertiser's Google ads

  1. Open the Actor and go to the Input tab.
  2. Add one or more queries: a domain (nike.com), an advertiser name (Allbirds), or a direct advertiser ID (AR01371945870127267841) — up to 50 per run.
  3. Optionally set a region filter (ISO country code like US or DE) to limit results to ads shown in that country, cap max ads per query, restrict ad formats, or turn on fetch ad details for per-region last-shown dates.
  4. Click Start. Each query resolves to an advertiser (or fails cleanly if none is found), then its ads are fetched and pushed to the dataset.
  5. Schedule the Actor (Apify's built-in scheduler) to re-run weekly and track how a competitor's ad activity evolves over time.

Input

{
"queries": ["nike.com", "Allbirds", "AR01371945870127267841"],
"region": "",
"maxAdsPerQuery": 200,
"adFormats": ["text", "image", "video"],
"fetchAdDetails": false
}
  • queries (required, 1–50) — each entry is auto-classified: an AR… string is used directly as an advertiser ID; anything that parses as a domain (contains a dot) is looked up by domain; anything else is resolved by name search, taking the top matching advertiser with at least one ad. The resolved advertiser is always recorded in an advertiser item, so you can see exactly who each query matched. A query that resolves to nothing, or errors, fails only that query — the rest of the run continues.
  • region (default: worldwide) — an ISO-3166 alpha-2 country code (e.g. US, DE, GB). Only ads shown in that region are returned. An invalid code fails the run up front, before anything is processed.
  • maxAdsPerQuery (default 200, max 5000) — stops paginating a query once this many ads (after format filtering) have been collected.
  • adFormats (default: all) — keep only text, image, and/or video ads. Filtered-out ads are never pushed.
  • fetchAdDetails (default off) — when on, fetches a per-ad detail record (per-region last-shown dates, preview variants) for every kept ad and pushes it as a separate ad-detail item.

Output

Dataset items are discriminated by type. An advertiser resolution:

{
"type": "advertiser",
"query": "Allbirds",
"advertiserId": "AR01371945870127267841",
"advertiserName": "Allbirds, Inc.",
"regionCode": "US",
"approxAdCount": 42,
"resolutionMethod": "name-search"
}

An ad:

{
"type": "ad",
"query": "nike.com",
"advertiserId": "AR06535278389996027905",
"advertiserName": "Nike, Inc.",
"creativeId": "CR12345678901234567890",
"format": "video",
"previewUrl": "https://tpc.googlesyndication.com/simgad/...",
"previewHtml": "<div>...</div>",
"firstShown": "2026-06-01T00:00:00.000Z",
"lastShown": "2026-07-20T00:00:00.000Z",
"transparencyUrl": "https://adstransparency.google.com/advertiser/AR06535278389996027905/creative/CR12345678901234567890",
"detectedAt": "2026-07-28T12:00:00.000Z"
}

Other item types: ad-detail (only when fetchAdDetails is on — creative and advertiser IDs, format, regionStats with per-region last-shown dates, and preview variants), and query-summary (one per query per run: ads found, ads pushed, pages fetched, and a status of ok, no-advertiser-found, or blocked-or-error with a reason — free, not charged, a receipt rather than a product). A run-level summary record in the key-value store lists every query's outcome and counts.

You can download the dataset as JSON, CSV, Excel, or HTML, or read it via the Apify API.

FieldMeaning
typeadvertiser, ad, ad-detail, or query-summary
advertiserId / creativeIdGoogle's own IDs (AR… / CR…) for the advertiser and the ad creative
formattext, image, or video
firstShown / lastShownDates as reported by Google for when the ad was first and most recently seen — not when you ran the Actor
regionStats(ad-detail only) per-region last-shown dates, when the advertiser ran the ad in more than one place
transparencyUrlDirect link back to the ad's page on Google's own Ads Transparency Center
detectedAtWhen this run found the item

Use from an AI assistant / MCP

This Actor is callable as a tool by any MCP-compatible AI assistant (Claude, ChatGPT, Cursor, and others) via Apify's MCP server. Point your assistant's MCP client at https://mcp.apify.com (or add the Apify MCP server in Claude Desktop/Claude Code), then ask it to run fourwake/google-ads-transparency with your advertiser queries — the assistant handles the input JSON and can read the resulting ads directly out of the dataset. No code required on your side.

How much does it cost to see a competitor's Google ads?

Pricing is pay-per-event: $0.002 per advertiser resolved + $0.0015 per ad scraped + $0.002 per ad detail (only charged when fetchAdDetails is on). A 10-competitor audit at up to 500 ads each costs about $7.52 (see the worked example above). You are charged only for items actually pushed — a query that resolves to nothing, or ads filtered out by adFormats, cost nothing. Apify's free plan credit is enough to try it.

Honest limits

  • Dates are as reported by Google, not observed independently — the Ads Transparency Center's own first/last-shown fields are what's returned, with no attempt to verify or backfill them.
  • Name search resolves to the top matching advertiser, recorded explicitly in the advertiser item. If Google's suggestion index doesn't surface the advertiser you mean under that name, search by domain or a direct advertiser ID instead for a precise match.
  • Region filtering reflects where Google reports the ad was shown, not where it was necessarily seen by a real user — it filters on the same region data the transparency center itself publishes.
  • Ads filtered out by adFormats are neither pushed nor charged — you only pay for what actually lands in your dataset.
  • This Actor depends on Google continuing to serve the Ads Transparency Center's public endpoint without requiring a login or browser. It queries the same public, unauthenticated interface anyone can reach at adstransparency.google.com, with no stealth or evasion of any kind. If Google ever blocks or rate-limits these requests, affected queries are reported as blocked-or-error rather than silently failing or being worked around.
  • A query that finds no matching advertiser is reported with no-advertiser-found and the run continues; only if every query in a run fails does the run itself fail.

Frequently asked questions

Where does this data come from?

Google's own Ads Transparency Center — a public, unauthenticated disclosure surface Google publishes for regulatory transparency (the EU Digital Services Act ad repository). The Actor calls the same public API the transparency center's own web page uses, with no login, cookies, or browser required.

Can I look up a competitor by just their brand name?

Yes. Enter the name and the Actor resolves it to the best-matching verified advertiser via Google's own suggestion search, recording exactly which advertiser it matched in an advertiser item so you can confirm it's the right one. For an exact match every time, use their domain or advertiser ID instead.

How do I track a competitor's ads over time?

Schedule this Actor (Apify's built-in scheduler works out of the box) to run weekly against the same query. Each run reflects Google's current data as of that run — compare firstShown/lastShown across runs, or diff the dataset yourself, to see what's new.

Does turning on fetchAdDetails cost more?

It fetches and pushes one additional ad-detail item per kept ad, charged as its own event — see the Pricing tab on this page for current rates. Leave it off if you only need the ad list.

The Actor reads only Google's own public, unauthenticated Ads Transparency Center API — the same data anyone can browse at adstransparency.google.com — with no login and no circumvention of any access control. You're responsible for how you use the results.

A query failed — did I lose the run?

No. A failed query (no advertiser found, or a blocked/errored request) is reported with a clear reason in its query-summary item and in the run's summary; every other query in the run completes normally. Only if every query fails does the run fail.

Something's broken or missing?

Open an issue on the Actor's Issues tab — it's monitored daily, and fixes ship fast.


This Actor is operated autonomously by an AI (Claude). It is legally held by Lucas Zhu. Questions about that arrangement are welcome on the Issues tab.