Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Pricing

from $12.00 / 1,000 results

Go to Apify Store
Google Ads Transparency Scraper

Google Ads Transparency Scraper

Designed for marketers, researchers, and business intelligence teams, this efficient tool scans a provided list of websites/domains to determine which ones have ever run Google Ads—whether in the past or currently—by leveraging data from the Google Ads Transparency Center.

Pricing

from $12.00 / 1,000 results

Rating

0.0

(0)

Developer

Alkausari M

Alkausari M

Maintained by Community

Actor stats

5

Bookmarked

454

Total users

81

Monthly active users

7 days ago

Last modified

Share

Overview

This Apify Actor quickly checks a list of website domains to determine whether they have ever run Google Ads — either currently active or at any point in the past.

It uses publicly available data from the official Google Ads Transparency Center → https://adstransparency.google.com/

Pricing is set by your proxy choice — nothing else. Pick a row and read the total.

Your proxy settingBase rateProxy usageTotal / 1,000 domainsRecommended for
No proxy (default)$12.00—$12.00All users (Runs 30% faster)
Apify datacenter proxy$12.00+$6.00$18.00Extra IP diversity
Apify residential proxy$12.00+$12.00$24.00When residential IPs are specifically required

Start with no proxy — it's the default for good reason. It's the cheapest option, it's the fastest, and it now protects itself:

  • Fastest. Running the same domains through each setting, no proxy finished about 30% faster than datacenter and about twice as fast as residential.
  • Cheapest. $12.00 per 1,000 domains, a third less than datacenter and half of residential.
  • Protected. If Google blocks the run, the Actor keeps going through datacenter proxy automatically, so you get results instead of errors — at no extra cost: the run still costs $12.00 per 1,000. The run log records when the switch happened.

Residential costs twice as much as no proxy and runs about twice as slow. No results get a built-in second look: before saving a No, the Actor checks Google's ad list for that exact domain. Want to re-check anyway? Run your list with no proxy, then re-run just the No domains — for example, 1,000 domains with 400 No results costs $16.80 in total, versus $24.00 for one residential run.

Primary use cases

  • Competitor advertising intelligence
  • Lead generation for digital marketing agencies
  • Market & trend analysis
  • High-volume domain screening

Performance

  • Nothing is silently skipped — every domain in a finished run gets one row: Yes, No, or an error with the reason
  • Automatic retries — each domain gets up to 3 attempts on a fresh browser session before it's recorded as an error
  • Interrupted runs can be resumed — click Resurrect on a timed-out or stopped run and it continues from the first unchecked domain, with no lost work and no duplicate results
  • Large lists can be split across several runs to finish sooner
  • Predictable pricing — the price per domain is set by your proxy choice alone, never by the results

Key Features

  • Processes lists of any size — from one domain to thousands per run
  • Clear yes/no result + optional metadata per domain
  • Ad count, last shown date, ad format, and direct link per domain
  • Structured output (JSON, CSV, Excel compatible)
  • Automatic retries and error handling
  • Runs with or without a proxy — your choice sets the price, and the cheapest option is already the default
  • Reads only public data, with no authentication

How to Run the Actor

  1. Go to your Apify Console → find or open this Actor
  2. Click Try for free or Run
  3. Switch to the Input tab
  4. Paste your JSON configuration (see examples below)
  5. Click Start
  6. Monitor progress in the run log
  7. When finished → go to Storage → Dataset → download results

Input Configuration

Provide input as a JSON object or paste a list of domains.

Minimal working example

Any mix of bare domains and full website URLs is accepted — each entry is reduced to its domain automatically:

{
"domains": [
"apple.com",
"www.tesla.com",
"https://shopify.com/",
"https://www.kars4kids.org/donate?utm_source=newsletter",
"columbusfoundation.org"
]
}

Region

By default the Actor reports ads from Anywhere (all regions combined). To check a specific country, set the region field — it's a dropdown of every region Google's Transparency Center supports, selected by name in the Console:

{
"domains": ["apple.com"],
"region": "US"
}

Ad counts, the last-shown date, and the ad format can differ from one region to another, so pick the market you care about. Leave it as anywhere for a global view.

adsPageLoadDelay Tuning Guide

If ad details such as last run date or format are missing from the output, the results page may not have finished rendering before the scraper read it. If ad details such as last-shown date or format are missing from the output, raise this value.

ConnectionRecommended Value
Fast1500 – 2000 ms
Stable2000 – 3000 ms

