Google Ads Transparency Scraper – Monitor New Competitor Ads
Pricing
from $0.40 / 1,000 results
Google Ads Transparency Scraper – Monitor New Competitor Ads
Google Ads Transparency scraper that monitors competitor ads by domain or advertiser ID: returns new creatives with format, first/last shown dates, ad URL and preview. Export JSON, CSV, Excel. From $0.40 per 1,000 results.
Pricing
from $0.40 / 1,000 results
Rating
0.0
(0)
Developer
Alexandre Manguis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
What does Google Ads Transparency Monitor do?
This Google Ads Transparency scraper looks up any advertiser by website domain or Google advertiser ID in the public Google Ads Transparency Center and returns their ad creatives: format (text, image, video), first and last shown dates, a link to the ad page and a preview URL. Turn on monitor mode and every scheduled run returns only the creatives it has not seen before for that monitor — a simple "what did my competitors just launch?" feed. Export to JSON, CSV or Excel, or send results to Slack, Google Sheets or a webhook through Apify integrations.
It reads only public data, needs no login and no browser, and runs on Apify datacenter proxies.
Use cases
- Performance marketers and agencies – watch competitors' new Google Ads creatives each week.
- Brand and competitive-intelligence teams – track who advertises in a country and in which formats (text, image, video).
- E-commerce and SaaS founders – get alerted to new campaigns of rival brands.
- Researchers and journalists – export ad archives per advertiser or per region and date range.
Features
- Search by domain (e.g.
nike.com) and/or advertiser ID (AR…) or full Transparency Center advertiser URL. - Monitor mode (
onlyNewAds): remembers seen creatives permonitorNameand returns/bills only new ones. The first run returns everything it finds. - Filters: region (
anywhereor a country code), ad format (TEXT / IMAGE / VIDEO), date range (absolute or relative like30 days). - Optional creative details: countries where the ad was shown and the creative asset URL (one extra request per ad, slower).
- Caps for cost control: ads scanned per advertiser and maximum results per run.
- Unknown domains/IDs produce a clear error row instead of failing the whole run.
Input
Configuration
Provide at least one domain or advertiser ID; all other fields are optional.
| Field | Type | Description |
|---|---|---|
domains | string[] | Competitor domains. Protocol, www and path are stripped. |
advertiserIds | string[] | Advertiser IDs (AR…) or advertiser page URLs. Provide domains and/or IDs. |
region | string | anywhere (default) or a country code such as US, GB, DE, FR. |
formats | string[] | TEXT, IMAGE, VIDEO. Empty = all. |
dateFrom / dateTo | string | YYYY-MM-DD or relative (30 days). Empty = no bound. |
onlyNewAds | boolean | Default true: only creatives not seen by this monitor before. Set false for a plain snapshot. |
monitorName | string | Name of the remembered state (default default). Use one per competitor list. |
resetMonitor | boolean | Forget seen ads before this run (re-baseline). |
includeCreativeDetails | boolean | Adds regionsShown and assetUrl. Slower. |
maxResultsPerAdvertiser | integer | Creatives scanned per advertiser, newest first (default 100). |
maxResults | integer | Stop after this many delivered ads (default 200). Also caps spending. |
proxyConfiguration | object | Apify datacenter proxy (default, recommended). |
Example input
{"domains": ["nike.com"],"region": "US","onlyNewAds": true,"monitorName": "my-competitors","maxResultsPerAdvertiser": 30,"maxResults": 20}
Output
Example output
One dataset item per ad creative. Sample (nike.com, region US):
{"creativeId": "CR02140587682869280769","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","domain": "nike.com","format": "TEXT","firstShown": "2023-11-16T22:23:39.000Z","lastShown": "2026-10-04T09:56:25.000Z","adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR02140587682869280769","previewUrl": "https://tpc.googlesyndication.com/archive/simgad/13612398631290192720","inputQuery": "nike.com","regionFilter": "US","regionsShown": null,"assetUrl": null,"isNew": true,"firstSeenByMonitor": "2026-10-04T10:35:46.538Z","scrapedAt": "2026-10-04T10:35:46.688Z"}
Output fields and fill rates
Measured on a production run of 45 ads (TEST_REPORT.json, medium run, details enabled for part of the input):
| Field | Fill rate | Notes |
|---|---|---|
creativeId, advertiserId, advertiserName, format, firstShown, lastShown, adUrl, previewUrl | 100% | |
inputQuery, regionFilter, isNew, firstSeenByMonitor, scrapedAt | 100% | |
domain | 100% when searching by domain; empty when searching by advertiser ID | 0% in the advertiser-ID proof run |
regionsShown | 100% in the medium run | Only filled when includeCreativeDetails is on (0% in runs without it) |
assetUrl | 28.9% | Only with includeCreativeDetails; not every creative exposes a direct asset |
Modes proven on Apify
| Mode | Input | Result |
|---|---|---|
| Advertiser ID, video only | advertiserIds, formats: ["VIDEO"], 30 max | 30 items, 0 error rows |
| Domain monitor, region US | domains, onlyNewAds: true | 15 items, all isNew: true on first run |
Future dateFrom | date in the future | Run succeeds, 0 items |
| Unknown domain | this-domain-does-not-exist-xyz123.com | Run succeeds, 1 error row (not billed): "No advertiser or ads found for this input in the Google Ads Transparency Center." |
| Empty input | no domains or IDs | Run fails fast: "Provide at least one domain or advertiser ID." |
Run via API
Replace USERNAME with the Actor's owner and YOUR_TOKEN with your Apify API token.
curl
curl -X POST "https://api.apify.com/v2/acts/USERNAME~google-ads-transparency-advertiser-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"domains": ["nike.com"], "region": "US", "onlyNewAds": true, "monitorName": "my-competitors", "maxResults": 20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('USERNAME/google-ads-transparency-advertiser-monitor').call({domains: ['nike.com'],region: 'US',onlyNewAds: true,monitorName: 'my-competitors',maxResults: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("USERNAME/google-ads-transparency-advertiser-monitor").call(run_input={"domains": ["nike.com"],"region": "US","onlyNewAds": True,"monitorName": "my-competitors","maxResults": 20,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Monitoring competitors on a schedule
Create an Apify Schedule (for example daily or weekly) that runs this Actor with the same monitorName and onlyNewAds: true. Each run returns only creatives not seen in earlier runs, so you pay only for new ads. Connect the dataset to Slack, Google Sheets or a webhook with Apify integrations.
Pricing
Cost per result
Pay per result: one event per ad delivered. Error rows are not billed.
| Apify plan | Price per 1,000 results |
|---|---|
| Free | $0.60 |
| Bronze | $0.52 |
| Silver | $0.46 |
| Gold and above | $0.40 |
In monitor mode you are billed only for new ads. maxResults caps what a run can spend. Platform usage (compute and proxy) is billed separately by Apify; in the measured production runs it was well under $0.001 per run for 15–45 ads.
Troubleshooting and limits
- "Invalid input: Provide at least one domain or advertiser ID." – add
domainsoradvertiserIds. - Error row "No advertiser or ads found" – the domain has no verified advertiser in the Transparency Center; check the spelling or use the advertiser ID from the advertiser page URL.
- 0 results in monitor mode – nothing new since the last run with this
monitorName. SetresetMonitor: trueto re-baseline oronlyNewAds: falsefor a snapshot. - 0 results with a date filter – the range may contain no ads (a future
dateFromalways returns nothing). regionsShown/assetUrlempty – enableincludeCreativeDetails;assetUrlis not available for every creative.domainempty – expected when you search by advertiser ID.- Rate limiting (HTTP 429) – keep Apify datacenter proxy enabled; running from a home IP gets throttled.
FAQ
Common questions
Is it legal to scrape the Google Ads Transparency Center?
The Actor only reads publicly available pages that Google publishes for transparency, without login. You remain responsible for complying with Google's terms and applicable laws (including GDPR) for how you use the data.
Does it return the ad text or image?
It returns the ad URL, a preview URL and, with creative details, an asset URL when available. It does not download media files.
How does monitor mode know what is new?
It stores creative IDs in a key-value store named after your monitorName. Use a different name for each competitor list.
Can I search by company name?
Not directly; use the domain or the advertiser ID/URL.
Which regions are supported?
anywhere plus the country codes listed in the input field description.
Keywords
google ads transparency scraper, google ads transparency center, competitor ads monitor, google ads spy, ad creatives export, advertiser ads lookup, new ads alert, competitor ad tracking, ads transparency API, google ads library
Hashtags
#googleads #adstransparency #competitoranalysis #adintelligence #adspy #marketingintelligence #ppc #scraper #apify