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 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

2

Bookmarked

189

Total users

53

Monthly active users

1.1 hours

Issues response

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/

Primary use cases

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

Performance

  • Reliable batches of up to 1,000 domains per run
  • Scales easily to very large lists via multiple executions
  • Built with Playwright for stable browser automation
  • Residential proxy support included (strongly recommended for >200 domains)

Key Features

  • Batch processing of 1,000 domains 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
  • Optional Apify residential proxies for high success rate
  • 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

{
"domains": [
"apple.com",
"tesla.com",
"shopify.com",
"kars4kids.org",
"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. Increase this value until data is consistently extracted.

Connection SpeedRecommended Value
Fast (Less Costly)15002000 ms
Slow (Stable)20003500 ms
Very Slow (Higher Cost)35005000 ms

Domain Input Notes

  • 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 in the list are processed individually and will produce duplicate rows in the output. Deduplicate your input list beforehand if needed.
  • If Google's autocomplete returns no suggestions for a domain, or no suggestion exactly matches the input domain, the domain is recorded as ads_ever: "No" and processing moves on.

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. 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. 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 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, so 10 tasks of 1,000 finish in roughly the time one batch of 1,000 takes.
  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.

Pricing / Cost Estimation

This Actor uses Playwright with residential proxies, which means each domain costs approximately 1–3 compute units depending on page load time. A run of 100 domains typically costs $0.50–$1.50.

Use maxDomainsPerRun to test with a small batch first and estimate costs before processing a large list.


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 is a domain showing "No" when I know it runs ads?
The Google Ads Transparency Center only shows ads that meet a minimum impressions threshold, and there can be a delay before new ads appear. Try increasing adsPageLoadDelay or running again later.

Why do I need residential proxies?
Google blocks requests from datacenter IPs on this site. Residential proxies make requests look like they come from real users. Apify Residential proxies are included and pre-configured by default.

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.