Google Ads Transparency Scraper: Competitor Ads by Domain avatar

Google Ads Transparency Scraper: Competitor Ads by Domain

Pricing

$1.50 / 1,000 ads

Go to Apify Store
Google Ads Transparency Scraper: Competitor Ads by Domain

Google Ads Transparency Scraper: Competitor Ads by Domain

Google Ads Transparency Center scraper: type a competitor's domain, brand name or advertiser ID and get its ads with format, first and last shown dates, countries, creative images and ad links. $1.50 per 1,000 ads, details included. No login, no browser.

Pricing

$1.50 / 1,000 ads

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Google Ads Transparency Scraper: competitor ads by domain or advertiser

Type a competitor's domain or brand name and get the ads Google shows for it in the Ads Transparency Center: format, first and last shown dates, countries, creative images and a link to each ad. One row per ad, as JSON, CSV or Excel. No login, no browser, no Google account. $1.50 per 1,000 ads, with ad details included.

Why this one

  • One flat price. $0.0015 per ad. includeDetails (every creative variant and the countries where an ad ran) costs nothing extra. No start fee and no monthly rental.
  • Search the way you think. By competitor domain (nike.com), by company name (it picks the advertiser accounts with the most ads, up to 10 per name, because big brands run several), or by pasting an advertiser or ad page URL from adstransparency.google.com.
  • Built to run from Apify's servers. Google throttles a single IP after a few advertisers, so the Actor uses Apify Proxy datacenter IPs, spaces its requests and retries. Platform runs on 2026-10-11 returned ads for nike.com, adidas.com, shopify.com and notion.so.
  • Only new ads, on a schedule. Turn on onlyNewAds, run it daily, and you receive and pay for the ads that appeared since the last run.
  • Honest about content. You get ad metadata, imageUrls for image and text ads, and a previewUrl for video ads. Ad copy is not returned as text and video files are not downloaded (see Limits).

Minimal input

{"domains": ["nike.com"], "region": "US", "maxAdsPerAdvertiser": 20}

An empty input runs the example domain adidas.com, capped at 5 ads.

Sample output row

A real row from a platform run on 2026-10-11 (domain search shopify.com, region US, includeDetails on, which adds regions, variationCount and previewUrls):

{
"advertiserId": "AR01625195283841286145",
"advertiserName": "Shopify Inc.",
"creativeId": "CR06709085365593964545",
"format": "text",
"firstShown": "2024-03-18T00:25:58+00:00",
"lastShown": "2026-10-11T05:46:47+00:00",
"shownForDays": 937,
"regions": [
{
"region": "US",
"lastShown": "2026-10-10"
}
],
"variationCount": 1,
"imageUrls": [
"https://tpc.googlesyndication.com/archive/simgad/9011262948780097556"
],
"landingDomain": "shopify.com",
"adUrl": "https://adstransparency.google.com/advertiser/AR01625195283841286145/creative/CR06709085365593964545?region=US",
"height": 180,
"width": 348,
"previewUrls": [],
"region": "US",
"input": "shopify.com",
"scrapedAt": "2026-10-11T06:10:03+00:00"
}

Price

$1.50 per 1,000 ads ($0.0015 each). 20 ads cost $0.03; 5 advertisers with 400 ads each (2,000 ads) cost $3.00. Set a maximum charge on the run and it stops when the limit is reached.

What you can do with it

  • Competitor ad research: see which Google ads a competitor has run, since when, and whether they are still live.
  • Creative swipe files: collect image creatives for a brand, filtered by format, region and date.
  • Brand protection and compliance: find who advertises pointing to your domain or under your brand name.
  • Ad intelligence feeds: schedule a daily run per advertiser with onlyNewAds on to get only the ads that are new since the last run.

Input

Give at least one advertiser ID, domain or search term. An empty input runs the example domain adidas.com, capped at 5 ads.

