Google Ads Transparency Scraper — $0.80/1K avatar

Google Ads Transparency Scraper — $0.80/1K

Pricing

Pay per event

Go to Apify Store
Google Ads Transparency Scraper — $0.80/1K

Google Ads Transparency Scraper — $0.80/1K

Scrape Google Ads Transparency Center by keyword, domain, advertiser ID or pasted URL. Filter by country, date, format and platform. Ad creatives or advertiser summaries, image previews, per-country reach and EU impression ranges. $0.80 per 1,000 delivered results, no start fee, no login.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Meka.im

Meka.im

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Categories

Share

Find the Google ads behind any brand — across Search, YouTube, Shopping, Maps and Play — without Google Ads API access. Search by brand, exact domain, advertiser ID, or a pasted Transparency Center URL, then filter by country, date, format and platform. Export creative previews, advertiser identity, first/last shown dates, days active, every creative variation, per-country reach and — for ads served in the EU — published impression ranges with a per-platform split.

$0.80 per 1,000 delivered results. No start fee. The common price band for comparable Actors on this Store was $1–$3 per 1,000 ads when we surveyed it on 2026-09-20. You are billed only for rows that were parsed and written to the dataset: no charge for empty searches, failed lookups, invalid inputs, or duplicates, and a resumed run never bills the same row twice.

Built for competitor monitoring, creative research, agency audits and scheduled ad intelligence. No login, cookies, browser or Google account required.

Quick start

  1. Open the Actor, paste a brand name or domain into Brand names or domains, and click Start.
  2. Leave Country / region at US (or set DE, GB, ANYWHERE, …).
  3. Watch rows stream into the dataset, then export JSON, CSV, Excel or XML — or pull them over the API.

A first run that costs about 8 cents:

{
"queries": ["Nike"],
"domains": ["hellofresh.com"],
"resultType": "ads",
"region": "US",
"maxResults": 100,
"includeDetails": true
}

Input

Four targeting inputs, freely mixable. They are de-duplicated, and the run processes them in this order: queriesdomainsadvertiserIdsstartUrls.

InputWhat it does
queriesBrand names (Nike) or bare domains (nike.com). Brand names go through the Transparency Center's own autocomplete.
domainsExact domains. Returns every advertiser account whose ads point at that domain.
advertiserIdsAdvertiser IDs starting with AR.
startUrlsPasted Transparency Center URLs — advertiser pages, creative pages or domain search pages.
resultTypeads for individual creatives, advertisers for one summary row per advertiser.
regionISO country code (US, DE, GB …), ANYWHERE, or several codes comma-separated.
platformsSEARCH, YOUTUBE, SHOPPING, MAPS, PLAY.
adFormatALL, TEXT, IMAGE, VIDEO, or several comma-separated.
startDate / endDateYYYY-MM-DD window.
maxAdsPerSearchCap per target. Default 100.
maxResultsHard cap on delivered rows for the whole run — this is what you pay for. Default 1000.
maxAdvertisersPerQueryHow many advertisers a brand-name query expands to. Default 5.
includeDetailsOn by default. Adds variations, per-country reach and EU impressions. Turn it off for a faster list-only run.
detailConcurrencyParallel detail batches. Default 2.

Output

In ads mode each creative is one dataset row:

{
"creativeId": "CR15180131156851949569",
"advertiserId": "AR00930880903813529601",
"advertiserName": "Grocery Delivery E-Services USA Inc.",
"domain": "hellofresh.com",
"format": "TEXT",
"firstShown": "2025-09-29T17:01:00.000Z",
"lastShown": "2026-09-20T03:42:35.000Z",
"shownForDays": 351,
"previewType": "image",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/8397313563983018971",
"previewUrl": null,
"width": 348,
"height": 232,
"googleCreativeId": null,
"googleCustomerId": null,
"adGroupId": null,
"versionId": null,
"adUrl": "https://adstransparency.google.com/advertiser/AR00930880903813529601/creative/CR15180131156851949569?region=US",
"region": "US",
"variationCount": 1,
"variations": [
{ "type": "image", "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/8397313563983018971",
"previewUrl": null, "width": 348, "height": 232,
"googleCreativeId": null, "googleCustomerId": null, "adGroupId": null, "versionId": null }
],
"regionsShown": [{ "region": "US", "lastShownDate": "2026-09-19" }],
"euTransparency": {
"available": true,
"impressions": { "lowerBound": 3000000, "upperBound": 3500000 },
"firstShownDate": "2023-07-02",
"lastShownDate": "2026-09-19",
"platformDistribution": [
{ "platform": "SEARCH", "impressions": { "lowerBound": 3000000, "upperBound": 3500000 } },
{ "platform": "SHOPPING", "impressions": { "lowerBound": null, "upperBound": 1000 } }
]
}
}

