Google Ads Transparency Center Scraper — Competitor Ad Monitoring

See every ad a competitor runs on Google Search, YouTube, Display, Shopping and Maps, and get only the new ones on each scheduled run.

Run on Apify →See pricing

What it does

Google's Ads Transparency Center shows the ads any advertiser runs, but browsing it one creative at a time does not scale past a couple of competitors. This actor reads the public ad library at adstransparency.google.com and returns one clean row per ad: advertiser name and ID, creative ID, format (text, image or video), first and last shown, days running, landing domain, image and video URLs, and a link to the ad's transparency page.

You can search by competitor domain (for example nike.com, which also returns agencies and resellers advertising that domain), by advertiser name such as HubSpot, or by advertiser ID, and filter by country, date range and format. Turn on includeDetails for one extra lookup per ad that adds countries shown, impression ranges and best-effort headline and description text.

The main job is monitoring. With onlyNewSinceLastRun on and a daily schedule, each run returns only ads that were not delivered before, and already-seen ads are never charged. It runs on plain HTTP at 256 MB with no browser, and costs $0.60 per 1,000 ads, plus $1 per 1,000 ads when details are switched on.

How it works

  1. It resolves each domain, advertiser name or advertiser ID using the same keyless JSON calls the public Transparency Center page makes.
  2. It reads ads newest first, up to maxAdsPerAdvertiser per search and maxResults overall, applying your region, date and format filters.
  3. With includeDetails, it makes one extra lookup per ad for countries, impression ranges, per-country dates and best-effort ad copy.
  4. With onlyNewSinceLastRun, every delivered ad is remembered in the key-value store ads-seen-<monitorName> and skipped on later runs at no charge.
  5. Requests are paced (at most 2 at a time, 0.8-2 s apart). On a CAPTCHA or repeated 429/403 the run stops at once, keeps delivered ads and charges nothing for blocked requests.

Input example

A typical run input (JSON). Every field is also available as a form in the Apify console.

