Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Pricing

from $18.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 $18.00 / 1,000 results

Rating

0.0

(0)

Developer

Alkausari M

Alkausari M

Maintained by Community

Actor stats

6

Bookmarked

338

Total users

51

Monthly active users

0.5 hours

Issues response

18 hours 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/

Primary use cases

  • Competitor advertising intelligence
  • Lead generation for digital marketing agencies
  • Market & trend analysis
  • High-volume domain screening (100,000+ domains possible)

Performance

  • Handles anything from a single domain to many thousands of domains in one run
  • Interrupted runs resume where they left off — no lost work, no duplicate results
  • Scales to very large lists even faster via multiple parallel runs
  • Browses the site like a real person, in a real browser
  • Uses Apify Proxy by default (the most cost-effective option) — switch to residential proxies if you hit blocks, or turn the proxy off if you don't

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
  • Cost-effective Apify Proxy by default, with residential proxies available if you need higher success rates
  • Compliant with public data access guidelines

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 (Maximum Wait for a Page to Load)

The Actor reads each result — ad count, last-shown date, format — as soon as it finishes loading, so most runs never need to touch this. The value is simply the longest it will wait for a slow page before moving on. Leave it at the default 2000 ms. If you're on a slow proxy and occasionally see a missing last-shown date or format, raise it (up to 5000 ms). Lowering it has no speed benefit — quick pages are already read the instant they're ready.

Test First with maxDomainsPerRun

Before running a large list, set maxDomainsPerRun to a small number (e.g. 5) — the Actor will only check the first 5 domains of your list. This is the easiest way to gauge speed and cost. Leave it at 0 (the default) to process the whole list.

{
"domains": ["apple.com", "tesla.com", "shopify.com"],
"maxDomainsPerRun": 1
}

Proxy

The Actor uses Apify Proxy by default — the most cost-effective choice, since it avoids the per-gigabyte data charge that residential proxies carry. If you run into blocks or errors (more likely on very large or frequent runs), switch to Apify residential proxies for higher success rates. If you aren't seeing any blocks, you can turn the proxy off to run even faster and cheaper.

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-insensitiveKars4kids.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.
  • If the Transparency Center doesn't recognize a domain, it is recorded as ads_ever: "No" and processing moves on.
  • If a domain temporarily fails to load, the Actor automatically retries it. Every domain in your list always ends up in the results exactly once — either with a Yes/No answer, or with a message in the error field if it could not be checked at all.

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)

DomainRan Ads?Ad CountLast ShownAd FormatAds PageError
apple.comYes~70KJun 9, 2026Text…/advertiser/AR1836…?region=USnull
tesla.comYes~2KJun 9, 2026Video…/advertiser/AR1782…?region=USnull
shopify.comYes~10KJun 9, 2026Text…/advertiser/AR0162…?region=USnull
kars4kids.orgYes~500Jun 9, 2026Text…/advertiser/AR1546…?region=USnull
columbusfoundation.orgYes10Jun 9, 2026Text…/advertiser/AR1796…?region=USnull

Ads Page links are shortened here for readability — the dataset stores the full URLs.

Output (JSON view)

[
{
"domain": "apple.com",
"ads_ever": "Yes",
"adsCount": "~300K",
"date_of_last_running": "Apr 24, 2026",
"type_of_ad": "Video",
"ads_link": "https://adstransparency.google.com/advertiser/AR12345678/creative/CR98765432?authuser=0&region=anywhere",
"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 the domain has run Google Ads, "No" if confirmed none, null if the run errored.
adsCountAd count as shown on the site (e.g. "~300K", "1,432"). null if none.
date_of_last_runningWhen the most recent ad was last shown (e.g. "Apr 24, 2026").
type_of_adFormat of the most recent ad (e.g. "Video", "Image", "Text").
ads_linkDirect URL to the domain's ad detail on the Transparency Center.
errorError message if the domain could not be scraped, otherwise null.

Processing Large Lists

A single run processes its domains one at a time — this keeps the scraper stable and avoids triggering Google's CAPTCHA. In our tests the Actor checks roughly 500–600 domains per hour, so a 1,000-domain list finishes in around 2 hours.

There is no hard limit on how many domains one run can handle. Long runs are safe: if a run is interrupted for any reason, resurrecting it continues from where it left off, and a single problematic domain can't derail the rest of the list. So feel free to put several thousand domains in one run and simply let it work through them.

Splitting a large list is therefore about speed, not safety: ten runs working in parallel finish about ten times sooner than one long run. The easiest way to run batches in parallel is with Apify Tasks — no code required.

How to set it up

  1. Split your list into batches — e.g. 10,000 domains into 10 batches of 1,000. Smaller batches finish sooner and are easier to monitor; larger ones work just as well, only slower.
  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, so 10 tasks of 1,000 finish in roughly the time one batch of 1,000 takes — provided your Apify plan allows that many runs at once (see the Tips below). Tasks above the limit simply wait their turn and start automatically.
  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.
  • Keep each domain in one batch only. Duplicates inside a single run are removed automatically, but the same domain placed in two different tasks is checked twice — and will appear twice in your merged results.
  • Hit the run timeout? Just resurrect. If a run times out before finishing its list, open it and click Resurrect with a longer timeout — it continues from the first unchecked domain instead of starting over.
  • 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.
  • Re-run only the failures. Every domain always gets a row in the results — an answer or an error message. After all batches finish, collect the domains whose error field is filled and run just those once more as a small final batch.

Pricing / Cost Estimation

Your exact cost depends on your Apify plan, proxy choice, and how many of your domains actually run ads — domains with ads take a little longer to check than domains without. The Actor uses the cost-effective Apify Proxy by default; residential proxies (which you can switch to for higher success rates) add a per-gigabyte data charge that can be the largest part of the bill on ad-heavy lists. The most reliable way to estimate is to test with your own settings: set maxDomainsPerRun to a small number, run once, check the run's cost in the Console, and scale up from there.

A single slow or unresponsive domain can't stall the rest of the run — after a couple of attempts it is recorded with an error message and the run moves on, which keeps costs predictable.


FAQ, Disclaimers, and Support

Is this legal?
This Actor scrapes publicly available data from Google Ads Transparency Center, which is a public accountability tool provided by Google. No authentication is required, and no private data is accessed. Always comply with Google's Terms of Service and applicable laws in your jurisdiction.

Why does the Actor's result differ from what I see in my browser?
Google only lists ads that meet a minimum impressions threshold, and new ads can take time to appear. Also, the Actor sees the site as a signed-out visitor — when you browse signed in, Google may show you extra ads that the Actor can't see. If details look incomplete, increase adsPageLoadDelay or run again later.

A domain I know advertises shows as "No" — why?
This is uncommon, but on a slow proxy the Transparency Center can be slow to recognize a domain. If a company you're sure advertises comes back "No," raise adsPageLoadDelay (it also gives the lookup more time to find the domain) or simply run it again.

Found a bug or need a custom solution?
Open an issue in the ../../issues or contact the author. Custom solutions for large-scale or enterprise use cases are available on request.