Google Ads Transparency Scraper — Competitor Ads Library
Pricing
from $2.00 / 1,000 job results
Google Ads Transparency Scraper — Competitor Ads Library
Google Ads Transparency scraper: see every ad a competitor runs on Google. Domains, brand terms or advertiser IDs in - advertiser, format, preview, first/last shown dates and days active out. Only-new-creatives mode turns a schedule into a competitor-ad alert.
Pricing
from $2.00 / 1,000 job results
Rating
0.0
(0)
Developer
Flash Scrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
See every ad a competitor runs on Google — Search, Display and YouTube — straight from Google's own Ads Transparency Center, the public accountability tool where every advertiser's creatives are listed. Give it a domain (nike.com), a brand term (nike — auto-resolved to its top advertiser domain) or an advertiser ID (AR…), and get one clean row per ad: advertiser, format, preview, first-shown and last-shown dates, and days active.
No API key, no login, no browser — the actor calls the same keyless endpoint the Transparency Center's own page uses, so the data is exactly what Google publishes, at the moment you run it.
Watching competitors on Facebook/Meta instead? The Ad Library niche is well covered on the Store — this actor is for the Google side, where fresh, honest tooling is scarce.
What you get
One row per ad creative. Measured on nike.com (100 rows, 2026-08-15):
| column | fill | notes |
|---|---|---|
advertiser_id, advertiser_name | 100% | e.g. AR18378488041124659201, "Nike Retail BV" — ads run by resellers/agencies for the same domain show up under their own advertiser |
domain | 100% | the advertiser's verified domain |
creative_id | 100% | Google's CR… id — stable, deduplicated |
format | 100% | text / image / video |
preview_url | 100% | archived screenshot for text ads, render URL for display/video |
first_shown, last_shown | 100% | real dates — the sample's last_shown was the run date itself |
days_active | 100% | how long the creative has been running — long-running ads are the ones making money |
transparency_url | 100% | the ad's own public page on Google's Transparency Center |
query | 100% | which of your targets produced the row |
Example row (real):
{"advertiser_id": "AR18378488041124659201","advertiser_name": "Nike Retail BV","domain": "nike.com","creative_id": "CR16074515335549550593","format": "image","preview_url": "https://tpc.googlesyndication.com/archive/simgad/3436141099225117854","first_shown": "2025-07-01","last_shown": "2026-08-15","days_active": 410,"transparency_url": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR16074515335549550593","query": "nike.com","source": "google-ads-transparency"}
Quick start
Run it with no input at all — you get up to 100 of Nike's current Google ads. Then point it at your own market:
{"queries": ["asics.com", "on-running.com", "hoka.com"],"activeWithinDays": 30,"maxItems": 300}
activeWithinDays: 30 is the filter that matters: it keeps only ads last shown in the past month — a competitor's currently running campaigns instead of a year of history. Long days_active + recent last_shown = the proven winners they keep paying for.
Input reference
| field | default | what it does |
|---|---|---|
queries | 1-domain sample | Domains (exact) or brand terms (auto-resolved via Google's own suggestions). Your list replaces the sample entirely. |
advertiserIds | [] | AR… ids — grab them from any run's rows to watch specific advertisers precisely. |
format | any | Keep only text, image or video ads. Applied before billing. |
activeWithinDays | 0 (off) | Keep only ads last shown within N days. Undated ads are kept, never guessed away. |
onlyNewCreatives | false | Competitor-ad alert mode — see below. |
maxItems | 100 | Total cap across all targets, split round-robin. Your cost ceiling. |
proxy | Apify Proxy | Google rate-limits this endpoint per IP (measured: ~15 rapid requests → 429). The default automatic proxy rotates to a fresh session on every rate-limit; your own proxy URLs are honored. |
Every filter runs before billing — a filtered ad is never charged.
🔔 Competitor-ad alerts: onlyNewCreatives + a schedule
Schedule the actor (daily or weekly) with onlyNewCreatives: true and the same targets:
- the first run is the baseline — it delivers everything and says so;
- every later run delivers only creatives not seen before — i.e. the competitor's new ads;
- a quiet run delivers nothing, bills nothing, and says "Nothing new" plainly.
A competitor launching new creatives is a competitor testing a new offer, product or angle — this is the cheapest way to hear about it first. Watch memory lives in a named key-value store (google-ads-monitor) in your own account, pruned automatically (90 days / 50k keys).
Use it from your code
// JavaScript — apify-clientconst { ApifyClient } = require('apify-client');const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('flash_scraper/google-ads-transparency-scraper').call({queries: ['nike.com'], activeWithinDays: 30, maxItems: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
# Python — apify-clientfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("flash_scraper/google-ads-transparency-scraper").call(run_input={"queries": ["nike.com"], "activeWithinDays": 30, "maxItems": 200})items = client.dataset(run["defaultDatasetId"]).list_items().items
# curl — run synchronously and get the dataset backcurl -X POST "https://api.apify.com/v2/acts/flash_scraper~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"queries": ["nike.com"], "maxItems": 50}'
n8n / Make / Zapier
All three have a native Apify node/module: pick Run actor → flash_scraper/google-ads-transparency-scraper, pass the JSON input above, and read the default dataset when the run finishes. onlyNewCreatives + a schedule trigger pipes every new competitor ad into Slack, a sheet or your CRM — and quiet days cost nothing.
Honest limits
- Google's data, Google's rules. The Transparency Center keeps roughly the last year of ads and doesn't expose spend or impressions per creative — nobody scraping it can. What you get is what Google publishes: the creatives, who ran them, and when they ran.
- No region filter yet. Results are worldwide for the advertiser;
first_shown/last_shown/days_activestill tell you what's actively running. - Ad text for text ads ships as an archived screenshot URL (
preview_url), not extracted copy — that is how Google serves them. - Brand-term resolution is best-effort (it uses Google's own suggestion service); the exact domain is always the reliable input.
- The endpoint rate-limits per IP; the default proxy handles it. Very large pulls simply take longer — pacing is deliberate.