{
  "domains": [
    "nike.com"
  ],
  "advertiserNames": [
    "HubSpot"
  ],
  "regions": [
    "US",
    "GB"
  ],
  "formats": [],
  "maxAdsPerAdvertiser": 20,
  "maxResults": 200,
  "includeDetails": false,
  "onlyNewSinceLastRun": true,
  "monitorName": "competitors-daily"
}
All input fields
FieldTypeRequiredDefaultWhat it does
domainsarraynoCompetitor websites, e.g. nike.com. Returns every ad Google shows for that domain, from the brand itself and from agencies or resellers advertising it.
advertiserNamesarraynoCompany names as shown in the Ads Transparency Center, e.g. HubSpot, Argos Limited. Exact name matches are used (a brand's several legal entities are all kept); otherwise the closest advertiser with the most ads.
advertiserIdsarrayno[]Google advertiser IDs (AR… from an adstransparency.google.com/advertiser/AR… link).
regionsarrayno[]Only ads shown in these countries, as two-letter codes (US, GB, DE, FR…). Empty = anywhere.
dateFromstringnoOnly ads shown on or after this date (YYYY-MM-DD).
dateTostringnoOnly ads shown on or before this date (YYYY-MM-DD).
formatsarrayno[]Only these formats. Empty = all.
maxAdsPerAdvertiserintegerno100How many ads to read for each domain, advertiser name or advertiser ID, newest first as the Transparency Center lists them.
maxResultsintegerno1000Stop after this many ads across all searches. You pay per ad delivered ($0.60 per 1,000).
includeDetailsbooleannofalseOne extra lookup per ad: countries shown, impression ranges and first/last shown per country, plus best-effort headline/description text. Charged as ad-detail ($1 per 1,000).
onlyNewSinceLastRunbooleannofalseRemember every ad delivered in a named key-value store (ads-seen-<monitor name>) and return only ads not seen before. Schedule the actor daily to get a feed of competitors' new ads; already-seen ads are skipped and…
monitorNamestringno"default"Name of the seen-ads memory used by 'Only new ads'. Use one name per schedule (e.g. uk-competitors) so separate watch lists don't share state.
proxyConfigurationobjectno{"useApifyProxy": false}Not needed: the Transparency Center is public. Leave off unless you have your own reason to route requests through a proxy. The actor never rotates proxies to get around a block.

Output example

Each row is a single ad creative, with the advertiser behind it, where it ran and a link back to its page in the Transparency Center:

advertiserNameformatfirstShownlastShownregionslandingDomainpreviewUrl
Nike, Inc.text2022-11-302026-10-19USnike.comhttps://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR00144196208338927617
INITIATIVE MEDIA B.V.video2023-10-172026-10-19FR, BE, DE, IT, ES, …nike.comhttps://adstransparency.google.com/advertiser/AR11154049584043393025/creative/CR03397377851928870913
Hubspot, Inc.text2025-11-032026-10-19US, DE, FR, IN, BR, …hubspot.comhttps://adstransparency.google.com/advertiser/AR10072600183532683265/creative/…
Argos Limitedtext2025-…2026-10-19GBargos.co.ukhttps://adstransparency.google.com/advertiser/AR08556219150266007553/creative/CR07375270183734083585

Pricing

Pay per event: you are charged only for the results you receive, with no subscription. Set a maximum total charge on any run and it stops cleanly at the cap.

Charged forWhenPricePer 1,000Worked example
Ad resultCharged per ad delivered$0.0006$0.60100 ads = $0.06; 1,000 ads = $0.60; a daily monitor returning ~20 new ads = $0.012 a day
Ad detailCharged per ad, only when 'Include ad details' is on (one extra lookup: regions, impressions, ad copy)$0.001$1100 ads with details = $0.06 + $0.10 = $0.16
Actor Start (platform start fee)Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.00005—One run at 256 MB = $0.0000125

Prices are read from the live Apify Store listing when this page is built. The listing is always authoritative.

Try Google Ads Transparency Scraper on Apify. Pay only for the results you get.

Run on Apify →

Use cases

Daily feed of competitors' new ads

Schedule a daily run with only-new mode for your main competitors' domains. Each run delivers just the creatives that appeared since the last one, which is an easy feed for a Slack channel or a weekly marketing review.

Creative and messaging research

Pull a competitor's recent image and video ads with their media URLs, and switch on details for headline and description text where Google publishes it. Use it to see which offers and formats a brand is putting money behind.

Market entry checks

Filter by region to see which advertisers are active in a country before launching there. Domain searches also reveal agencies and resellers advertising a brand, which helps map who else competes for the same clicks.

Agency pitch preparation

Export a prospect's ad history by advertiser name, with first and last shown dates and days running, to show how long campaigns stay live. It is quick to build a factual slide from the rows.

How it compares

ActorForge Ads TransparencyBrowsing the Transparency Center manuallyBuilding your own scraper
Search by domain, advertiser name or IDYesYesYou build it
Search by keyword in ad textNo, the Transparency Center has noneNoNo
Structured export (JSON, CSV)YesNoYes, once built
Only new ads since last runBuilt in, seen ads freeNoYou build it
Ad copy for every text adPartial, many text ads are images onlyVisible as a rendered imagePartial, same limitation
CAPTCHA handlingStops cleanly, blocked requests freeYou solve it yourselfUp to you
Cost$0.60 per 1,000 ads, $1 per 1,000 with detailsFree, your timeFree code, your time and servers

For a one-off look at a single competitor, the Transparency Center website is free and shows the rendered ads directly. The actor earns its keep when you track several advertisers repeatedly and want the results as data.

Limits and honest notes

FAQ

Can I search Google Ads Transparency Center by keyword?

No. The Transparency Center has no ad-text keyword search, so this actor searches by domain, advertiser name or advertiser ID. A domain search returns ads from every advertiser that advertises that domain, including agencies and resellers.

Does it return the headline and description of text ads?

Only with includeDetails on, and only on a best-effort basis. Many Google text ads are published only as a rendered snapshot image, which the actor returns as previewImageUrl, and image ads have no text at all.

How do I get only new competitor ads each day?

Set onlyNewSinceLastRun to true, give the watch list a monitorName such as uk-competitors, and schedule the actor daily. Ads already delivered under that name are skipped and not charged.

Do I need a proxy to scrape Google Ads Transparency?

No. The Transparency Center is public and the default is no proxy. The actor never rotates proxies or solves CAPTCHAs; if Google blocks the run it stops, keeps the ads already delivered and reports it in the status message and RUN_SUMMARY.

How much does monitoring a competitor cost?

Ads cost $0.0006 each, so 1,000 ads are $0.60. Details add $0.001 per ad. A daily monitor returning around 20 new ads costs about $0.012 a day.

Use it from code

Run the actor through the Apify API with the input above.

cURL

curl -X POST "https://api.apify.com/v2/acts/actor-forge~ads-transparency/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["nike.com"], "advertiserNames": ["HubSpot"], "regions": ["US", "GB"], "formats": [], "maxAdsPerAdvertiser": 20, "maxResults": 200, "includeDetails": false, "onlyNewSinceLastRun": true, "monitorName": "competitors-daily"}'

JavaScript (Node.js)

// Node.js 18+ (built-in fetch). Set APIFY_TOKEN in your environment.
const input = {
  "domains": [
    "nike.com"
  ],
  "advertiserNames": [
    "HubSpot"
  ],
  "regions": [
    "US",
    "GB"
  ],
  "formats": [],
  "maxAdsPerAdvertiser": 20,
  "maxResults": 200,
  "includeDetails": false,
  "onlyNewSinceLastRun": true,
  "monitorName": "competitors-daily"
};

const res = await fetch(
  "https://api.apify.com/v2/acts/actor-forge~ads-transparency/run-sync-get-dataset-items",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.APIFY_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(input),
  }
);
const items = await res.json();
console.log(items.length, items[0]);