{
"advertiserIds": ["AR16735076323512287233"],
"domains": ["shopify.com"],
"searchTerms": ["Spotify"],
"region": "US",
"startDate": "2026-01-01",
"format": "any",
"maxAdvertisersPerTerm": 3,
"maxAdsPerAdvertiser": 100,
"includeDetails": false,
"onlyNewAds": false
}
  • advertiserIds: the AR... id, or an advertiser or ad page URL pasted from adstransparency.google.com (the id is taken from it). Returns that advertiser's ads.
  • domains: a website domain such as nike.com. Returns ads that point to that domain, from any advertiser.
  • searchTerms: a company or brand name, resolved through the site's search to the matching advertiser accounts with the most ads (accounts with no ads are skipped). maxAdvertisersPerTerm (default 3, max 10) sets how many accounts to scrape per term; big brands often run ads from several accounts. A domain typed here (nike.com) runs a domain search.
  • maxAdsPerAdvertiser: cap on ads for each advertiser ID, each domain and each advertiser account a search term resolves to (default 100, max 10000). Pages come in the order the site lists them, which is not strictly by date.
  • region: two-letter country code (US, GB, DE, JP, ...) or anywhere (default). startDate and endDate (YYYY-MM-DD) and format (any, text, image, video) filter the ads.
  • includeDetails (default false): one extra request per ad for all creative variants (more imageUrls, previewUrls, variationCount) and the regions where it ran, the requested region first. Slower, no extra charge.
  • onlyNewAds (default false): monitor mode, see below.
  • requestDelaySeconds (default 1.0) and proxyConfiguration (Apify Proxy by default) control pacing.

Monitor mode

Set onlyNewAds to true and schedule the Actor daily: each run returns only ads not delivered by an earlier run with onlyNewAds on, so you pay only for the new ones. Seen creative IDs are kept in a named key-value store, google-ads-transparency-seen, separately per advertiser or domain and per combination of region, format and dates. The first run returns everything up to the limit.

Output

One row per ad creative:

{
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"creativeId": "CR06289851821125009409",
"format": "image",
"firstShown": "2023-11-17T11:19:29+00:00",
"lastShown": "2026-10-07T09:20:38+00:00",
"shownForDays": 1055,
"region": "US",
"regions": [{"region": "US", "lastShown": "2026-10-07"}],
"variationCount": 1,
"width": 300,
"height": 250,
"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/9542525759016532365"],
"landingDomain": "nike.com",
"previewUrls": [],
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR06289851821125009409?region=US",
"input": "nike.com",
"scrapedAt": "2026-10-07T12:00:00+00:00"
}

region is the region you filtered on (or anywhere), and adUrl then opens the site filtered to it; shownForDays is how long the ad has run. A row only carries the fields the ad has, so there are no null columns: regions and variationCount are left out, and previewUrls is absent, unless includeDetails is on. previewUrl, googleCustomerId, googleCreativeId, adGroupId and versionId come from Google's preview URL, so they are left out when an ad has none (as with this image ad). width and height (pixels) are given for image ads only. The example above is abridged and shows a domain search with details on. Download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

Pricing

Pay per result: $1.50 per 1,000 ads ($0.0015 per ad, event ad). Example: 5 advertisers with 400 ads each is 2,000 ads, about $3.00. Details cost nothing extra. A test run capped at 10 ads costs about $0.015. You can cap spend with the run's maximum total charge; the Actor stops when it is reached.

Use with Python

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datagleaner/google-ads-transparency-scraper").call(
run_input={"domains": ["nike.com"], "region": "US", "maxAdsPerAdvertiser": 10}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["advertiserName"], item["format"], item["lastShown"], item["adUrl"])

Use with JavaScript / Node.js

// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagleaner/google-ads-transparency-scraper').call({
domains: ['nike.com'],
region: 'US',
maxAdsPerAdvertiser: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const ad of items) console.log(ad.advertiserName, ad.format, ad.lastShown, ad.adUrl);

Use it from n8n, Make, Zapier or an AI agent

Actor ID: datagleaner/google-ads-transparency-scraper

Minimal input:

