Google Ads Transparency Center Scraper: Ads and Impressions
Pricing
from $0.97 / 1,000 results
Google Ads Transparency Center Scraper: Ads and Impressions
See every ad a competitor runs on Google. Search by domain or advertiser ID and export image, HTML5, video, search and Shopping ads with dates and impressions per country. Filter by platform, format, date and several countries, and monitor only new ads on a schedule. No login.
Pricing
from $0.97 / 1,000 results
Rating
5.0
(2)
Developer
Oski
Maintained by CommunityActor stats
2
Bookmarked
28
Total users
11
Monthly active users
6 days ago
Last modified
Categories
Share
Google Ads Transparency Center Scraper
See every ad an advertiser runs on Google, with the per-country impression ranges and first and last shown dates that most scrapers drop. Give it a domain like booking.com or an advertiser ID and get one clean row per ad creative: the image, HTML5 banner, video or text ad, when it ran and where. On a platform test, 1,000 Booking.com ads came back in under a minute for about $1.
No API key, no browser, no Google login. Part of an ad-intelligence suite with the Facebook Ad Library Scraper and the LinkedIn Ad Library Scraper, so you can cover Google, Meta and LinkedIn from one account.
What you can use it for
- Agencies: pull a prospect's full Google ad history before a pitch and show them what their competitors are running.
- Founders and marketers: track a competitor's new creatives each week and see which countries they are pushing.
- Creative teams: build a swipe file of real HTML5 banners, YouTube ads and search text ads, with headlines and calls to action as text.
- Media buyers: estimate how long a creative has run and how widely, from first and last shown dates and impression buckets per country.
- Lead generation: list which brands in a sector are actively spending on Google Ads right now.
- Competitor monitoring: schedule a daily run with Only new ads switched on and get, and pay for, only the creatives a competitor launched since yesterday.
- Channel research: see only a brand's YouTube video ads, or only its Search or Shopping ads, in the countries you care about.
How to use it
- Under Domains or brand names, add the website a brand advertises, such as
nike.com. Brand names and pasted links work too. - Pick a Country (or list several under More countries), and optionally a platform, ad format or date range.
- Leave Max ads in total at 1,000 (or change it) and click Start.
- When it finishes, open the Output tab and download as CSV, Excel or JSON.
While it runs, the status line at the top of the run page shows progress (for example "Advertiser 1 of 3: nike.com. 400 ads so far."). When it finishes, the same line says what was found and explains anything that was skipped, so you never have to read the log.
How much does it cost?
You pay a $0.002 start fee plus $0.001 per ad returned, whatever the detail level. Resolving banners, videos and text ads is included. You only pay for ads actually delivered.
| Ads returned | Maths | Cost |
|---|---|---|
| 100 | $0.002 + 100 x $0.001 | about $0.10 |
| 1,000 | $0.002 + 1,000 x $0.001 | about $1.00 |
| 10,000 | $0.002 + 10,000 x $0.001 | about $10.00 |
A typical 1,000-ad competitor export costs about $1.
Input
| Field | What it does |
|---|---|
searchTerms | Advertisers: a website domain (nike.com, most reliable), a brand name, or a pasted website link. |
advertiserIds | Exact advertiser IDs (AR02934798844673654785) or advertiser links copied from adstransparency.google.com. |
region | Country filter, or anywhere. Genuinely filters results. |
regions | Several countries in one run: names or codes (United Kingdom, Ireland, US). Overrides Country. |
platforms | Only ads shown on search, youtube, shopping, maps or play. Filtered by Google, so narrow runs are fast. Google records platform only for ads shown since September 2023. |
adFormat | all, text, image or video, filtered by Google. |
datePreset | any, last7, last30, last90, last365, or custom to use dateFrom and dateTo. Filtered by Google. |
detailLevel | basic (fastest, one row per creative) or full (adds per-country impressions and dates). Same price per row. |
resolveMedia | On by default. Reads each ad's rendering script to return the real banner, video or text ad. Turn off for the fastest raw listing. |
maxResults | Hard cap on total rows (default 1,000). |
maxResultsPerAdvertiser | Optional per-brand cap. |
dateFrom / dateTo | Custom date window from the date pickers or relative dates such as 30 days, used when datePreset is custom or any. |
onlyNewAds | Monitoring mode: remembers every ad this search returned and skips them on later runs, so you only get and pay for new ads. |
monitorName | Optional name for that memory, so several schedules can share or separate it. |
writeSummary | On by default. Saves a free per-advertiser summary as SUMMARY in the run's key-value store. |
maxPagesPerAdvertiser | Advanced. Safety stop, 100 creatives per page, default 25 (up to 2,500 ads per advertiser). |
proxyConfiguration | Advanced. Apify Proxy, residential by default. The actor rotates IPs through it. |
Example for a competitor sweep:
{"searchTerms": ["booking.com", "expedia.com", "hotels.com"],"region": "GB","detailLevel": "full","maxResults": 1000,"maxResultsPerAdvertiser": 400,"dateFrom": "2026-01-01"}
Output
One record per ad creative:
{"search_term": "booking.com","advertiser_id": "AR02934798844673654785","advertiser_name": "Booking.com","creative_id": "CR13943466878123900929","format": "image","first_shown": "2021-10-25","last_shown": "2026-07-05","days_running": 1715,"is_active": false,"image_url": "https://tpc.googlesyndication.com/archive/simgad/10226145935904981944","creative_url": "https://adstransparency.google.com/advertiser/AR029.../creative/CR139...?region=GB","regions": [{ "region_code": "BE", "region_name": "Belgium", "impressions_min": 1000, "first_shown": "2023-03-27", "last_shown": "2026-07-05" }],"region_count": 4,"impressions_min_total": 4000,"detail_level": "full"}
format is image, html5, video, text or shopping, worked out from the creative's real content and Google's own format code. Search text ads keep a picture preview in image_url, but are labelled text. days_running counts the days from first to last shown, and is_active is true when the ad was shown in the last 3 days. Extra fields depend on the ad type:
| Ad type | Fields |
|---|---|
| HTML5 banner | html5_url, width, height |
| YouTube video | youtube_video_id, youtube_url, video_thumbnail_url, often headline, description, video_duration |
| Video (VAST) | video_urls (MP4 files with width, height and bitrate, largest first), landing_url, video_duration |
| Responsive display | headline, description, call_to_action, display_advertiser, image_urls, logo_url |
| Search text ad | headline, display_url, description, sitelinks, call_to_action, and locations (store name, address, city, postcode) for location ads |
| Shopping ad | headline (product title), display_advertiser (merchant), image_urls |
search_term says which input found each row, so a 20-brand run stays easy to split even when a domain returns an agency's ads. media_resolved tells you whether the rendering script was read. When Google itself cannot render an ad, preview_unavailable_reason gives Google's reason. Impressions are published by Google as ranges, so impressions_min is the lower bound of the bucket, never an exact count.
Tips for bigger runs
- Add more advertisers. Put 10 to 50 competitor domains in one run and use
maxResultsPerAdvertiserso one giant brand does not use the whole budget. - Raise the caps together. For advertisers with more than 2,500 creatives, raise both
maxResultsandmaxPagesPerAdvertiser. - Use
basicfor volume,fullfor depth. Both cost the same;basicis quicker,fulladds per-country impressions and dates. - Keep the residential proxy on. Google rate limits per IP, and the actor rotates to a fresh IP the moment it is throttled.
- Filter at the source.
platforms,adFormat,datePresetandregionsare applied by Google itself, so a run for one brand's recent YouTube ads is quick and cheap. - Monitor instead of re-downloading. With
onlyNewAdson a daily schedule you only pay for creatives that are new since the last run. - Read the summary first. The free
SUMMARYrecord in the run's key-value store shows each advertiser's total and active ads, format mix and top countries at a glance.
Scheduling and integrations
Save your input as a task and schedule it daily or weekly in Apify to track competitors over time. Results can go straight to Google Sheets, a webhook, Make, Zapier or your own code via the Apify API:
curl -X POST "https://api.apify.com/v2/acts/oski~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms": ["booking.com"], "region": "GB", "maxResults": 200}'
The sync endpoint waits up to 5 minutes. For bigger runs, start the actor with the runs endpoint and fetch the dataset when it finishes.
If something looks wrong
The status line at the end of every run explains anything that was skipped or came back empty. The common messages:
| Message | What to do |
|---|---|
| Input problem: ... | Something in the input needs changing, and the message says what. The run stopped before anything was charged. |
| No ads found for: ... | Try the exact domain the brand sends ads to, another country, or a wider date range. |
| Could not match: ... | The brand name did not match an advertiser. Use its website domain instead. |
| Max ads in total (N) was reached before ... | Raise Max ads in total to include every advertiser. |
| Google slowed us down on ... | Run it again later; ads already collected are kept. |
Still stuck? Open an issue on the actor page with the run link and it gets looked at quickly.
FAQ
Is it legal? It reads only public disclosure data that Google publishes in its Ads Transparency Center. It uses no login and accesses no private account. You are responsible for how you use the data, including respecting privacy law where it applies.
Do I need a Google account or API key? No. Google has no official API for the Transparency Center, and this actor needs none.
Why did I get fewer ads than expected? The advertiser may run fewer ads in the chosen country or date window, a brand name may have matched a small namesake (use the domain or advertiser ID), or a cap was hit. When an input finds nothing, the run's status message says which one.
How fresh is the data? Each run reads the Transparency Center live, so you get what Google shows at that moment.
Why can some ads not be previewed? Contact form, checkout and password-protected creatives cannot be previewed by anyone. They are returned with preview_unavailable_reason rather than faked.
What if it breaks? Open an issue on the actor page. It gets fixed fast.
Other scrapers from Oski
- Facebook Ad Library Scraper: Facebook and Instagram ads by keyword or advertiser Page ID.
- LinkedIn Ad Library Scraper: B2B ads with paying entity, impressions by country and targeting.
- Website Contact Finder: emails, phones and socials from the advertisers you find.
- UK Decision Maker Finder: named directors for UK company websites.