Notes on the values:

  • shownForDays is a strong "this creative is working" signal for competitive analysis.
  • imageUrl is a direct CDN link and is present for archived image previews; text, video and rich-media creatives expose a Google-hosted previewUrl instead, which is a render page rather than a raw asset.
  • googleCustomerId groups creatives from the same ad account; adGroupId clusters them by campaign. Both are null for plain image ads.
  • regionsShown lists every country the creative ran in, each with that country's own last-shown date.
  • euTransparency.available is false when Google publishes no EU block for that creative. Unknown numbers come through as null; a 0 in the data is a real zero.
  • With includeDetails off, variationCount, variations, regionsShown and euTransparency are omitted rather than returned empty.

In advertisers mode each row is an advertiser summary with advertiserId, name, countryCode, approxAdCountLow / approxAdCountHigh (Google's own approximate range), matchedQuery, region and advertiserUrl — a cheap way to check which companies on a list run Google Ads before pulling creatives.

EU impression data

Advertisers serving in the EU must publish impression ranges under the Digital Services Act, and the Transparency Center exposes them per creative. This Actor surfaces that block as euTransparency, including the split by Google surface. In a 60-creative sample taken on 2026-09-20, every creative from German targets carried the block and 18 of those 30 carried impression ranges, while only 2 of 30 US creatives did. Treat it as a bonus for EU-served ads, not as a field present on every row.

Pricing

Pay-per-event, $0.0008 per delivered result — $0.80 per 1,000. Platform usage is included; there is no monthly rental and no Actor-start fee.

EventPriceWhen it fires
ad-delivered$0.0008One ad creative written to the dataset in ads mode
advertiser-delivered$0.0008One advertiser summary written in advertisers mode

Not billed: searches that return nothing, invalid inputs, duplicate targets, failed detail lookups, and rows a resumed run had already delivered. Set Max results for the run or the run's maximum total charge for a hard ceiling — the run stops before publishing a row it cannot bill.

Limits

  • Not available from the public protocol: ad headline, body copy and CTA text; landing-page URLs; video file URLs, video thumbnails and video durations. Video creatives do come back with their identity, format, dates and per-country reach, but without playable media.
  • Not inferred: whether an ad is currently running or has been retired, advertiser verification status, and whether a creative is a carousel. The source publishes no field for these, and this Actor does not guess.
  • Platform filtering covers creatives shown on or after 2023-09-04, which is a limitation of the source.
  • Ad format filtering is applied to the returned rows; the upstream protocol has no format filter.
  • Upstream pages are capped at 100 rows; the Actor paginates internally, so larger maxResults values simply take more requests.
  • With includeDetails on, a creative whose detail lookup keeps failing is not delivered and not billed.

API and automation

Start runs and pull results over the Apify API, the JavaScript client or the Python client. Put it on a schedule to track a competitor week over week, and use webhooks to trigger downstream work. The output is plain JSON, so it also plugs into agents through the Apify MCP server.

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('google-ads-transparency-scraper').call({
queries: ['Nike'],
region: 'US',
platforms: ['YOUTUBE'],
adFormat: 'VIDEO',
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'creatives');

Python:

from apify_client import ApifyClient
client = ApifyClient("MY_APIFY_TOKEN")
run = client.actor("google-ads-transparency-scraper").call(run_input={
"domains": ["hellofresh.com"],
"region": "DE",
"startDate": "2026-01-01",
"maxResults": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["creativeId"], item["format"], item["shownForDays"])

FAQ

Do I need a Google account, cookies or a proxy? No. The Actor reads the public Transparency Center over anonymous HTTP from data-centre IPs.

Why is imageUrl null on some rows? Those creatives expose a Google-hosted render page instead of an archived bitmap. previewUrl carries it, and previewType tells you which form you got.

Can I get the ad's text or landing page? Not from this source. The archived preview is a rendered bitmap and the render page contains no copy, so this Actor does not claim those fields.

What happens if I abort a run and start it again on the same dataset? It resumes. Rows already in the dataset are skipped, physical order is preserved, and nothing is billed twice.

How do I keep spend predictable? Set maxResults, and optionally set a maximum total charge on the run. The run stops before it would publish a row beyond your budget.

Which Google surfaces are covered? Search, YouTube, Shopping, Maps and Play. Filter with platforms, or leave it empty for every surface.

This Actor is an independent tool. It is not affiliated with, endorsed by, sponsored by or certified by Google LLC or any of its subsidiaries, and it is not an official Google product. "Google", "Google Ads" and "Google Ads Transparency Center" are trademarks of their respective owners and are used here only descriptively, to identify the publicly accessible source this Actor reads. The Actor collects only information Google publishes publicly. You are responsible for ensuring your use of that information complies with applicable laws, regulations and the source website's terms.