Google Ads Transparency Scraper & API: Competitor Ads avatar

Google Ads Transparency Scraper & API: Competitor Ads

Pricing

from $0.60 / 1,000 ad creatives

Go to Apify Store
Google Ads Transparency Scraper & API: Competitor Ads

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

FriendlyAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

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 scrapersThis actor
What you hand itA Transparency Center advertiser URL you look up by hand firstA domain. nike.com
OutputA list of adsAn answer: launch velocity, what's working, what stopped
TimingWhatever is live right nowFirst-shown and last-shown per creative, so days running is exact
Competitive changeDiff it yourselfwatch_changes emits launched / stopped / resumed events
Affiliates on your brandInvisiblewho_advertises names every advertiser pointing ads at a domain
Rate limitsYour problemRotating 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

{"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.so and 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 basis field 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_code field 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:

EventWhen
ad_reportPer advertiser report produced
ad_creativePer creative returned in fetch_ads. No rounding. $0.90 per 1,000 ads on the free tier, falling to $0.60
advertiser_resolvedPer domain resolved in who_advertises (misses are free)
advertiser_watchedPer advertiser checked in a watch_changes run
ad_eventPer 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.