Google Ads Transparency Scraper & API: Competitor Ads
Pricing
from $0.60 / 1,000 ad creatives
Google Ads Transparency Scraper & API: Competitor Ads
Competitor domains in, Google ad intelligence out: every creative with first-shown and last-shown dates, a report on what they just launched and what has run long enough to be working, which affiliates bid on their domain, and a feed of ads launched, stopped or resumed since your last run.
Pricing
from $0.60 / 1,000 ad creatives
Rating
0.0
(0)
Developer
FriendlyAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
Google Ads Transparency Scraper & API: competitor ads, and what changed
Give it competitor domains. It reads Google's Ads Transparency Center, the public repository Google is required to publish, and returns their live ad creatives with first-shown and last-shown dates, a report on what they just launched and what has been running long enough to obviously be working, who else is bidding on their domain, and a change feed of ads launched, stopped and resumed since your last run.
No login, no cookies, no personal data. The subjects are advertisers, which are businesses, and ad creative, which is public commercial communication.
Why this instead of the other ad scrapers
| Ad scrapers | This actor | |
|---|---|---|
| What you hand it | A Transparency Center advertiser URL you look up by hand first | A domain. nike.com |
| Output | A list of ads | An answer: launch velocity, what's working, what stopped |
| Timing | Whatever is live right now | First-shown and last-shown per creative, so days running is exact |
| Competitive change | Diff it yourself | watch_changes emits launched / stopped / resumed events |
| Affiliates on your brand | Invisible | who_advertises names every advertiser pointing ads at a domain |
| Rate limits | Your problem | Rotating proxy session per request, handled |
Start with the first row, because it is the one that costs you an
afternoon. The other Transparency Center scrapers take a URL of the form
adstransparency.google.com/advertiser/AR<id>/..., which means that before you
can run anything you have to open Google yourself, search the brand, work out
which of the results is the right company, and copy the address bar. Do that
for a list of fifty competitors and you have spent a morning on data entry.
It is worse than tedious, because a domain is not an advertiser. nike.com carries eight separate advertiser accounts. notion.so's only advertiser is a company in Malaysia. When several accounts share a name there is no correct one to pick, which is why the manual instructions for those tools tell you to give up on that case. This actor resolves every advertiser behind a domain and returns all of them, and that ambiguity is not an edge case to route around, it is the finding: it is how you catch affiliates bidding on your brand.
The insight this is built on: a marketer's daily question is not "show me Nike's ads". It is "who started spending on something new this week". That is a change feed, and nobody in this category ships one.
The four modes
1. ad_report (recommended): a competitor's whole posture in one object
{"mode": "ad_report", "domains": ["hubspot.com", "nike.com"]}
Returns, per domain:
{"advertiser_domain": "hubspot.com","advertisers_on_this_domain": 3,"largest_advertiser_name": "Hubspot, Inc.","largest_advertiser_share": 0.88,"creatives_total": 51,"creatives_running": 19,"creatives_stopped": 32,"by_format": {"image": 51},"launched_last_7d": 0,"launched_last_30d": 0,"launched_prior_30d": 0,"newest_creative_at": "2026-03-18T23:45:39Z","median_lifespan_days_retired": 230,"median_age_days_running": 411,"max_region_count": 1509,"longest_running": ["...top 5 with links..."],"most_recent_launches": ["...top 5 with links..."],"signals": ["still serving ads but has not launched a new creative in 90 days","18 creatives have been running for 6 months or more, which usually means they work"]}
Those signals are the product. They are plain-English readings of the
numbers directly above them, so you can always check the working.
2. watch_changes: only what moved
{"mode": "watch_changes", "watch_id": "my-competitors","domains": ["hubspot.com", "salesforce.com", "pipedrive.com"]}
First run sets a baseline silently. Every later run emits only events:
{"event": "launched", "advertiser": "pipedrive.com", "creative_id": "CR07...","first_shown_at": "2026-08-09T04:12:00Z", "format": "image","transparency_url": "https://adstransparency.google.com/advertiser/AR.../creative/CR..."}{"event": "stopped", "advertiser": "hubspot.com", "days_running": 412}{"event": "resumed", "advertiser": "salesforce.com", "creative_id": "CR11..."}
Schedule it daily and you have a competitive alerting system.
Two honesty rules are built in. If Google rate-limits or errors during a
run, that advertiser emits no events and keeps its baseline, and the
failure is named in fetch_errors; an outage will never be reported to you
as "they killed all their ads". And because last_shown_at advances every
day for every live ad, it is deliberately excluded from change detection, so
an unchanged account is silent instead of alerting you every morning.
3. who_advertises: who is bidding on this domain
{"mode": "who_advertises", "domains": ["nike.com"]}
A domain is not an advertiser. nike.com's 130 creatives come from 8 different advertisers: Nike Retail BV holds 63%, and the rest are Nike Japan, media agencies and affiliates. This mode names all of them, which is how brand-bidding and affiliate abuse get caught.
4. fetch_ads: every creative as rows
{"mode": "fetch_ads", "domains": ["shopify.com"], "running_only": true,"max_ads_per_domain": 200}
One row per creative with the image or preview URL, dimensions, format, first/last shown, days running, region count and a link to the ad in Google's own Transparency Center.
What we will tell you that others will not
- A domain is not an advertiser. Every response reports how many distinct
advertisers run ads to the queried domain and what share the biggest holds.
Query
notion.soand you get a Malaysian company that is not Notion; we say so instead of labelling it "Notion's advertising". - We never claim spend. Google's library publishes when a creative was
first and last served, not what it cost. Every number here is derived from
those two dates, and the
basisfield on every report says so. - Absent means absent. A domain with no ads returns "no ads in the Ads Transparency Center", not an empty object dressed up as a result.
- Failures are named. Rate limits and errors appear per domain, so "they run no ads" and "we could not check" stay different answers.
Coverage and limits, stated plainly
- Source: Google Ads Transparency Center. This covers Google Search, Display, YouTube and Shopping ads. It does not cover Meta, TikTok or LinkedIn.
- What the library publishes: advertiser identity, creative, format, first and last shown dates, and a region count. Not spend, not impressions, not targeting.
- Region: the default returns worldwide results. The
region_codefield is an advanced passthrough; we deliberately do not publish a guessed code-to-country mapping, because a wrong one would silently narrow your results without telling you. - Rate limits are real. Google limits hard by IP, so this actor rotates a proxy session per request. Leave the proxy setting on.
- Domains per run: 200 for reports and ads, 500 for watching.
Pricing
Pay per event, no subscription:
| Event | When |
|---|---|
ad_report | Per advertiser report produced |
ad_creative | Per creative returned in fetch_ads. No rounding. $0.90 per 1,000 ads on the free tier, falling to $0.60 |
advertiser_resolved | Per domain resolved in who_advertises (misses are free) |
advertiser_watched | Per advertiser checked in a watch_changes run |
ad_event | Per launched / stopped / resumed event emitted |
A daily watch on 20 competitors is 20 advertiser_watched per day plus the
handful of real events. Dedicated ad-intelligence suites charge $49 to $249 a
month flat.
Not affiliated with or endorsed by Google. Reads only the public, unauthenticated Ads Transparency Center, which Google publishes for exactly this purpose. All trademarks belong to their owners.