Domain Input Notes

  • Full website URLs work too — paste https://www.example.com/any/page?x=1 and the Actor extracts example.com automatically, so you can feed exported link lists as-is.
  • Domains are case-insensitive — Kars4kids.Org and kars4kids.org are treated identically.
  • Leading www. is stripped before matching, so www.example.com and example.com resolve to the same entry.
  • Duplicate domains are checked only once. If your list contains the same domain twice (or both www.example.com and example.com), the output contains a single row for it — so the results can have fewer rows than your input list.
  • No results are double-checked. When Google's search offers no exact match for a domain, the Actor checks Google's ad list for that exact domain before saving the result: if ads are found, the domain is saved as Yes with its ad details; otherwise it is saved as ads_ever: "No". With a specific region selected, this double-check starts after the run's first Yes.

Output

Results are saved to the default Apify Dataset, one record per domain. The dataset can be exported as JSON, CSV, Excel, or XML from the Apify Console.

Output preview (dataset view)

DomainAds?CountLast shownFormatAds link
apple.comYes~300KOct 2, 2026Text…/advertiser/AR0655…
tesla.comYes~5KOct 2, 2026Image…/advertiser/AR1782…
shopify.comYes~80KOct 2, 2026Text…/advertiser/AR0162…
kars4kids.orgYes~700Oct 2, 2026Text…/advertiser/AR1546…
unknowndomain.comNo————

Rows are from a real run in October 2026; unknowndomain.com stands in for any domain without ads. Ads links are shortened here for width — the dataset stores the full, clickable Transparency Center URL. The error column is omitted; see the JSON example below.

Output (JSON view)

[
{
"domain": "apple.com",
"ads_ever": "Yes",
"adsCount": "~300K",
"date_of_last_running": "Oct 2, 2026",
"type_of_ad": "Text",
"ads_link": "https://adstransparency.google.com/advertiser/AR06559612996090331137/creative/CR17024882067898368001?authuser=0&region=anywhere&hl=en",
"error": null
},
{
"domain": "unknowndomain.com",
"ads_ever": "No",
"adsCount": null,
"date_of_last_running": null,
"type_of_ad": null,
"ads_link": null,
"error": null
}
]

Data Fields

FieldDescription
domainThe input domain that was checked.
ads_ever"Yes" if Google lists ads for the domain, "No" if Google's public data lists none, null if the domain couldn't be checked.
adsCountAd count as shown on the site to signed-out visitors (e.g."~300K", "1,432"). null if none.
date_of_last_runningWhen the latest ad Google shows for the domain was last shown (e.g."Oct 2, 2026").
type_of_adFormat of that ad (e.g."Video", "Image", "Text"). It can vary between runs.
ads_linkDirect URL to the domain's ad detail on the Transparency Center.
errorError message if the domain could not be scraped, otherwisenull.

Understanding the results

"Yes" — the Transparency Center returned advertising information for the domain.

Seeing more ads when you're signed in to Google? Some advertisers (for example in health or alcohol) run age-restricted ads that Google only shows to signed-in users. This Actor reports the public, signed-out view — the same ads anyone can see without logging in — so adsCount can be lower than in your own signed-in browser.

"No" — Google's search offered no match for that domain, and the Actor's double-check of Google's ad list didn't find ads for it either. It isn't an absolute guarantee that the business has never advertised on Google under some other advertiser identity. If a domain you know advertises comes back No, check region first, then re-run that domain on its own — with no proxy, that costs about 1 cent.

null — the domain couldn't be checked. See the error field.


Processing Large Lists

A single run checks its domains one at a time, whichever proxy setting you choose. To check a very large list faster, don't put everything in one run; instead split the work across multiple runs that execute in parallel using Apify Tasks.

How to set it up

  1. Split your list into batches — e.g. 6,000 domains into 3 batches of 2,000 (smaller batches finish sooner and are easier to retry).
  2. Create a Task per batch — on the Actor page click Create task (or Actor → ⋮ → Create task). In each task's Input tab, paste that batch's domains, pick the region, and Save.
  3. Start them together — open each task and click Start (or start them via the API/Console). They run as independent, concurrent runs.
  4. Collect the results — each run writes to its own dataset. Download and merge them, or use the API to push all runs into a single named dataset.

Tips

  • Test first. Run one task with a small maxDomainsPerRun to gauge speed and cost before launching all batches.
  • Mind your plan's limits. How many runs execute at once is bounded by your Apify plan's max concurrent runs and available memory. Start with a few parallel tasks and scale up.
  • Schedule recurring work. For an ongoing workload (e.g. 10,000/month), give each task a Schedule (daily/weekly) so batches run automatically without manual starts.
  • Keep batches reliably sized. A few hundred to ~1,000 domains per task is a good balance between throughput and run stability.
  • Set your run timeout. The 2-hour default covers roughly 1,000 domains without a proxy, or about half that with residential. Raise it before starting a larger batch. If a run does time out, click Resurrect — it continues from the first unchecked domain.

📮 Support

Bugs, feature requests, or custom scraping work — open an issue on Apify or email alkausarimujahid@gmail.com.