Google Ads Transparency Center Advertiser Ads Scraper
Pricing
from $1.50 / 1,000 ad creatives
Google Ads Transparency Center Advertiser Ads Scraper
Pulls every publicly listed ad creative for a Google advertiser (by domain or name) from the Ads Transparency Center: format, first/last shown dates, regions shown, preview URL and ad text when Google exposes it. No login needed.
Pricing
from $1.50 / 1,000 ad creatives
Rating
0.0
(0)
Developer
Salman Bareesh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
What does Google Ads Transparency Center Advertiser Ads Scraper do?
This actor pulls every publicly listed ad creative for a Google advertiser straight from
Google's Ads Transparency Center - the tool Google itself
runs so anyone can see the ads a given advertiser is currently running (or has run) across Search,
Display, YouTube and Shopping. Give it an advertiser domain (e.g. nike.com) or an
advertiser name, and it returns one row per ad: format, when it first/last ran, which countries
it ran in, a link to the ad on Google's own transparency page, and the ad's headline/description
text when Google exposes it. Think of it as a Google Ads API alternative for competitor and lead
research - no Google Ads account, no login, and no access to the advertiser's real account data
required, because none of this is private: it is exactly what adstransparency.google.com already
shows the public.
Why use this scraper?
- Competitor research - see what ad creative, messaging and formats a competitor is actively running, in which countries, and how long a campaign has been live.
- Lead / prospecting research - check whether a prospect is running paid ads at all (a signal for ad-budget and marketing maturity) before a sales outreach.
- Creative monitoring - track when a competitor launches or refreshes a creative.
- Runs on Apify's schedule, API and integrations, so you can re-check the same advertisers weekly or monthly without touching a browser.
What data can it extract?
| Field | Description |
|---|---|
advertiserId / advertiserName | Google's internal advertiser ID and display name |
advertiserDomain | Advertiser's verified website domain, when Google shows one |
creativeId | Google's ID for this specific ad creative |
format | Best-effort TEXT / IMAGE / VIDEO classification (see Limits) |
regions | Two-letter country codes the ad has run in |
firstShown / lastShown | Date range the ad has been observed running |
adDetailUrl | Link to the ad on adstransparency.google.com |
creativePreviewUrl | Direct image URL, or Google's ad-preview render URL |
adHeadline / adDescription | Ad copy, when Google's preview data exposes it |
How to find a competitor's Google ads
- Open the actor's Input tab.
- Add the competitor's website domain (e.g.
nike.com) under Advertiser domains, or their company name under Advertiser names if you don't know the domain. - Optionally narrow by region (two-letter country code), a date range, or ad formats.
- Run the actor. Each ad becomes one row in the dataset, downloadable as JSON, CSV, Excel or HTML.
How much will it cost?
This actor is free to use and charges $0.002 per ad returned (Apify Store subscription tiers lower this further: Bronze $0.0018, Silver $0.0016, Gold/Platinum/Diamond $0.0015 per ad). Apify's free plan includes $5/month of platform credit, which covers roughly 2,500 ads on the base rate. You only pay for ads actually returned - no charge for empty results.
Input
See the Input tab for the full list of options. The short version:
advertiserDomains/advertiserNames- who to look up (use at least one; domains are more reliable, see Limits below).region- two-letter country code to only see ads running in that country; leave empty for worldwide.dateFrom/dateTo- only include ads last shown in this date range.formats- only includeTEXT,IMAGEand/orVIDEOads.maxItemsPerAdvertiser- cap on ads per domain/name (default 20).fetchRegions- off by default. Turn on to fetch each ad's exact per-country breakdown, at the cost of roughly double the requests (and run time), since it's one extra request per ad.
An empty input ({}) scrapes a small sample from nike.com so you can see the output shape
immediately.
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Example output
(from a real local run against nike.com, formats and region numbers vary run to run since
Google's ad mix changes constantly):
[{"advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","advertiserDomain": "nike.com","domainVerified": true,"creativeId": "CR06152928169239248897","format": "IMAGE","formatCode": 1,"regions": ["CA"],"firstShown": "2026-06-05","lastShown": "2026-09-17","adDetailUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR06152928169239248897?region=anywhere","creativePreviewUrl": "https://tpc.googlesyndication.com/archive/simgad/17720214098677970069","adHeadline": null,"adDescription": null,"adDestinationUrl": null,"searchedBy": "nike.com"}]
Tips
- Prefer advertiser domains over names when you know them. Google's advertiser-name search is a fuzzy "did you mean" match and can occasionally resolve to a similarly-named but unrelated advertiser; domain search matches Google's own verified-domain record for the account.
- Large
maxItemsPerAdvertiservalues take longer, and turning onfetchRegionsroughly doubles request volume since it adds one extra request per ad. This actor paces every request at roughly 1/second per session, by design, to stay well under Google's rate limits. - If Google rate-limits this run's IP (see Limits below), the actor automatically rotates to a fresh Apify Proxy session (when Apify Proxy is available on your plan) and retries, up to 5 sessions per run. Enabling Apify Proxy on the actor's run options gives it the best chance of working around a block; without it, every rotation is still the same direct IP and a persistent block will end the run in failure with a clear status message.
FAQ, disclaimers and support
Does this need a Google Ads account or login? No. It reads only the public
adstransparency.google.com tool that Google runs for anyone to inspect any advertiser's ads.
Why is adHeadline/adDescription sometimes null? Google only exposes decodable ad-copy text
for some creative types (mainly text and standard responsive ads); Shopping ads, most video ads and
plain image ads don't carry decodable text in the data Google's own tool sends to the browser, so
those fields are left null rather than guessed.
Why is format sometimes imprecise? Google does not publish its internal ad-format code
mapping, and this actor's format field is a best-effort read of that undocumented code. The raw
formatCode is always included so you can spot-check it.
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what Google itself already publishes for any visitor to see on the Ads Transparency Center. You should still be mindful that ad creatives can contain personal data incidentally (e.g. a testimonial with a name); if in doubt about a specific use case, consult your lawyers.
Found a bug or an endpoint that changed? Please use the Issues tab. Programmatic access is available from the API tab.
Limits
- Google does not publish an official API for the Ads Transparency Center; this actor calls the same unauthenticated endpoints the public web app itself uses. Google can change these without notice, which would need an actor update.
- Rate limiting is real and expected. Google enforces an undocumented per-IP request budget on
these endpoints - once an IP sends "too many" requests it gets an HTTP redirect instead of data.
This actor paces requests at roughly 1/second per session and, on a block, rotates to a fresh
Apify Proxy session (up to 5 per run) with backoff before giving up. If every session stays
blocked:
- a run that ends with zero ads and no ads were legitimately absent fails loudly with a clear
status message (rather than reporting a misleading "success, 0 results") - try again later, or
reduce
maxItemsPerAdvertiser; - a run that already pushed some ads before hitting the block succeeds, but logs a visible warning that the results may be incomplete.
- a run that ends with zero ads and no ads were legitimately absent fails loudly with a clear
status message (rather than reporting a misleading "success, 0 results") - try again later, or
reduce
fetchRegions(off by default) requires one extra request per ad; when it's on and a specific request gets rate-limited, that ad is still returned withregionsfalling back to the Region filter (ornull) rather than being dropped.- Legal / compliance note. This actor only reads data Google itself already publishes for any
visitor on
adstransparency.google.com- no login, no scraping of private account data. You are responsible for using the output in a way that complies with Google's own Terms of Service and any laws that apply to your use case (e.g. competitive intelligence is generally fine; scraping to build a competing transparency product may not be). - Attribution. The domain-search request format and the ad-text overlay-decoding approach were
cross-checked against the open-source google-ads-transparency-mcp
project (MIT license) while reverse-engineering Google's undocumented endpoints; see
THIRD_PARTY_NOTICES.mdin this actor's source for details on what was reused (no code was copied - see that file for specifics).