{"domains": ["nike.com"], "region": "US", "maxAdsPerAdvertiser": 10}

Each tool below runs this Actor with your own Apify API token.

  • n8n: add the Apify node (@apify/n8n-nodes-apify). On n8n Cloud you install it from the community node registry. Choose Run an Actor and get dataset, set Actor to datagleaner/google-ads-transparency-scraper and paste the input above.

  • Make: use the Apify app's Run an Actor module, then Get Dataset Items to read the results. Watch Actor Runs can trigger a scenario when a run finishes.

  • Zapier: use the Apify action Run Actor, then the search Fetch dataset items. The trigger Finished Actor run starts a Zap when a run ends.

  • AI agents (MCP): connect to https://mcp.apify.com?tools=datagleaner/google-ads-transparency-scraper. In Claude Code:

    claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/google-ads-transparency-scraper"
    

    Then run /mcp to sign in to Apify in your browser, or send the header Authorization: Bearer YOUR_APIFY_TOKEN. Then ask in plain words, for example:

    Find the Google ads Shopify has run in the US since July, up to 20, and list each one's format, first and last shown dates and ad link.

  • LangChain (Python):

# pip install langchain-apify, then set APIFY_TOKEN in your environment
import json
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("datagleaner/google-ads-transparency-scraper")
result = tool.invoke({"run_input": json.loads('{"domains": ["nike.com"], "region": "US", "maxAdsPerAdvertiser": 10}')})

Monitor mode: only new ads

Turn on onlyNewAds and schedule the Actor (daily is typical) to receive just the ads that appeared since the last run, and pay only for those.

  • The Actor keeps a named key-value store, google-ads-transparency-seen, with one entry per advertiser or domain and the same region, format and dates. Each entry holds the creativeIds already delivered and the date of the last complete run.
  • The first run delivers up to maxAdsPerAdvertiser ads and sets that date.
  • Later runs deliver an ad only if it was never delivered and was first shown on or after the stored date (with one day of slack). Long-running ads that you already have, and old ads that were never delivered, are skipped and not charged.
  • The site does not list ads by age, so the Actor does not stop at the first known ad. It keeps paging until it reaches maxAdsPerAdvertiser, the end of the list, or five pages in a row with nothing new.
  • If more than maxAdsPerAdvertiser new ads appear between two runs, the extra ones are skipped for good, because the date moves forward after each complete run. Raise the limit or run more often for very active advertisers.
  • Only ads that were delivered and charged are remembered. If a run stops early (your maximum total charge, or Google throttling), the date stays where it was, so the next run picks up the rest without charging twice.

FAQ

Can I use the Google Ads Transparency Center as an API? Yes, through this Actor: call it from the Apify API, the Python or JavaScript client, or MCP, and get the ads back as JSON.

How do I see a competitor's Google ads? Put their domain in domains or their company name in searchTerms (it picks the accounts with the most ads, default 3). You get the ads the Transparency Center shows for them, with first and last shown dates and image creatives.

How do I find an advertiser ID? Use searchTerms with the company name, or paste the advertiser's page URL into advertiserIds.

Do I need a Google account? No. The data is public and the Actor needs no login.

Why fewer ads than the site shows? Region, date and format filters and maxAdsPerAdvertiser apply, and duplicates are removed by creativeId.

Limits

  • Ad copy is not returned as text. Google archives most text and image ads as rendered images, which imageUrls holds; the rest, video ads included, have previewUrl, Google's preview script for that creative. Video files and impression ranges are not exposed.
  • landingDomain is only filled for domain searches.
  • Google throttles a single IP that sends many requests quickly, so the Actor uses Apify Proxy (datacenter) by default, paces its requests and retries. Without a proxy, expect throttling after a few advertisers.
  • Results come in the order the site lists them, which is not strictly by date. The region filter uses country-level codes.

Responsible use

This Actor reads public transparency data that Google publishes for anyone. Advertiser names can be individuals; if you store or process personal data, your own data-protection obligations apply.