Python

# pip install apify-client   (set APIFY_TOKEN in your environment)
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "domains": [
        "nike.com"
    ],
    "advertiserNames": [
        "HubSpot"
    ],
    "regions": [
        "US",
        "GB"
    ],
    "formats": [],
    "maxAdsPerAdvertiser": 20,
    "maxResults": 200,
    "includeDetails": False,
    "onlyNewSinceLastRun": True,
    "monitorName": "competitors-daily"
}

run = client.actor("actor-forge/ads-transparency").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

The run-sync-get-dataset-items endpoint waits for the run (up to 5 minutes) and returns the dataset rows directly. For longer runs, start the run asynchronously and read the dataset when it finishes, as the Python example does. Replace APIFY_TOKEN with your own token from the Apify console.

Step-by-step guides

How to Monitor Competitor Ads in Google Ads Transparency Center

List your competitors' domains or advertiser names, run the ActorForge Ads Transparency actor daily with only-new mode, and route the new ads into…

Related actors

Google Trends Scraper — Trending Now & Interest Over Time

Google Trends scraper and API: Trending Now searches for 125 countries from the official feed (traffic, start time, picture, news articles), plus…

$0.50 per 1,000 · trend result

Keyword Suggestions — Google, YouTube, Bing Autocomplete

Bulk keyword suggestions from Google, YouTube, Bing and Baidu autocomplete. Expand each seed with a-z, question words or prepositions for long-tail…

$0.30 per 1,000 · seed expanded

SEO Audit Crawler — On-Page SEO Checker for Whole Sites

Crawl a whole website and audit every page for technical and on-page SEO: titles, meta descriptions, H1s, canonicals, noindex, duplicates, broken…

$6 per 1,000 · page audited

Shopify Store Scraper — Products, Prices, Store Info

Scrape any Shopify store's products from its public products.json: title, vendor, type, tags, price range, compare-at price, stock, variants and…

$0.30 per 1,000 · product result

Try Google Ads Transparency Scraper on Apify. Pay only for the results you get.

Run on Apify →

More SEO & Marketing Intelligence tools · All actors