Google Ads Transparency Scraper – Monitor New Competitor Ads avatar

Google Ads Transparency Scraper – Monitor New Competitor Ads

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Google Ads Transparency Scraper – Monitor New Competitor Ads

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

Alexandre Manguis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

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 per monitorName and returns/bills only new ones. The first run returns everything it finds.
  • Filters: region (anywhere or a country code), ad format (TEXT / IMAGE / VIDEO), date range (absolute or relative like 30 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.

FieldTypeDescription
domainsstring[]Competitor domains. Protocol, www and path are stripped.
advertiserIdsstring[]Advertiser IDs (AR…) or advertiser page URLs. Provide domains and/or IDs.
regionstringanywhere (default) or a country code such as US, GB, DE, FR.
formatsstring[]TEXT, IMAGE, VIDEO. Empty = all.
dateFrom / dateTostringYYYY-MM-DD or relative (30 days). Empty = no bound.
onlyNewAdsbooleanDefault true: only creatives not seen by this monitor before. Set false for a plain snapshot.
monitorNamestringName of the remembered state (default default). Use one per competitor list.
resetMonitorbooleanForget seen ads before this run (re-baseline).
includeCreativeDetailsbooleanAdds regionsShown and assetUrl. Slower.
maxResultsPerAdvertiserintegerCreatives scanned per advertiser, newest first (default 100).
maxResultsintegerStop after this many delivered ads (default 200). Also caps spending.
proxyConfigurationobjectApify 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):

FieldFill rateNotes
creativeId, advertiserId, advertiserName, format, firstShown, lastShown, adUrl, previewUrl100%
inputQuery, regionFilter, isNew, firstSeenByMonitor, scrapedAt100%
domain100% when searching by domain; empty when searching by advertiser ID0% in the advertiser-ID proof run
regionsShown100% in the medium runOnly filled when includeCreativeDetails is on (0% in runs without it)
assetUrl28.9%Only with includeCreativeDetails; not every creative exposes a direct asset

Modes proven on Apify

ModeInputResult
Advertiser ID, video onlyadvertiserIds, formats: ["VIDEO"], 30 max30 items, 0 error rows
Domain monitor, region USdomains, onlyNewAds: true15 items, all isNew: true on first run
Future dateFromdate in the futureRun succeeds, 0 items
Unknown domainthis-domain-does-not-exist-xyz123.comRun succeeds, 1 error row (not billed): "No advertiser or ads found for this input in the Google Ads Transparency Center."
Empty inputno domains or IDsRun 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 ApifyClient
client = 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().items
print(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 planPrice 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 domains or advertiserIds.
  • 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. Set resetMonitor: true to re-baseline or onlyNewAds: false for a snapshot.
  • 0 results with a date filter – the range may contain no ads (a future dateFrom always returns nothing).
  • regionsShown / assetUrl empty – enable includeCreativeDetails; assetUrl is not available for every creative.
  • domain empty – 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

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