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

487

Total users

66

Monthly active users

20 hours ago

Last modified

Security

Limited permissions

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/

Your proxy choice sets the price per 1,000 domains. 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 and at least 30% faster than either proxy. If Google blocks the run, the Actor keeps going through datacenter proxy automatically, at no extra cost — the run log records when the switch happened.

Primary Use Cases

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

Key Features

  • Yes/No per domain, plus ad count, last-shown date, ad format and a direct link
  • Lists of any size, from one domain to thousands per run
  • Nothing is silently skipped — every domain in a finished run gets one row: Yes, No, or an error with the reason
  • Automatic retries — up to 3 attempts per domain on a fresh browser session
  • Resumable — click Resurrect on a timed-out or stopped run and it continues from the first unchecked domain, with no duplicates

How to Run the Actor

  1. Open the Actor and click Try for free.
  2. In the Input tab, add your domains and pick a region if needed — or switch to JSON and paste an input like the Minimal working example below.
  3. Click Start — progress shows in the run log.
  4. When it finishes, download the results from Storage → Dataset.

Input Configuration

Add your domains in the Input tab Form, or switch to JSON and paste something like this:

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 the last-shown date or format are missing from the output, the results page may not have finished loading before the Actor read it. 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————

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 6 batches of 1,000 (smaller batches finish sooner and are easier to retry).
  2. Create a Task per batch — on the Actor page, click Save as a new task (top right). 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.

Integrations & Scheduling

Results don't have to stay on Apify. Without writing any code you can:

  • Send results to Google Drive or Airtable — pick the integration on the Actor's Integrations tab and every run sends its results automatically.
  • Connect anything else via Zapier or Make — thousands of apps, triggered when a run finishes.
  • Fire a webhook to your own server the moment a run completes, with details of the finished run.
  • Pull the data over the API in JSON, CSV, Excel or XML — ideal for a script or a spreadsheet import. Ready-made curl, JavaScript and Python examples are in the developer docs on GitHub.

Run it on a schedule. Save your domain list as a task, set it to run every week and connect one of the integrations above — you'll spot domains that start advertising and see how their ad counts change, with no code at all.

Tips

  • Test first. Run one task with a small maxDomainsPerRun to gauge speed and cost before launching all batches.
  • Mind your plan's limits. Each run uses 4 GB of your plan's memory — the Free plan's 16 GB fits up to 4 runs at once. A run that would go over your plan's memory won't start, so start only as many tasks as it can hold.
  • 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. Up to ~1,000 domains per task without a proxy, or ~700 with one, fits the 2-hour default timeout.
  • Set your run timeout. The 2-hour default covers roughly 1,100 domains without a proxy, or 700–800 with a datacenter or residential proxy. 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, email alkausarimujahid@gmail.com, or visit my website ayzalsoft.com.