Google Ads Transparency Scraper — $0.80/1K
Pricing
Pay per event
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
Maintained by CommunityActor 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
- Open the Actor, paste a brand name or domain into Brand names or domains, and click Start.
- Leave Country / region at
US(or setDE,GB,ANYWHERE, …). - 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:
queries → domains → advertiserIds → startUrls.
| Input | What it does |
|---|---|
queries | Brand names (Nike) or bare domains (nike.com). Brand names go through the Transparency Center's own autocomplete. |
domains | Exact domains. Returns every advertiser account whose ads point at that domain. |
advertiserIds | Advertiser IDs starting with AR. |
startUrls | Pasted Transparency Center URLs — advertiser pages, creative pages or domain search pages. |
resultType | ads for individual creatives, advertisers for one summary row per advertiser. |
region | ISO country code (US, DE, GB …), ANYWHERE, or several codes comma-separated. |
platforms | SEARCH, YOUTUBE, SHOPPING, MAPS, PLAY. |
adFormat | ALL, TEXT, IMAGE, VIDEO, or several comma-separated. |
startDate / endDate | YYYY-MM-DD window. |
maxAdsPerSearch | Cap per target. Default 100. |
maxResults | Hard cap on delivered rows for the whole run — this is what you pay for. Default 1000. |
maxAdvertisersPerQuery | How many advertisers a brand-name query expands to. Default 5. |
includeDetails | On by default. Adds variations, per-country reach and EU impressions. Turn it off for a faster list-only run. |
detailConcurrency | Parallel 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:
shownForDaysis a strong "this creative is working" signal for competitive analysis.imageUrlis a direct CDN link and is present for archived image previews; text, video and rich-media creatives expose a Google-hostedpreviewUrlinstead, which is a render page rather than a raw asset.googleCustomerIdgroups creatives from the same ad account;adGroupIdclusters them by campaign. Both arenullfor plain image ads.regionsShownlists every country the creative ran in, each with that country's own last-shown date.euTransparency.availableisfalsewhen Google publishes no EU block for that creative. Unknown numbers come through asnull; a0in the data is a real zero.- With
includeDetailsoff,variationCount,variations,regionsShownandeuTransparencyare 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.
| Event | Price | When it fires |
|---|---|---|
ad-delivered | $0.0008 | One ad creative written to the dataset in ads mode |
advertiser-delivered | $0.0008 | One 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
maxResultsvalues simply take more requests. - With
includeDetailson, 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 ApifyClientclient = 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.
Legal
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.