Google Ads Transparency Scraper (Competitor Ad Monitor)
Pricing
from $1.00 / 1,000 results
Google Ads Transparency Scraper (Competitor Ad Monitor)
Every ad a competitor runs on Google Search, YouTube, Shopping, Maps and Play, from Google's public Ads Transparency Center. Paste advertiser names, domains or AR ids; filter by country, format, platform and dates. Bounded retries; failed advertisers are never charged.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
signal clear
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Security
Limited permissionsShare
Google Ads Transparency Scraper
Pull every ad a competitor is running on Google from the public Google Ads Transparency Center: Search text ads, image ads, YouTube video ads, Shopping, Maps and Play. Give it advertiser names, website domains or advertiser ids, and get one clean row per ad with first and last seen dates, the preview image or preview link, and the public Transparency Center page for that ad.
Built for competitor ad monitoring: run it weekly (or daily in the run-up to Black Friday and Cyber Monday) and see which creatives a rival launched, which ones they keep running, and which ones they killed.
- Names, domains,
AR...ids or Transparency Center URLs, mixed in one run - Filters: country, platform, ad format, date range
- Bounded and cheap: a cap per advertiser and in total, gentle request pacing
- Failed advertisers are never charged. An advertiser's ads are saved only when the
whole advertiser finished; anything that failed is listed in
FAILED_ADVERTISERSand contributes nothing to the dataset.
Input
| Field | What it does |
|---|---|
advertisers | One per line. Walmart Inc. (name), hubspot.com (domain), AR08902249778948079617 (advertiser id), or a Transparency Center URL such as https://adstransparency.google.com/advertiser/AR... or https://adstransparency.google.com/?domain=hubspot.com. |
region | Two-letter country code (US, GB, DE, ...) or anywhere (default). |
platform | all, googleSearch, youtube, googleShopping, googleMaps, googlePlay. |
adFormat | all, text, image, video. |
dateFrom, dateTo | Only ads shown in this window (YYYY-MM-DD). |
maxAdsPerAdvertiser | Default 50. Newest first. |
includeAdvertiserInfo | Adds one type: "advertiser" summary row per advertiser (counts as a result). |
includeCreativeDetails | Adds regions (with per-region dates and impression ranges where Google publishes them), platforms, and every variant's preview. One extra request per ad. |
resolveVideoUrls | Fills videoUrl with the YouTube link for video ads (downloads ~130 KB per video ad). |
maxItems | Total ad cap across all advertisers (0 = no limit). |
maxConcurrency | Advertisers processed in parallel. Default 2. |
maxAttempts | Attempts per advertiser, each on a fresh proxy session. Default 3, max 5. |
proxyConfiguration | Defaults to Apify datacenter proxy. |
How names are matched. A name is looked up with the site's own search box. If
several advertisers share that exact name (big brands often have several accounts), the
one with the most ads is used and the others are listed in the log; paste an AR... id to
choose one explicitly. A domain returns ads from every advertiser that advertises that
domain, which is usually what you want for competitor monitoring.
{"advertisers": ["hubspot.com", "Walmart Inc.", "AR08902249778948079617"],"region": "US","adFormat": "all","maxAdsPerAdvertiser": 100}
Output
One row per ad:
{"type": "ad","advertiserId": "AR10072600183532683265","advertiserName": "Hubspot, Inc.","advertiserDomains": ["hubspot.com"],"creativeId": "CR05670001488131260417","format": "text","firstShown": "2022-06-24T01:19:16Z","lastShown": "2026-10-28T09:46:38Z","daysShown": 1576,"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/739348024653901222","imageUrl": "https://tpc.googlesyndication.com/archive/simgad/739348024653901222","videoUrl": null,"creativeUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR05670001488131260417?region=US","region": "US","input": "hubspot.com","scrapedAt": "2026-10-28T17:02:11.412Z"}
format:text,imageorvideo. Google archives text ads as a rendered image, so text ads also have animageUrl; the ad copy itself is not published as text.previewUrl: the image for image and text ads; for video and some rich ads, Google's preview script link (opens the rendered ad).daysShown: the number of days Google reports the ad as shown.- With
includeCreativeDetails:regions([{region, firstShown, lastShown, impressionsLow, impressionsHigh}]),platforms,variantPreviewUrls, and totalimpressionsLow/impressionsHigh. Impression ranges are published for some regions only (mostly the EU). - Landing pages and click-through URLs are not published by the Transparency Center.
Failures are written to the key-value store record FAILED_ADVERTISERS:
[{"advertiser": "zzqx nonexistent brand", "error": "unknown advertiser: no advertiser named \"zzqx nonexistent brand\"", "attempts": 1}]
How it works
The Transparency Center web page loads its data from a small public JSON API on the same site; no login or key is needed. This Actor calls that API directly, the same requests your browser makes when you use the site:
- Find the advertiser. A name goes to the site's search suggestions
(
POST /anji/_/rpc/SearchService/SearchSuggestions), which returns matching advertisers with theirAR...ids and rough ad counts. An id is confirmed withLookupService/GetAdvertiserById. A domain needs no lookup. - List the ads.
SearchService/SearchCreativesreturns up to 100 ads per request (about 360 bytes per ad) for an advertiser id or a domain, with the region, platform, format and date filters applied by Google, plus a cursor for the next page. - Optional detail.
LookupService/GetCreativeByIdreturns one ad's regions, dates, platforms, impression ranges and variants.
Each request is a form POST with a single f.req field holding JSON. Requests are paced
(1 to 2 seconds between pages of one advertiser) and parallelism is low by default.
Geography. The region is part of the request, so results depend only on the region
input, not on where the request comes from; any proxy country works.
Blocks. If Google answers with its "unusual traffic" page, a consent page, a rate limit
(429) or a server error, the attempt stops, waits, and the advertiser is retried on a new
proxy session from where it left off. The Actor never tries to solve a challenge. If an
advertiser still fails after maxAttempts, it is recorded in FAILED_ADVERTISERS and not
charged. The run fails only if every advertiser failed.
Limits
- The API is undocumented. Google can change it at any time; when it does, this Actor fails loudly rather than returning wrong data, and will be updated.
- Some fields depend on the region: impression ranges, per-region dates and some advertiser details are only published for certain countries.
- Ad counts from Google are approximate ranges (for example "1000 to 2000").
- Ads are listed newest first. Very large advertisers have tens of thousands of ads; use
the filters and
maxAdsPerAdvertiserto keep runs bounded. - Platform values follow the Transparency Center's own platform filter. Display network ads have no separate filter there.
Pricing
Pay per result: you pay for ads saved to the dataset (and summary rows if you turn them on). Failed advertisers produce no rows, so they cost nothing. Default settings use datacenter proxy and about one request per 100 ads, so runs are cheap and fast.
Legal
The Ads Transparency Center is a public archive that Google publishes so anyone can see who is advertising and what they show. This Actor reads only that public data, collects no personal data, and needs no account. Google's Terms of Service restrict automated access to its services, so using this tool carries contractual risk with Google; you are responsible for how you use the data and for complying with the terms that apply to you.