Google Ads Transparency Scraper: Ads by Advertiser or Domain
Pricing
from $1.20 / 1,000 ad founds
Google Ads Transparency Scraper: Ads by Advertiser or Domain
Ads from the Google Ads Transparency Center by domain, advertiser ID or name: format, dates shown, regions and image links. No proxy needed. Pay per ad.
Pricing
from $1.20 / 1,000 ad founds
Rating
0.0
(0)
Developer
kelvin lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
Google Ads Transparency Scraper
Get every ad a company runs on Google Search, YouTube, Maps, Play and Shopping, straight from the Google Ads Transparency Center. Search by domain, advertiser ID or company name, filter by country, platform, format and dates, and get one clean row per ad. Countries, impressions, targeting and who paid are included at no extra charge. It uses plain HTTP and Apify datacenter proxy (no browser, no residential proxy), so it is fast and you only pay per ad.
What you can use it for
- Competitor research: see every ad a competitor runs, when each one started and whether it is still running.
- Creative inspiration: collect image and text ads for a market or a brand, with links to each ad.
- Launch monitoring: schedule a run and watch
firstShownandlastShownto spot new campaigns and paused ones. - Agency audits and pitches: list a prospect's live ads by country and platform before the first call.
- Brand protection: find advertisers that promote your domain or use your brand name.
- EU ad research: impression ranges, platforms and targeting criteria that Google publishes for ads shown in the EU.
Input
Give at least one domain, advertiser ID or advertiser name.
| Field | Description |
|---|---|
domains | Websites such as nike.com. Finds ads from every advertiser that promotes the domain. A full URL is fine. |
advertiserIds | IDs starting with AR, or advertiser page URLs copied from adstransparency.google.com. |
advertiserNames | Company or brand names such as Nike. Each name is matched to the advertiser with that name and the most ads; the run log shows which one was picked. |
maxAdvertisersPerName | How many matching advertisers to scrape per name (default 1). Big brands often have one account per country. |
region | Only ads shown in this country (default anywhere). |
platform | Google Search, YouTube, Google Maps, Google Play or Google Shopping (default all). |
adFormat | Text, image or video (default all). |
dateFrom, dateTo | Only ads shown in this date range. |
includeDetails | Adds per-country dates and impressions, platforms, targeting, category, payer, variations and the advertiser's legal name, country and verification (default off). One extra request per ad, so runs are slower; no extra charge. |
maxAdsPerSearch | Ads per domain, advertiser ID or matched advertiser (default 100, up to 10,000). The most recently shown ads come first. |
maxAds | Ads in the whole run (default 1,000, up to 50,000). |
maxConcurrency | Requests in flight (default 3). The Actor also paces itself to about 2 requests per second and slows down when Google asks it to. |
timeoutSecs | Time limit per request (default 20 s). |
proxyConfiguration | Apify datacenter proxy by default: when Google refuses an IP, the Actor moves to a new one. You can also use your own proxy URLs, or turn the proxy off. Residential proxy is not supported. |
Example:
{"domains": ["nike.com"],"advertiserNames": ["Adidas"],"region": "US","adFormat": "IMAGE","includeDetails": true,"maxAdsPerSearch": 200}
Output
One row per ad. With includeDetails on (previewUrl shortened):
{"searchType": "domain","searchValue": "nike.com","advertiserId": "AR18378488041124659201","advertiserName": "Nike Retail BV","advertiserLegalName": "Nike Retail BV","advertiserCountry": "NL","advertiserVerified": true,"creativeId": "CR07893733415659241473","format": "IMAGE","firstShown": "2021-10-25T07:00:00.000Z","lastShown": "2026-10-21T04:21:23.645Z","daysShown": 1380,"matchedDomain": "nike.com","adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR07893733415659241473?region=anywhere","imageUrl": null,"imageWidth": null,"imageHeight": null,"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&creativeId=475652781299&…","region": "anywhere","regionCount": 1,"regions": [{"country": "FR","firstShown": "2023-03-01","lastShown": "2026-10-20","impressionsMin": 10000000,"impressionsMax": null,"platforms": [{ "platform": "SHOPPING", "impressionsMin": 15000, "impressionsMax": 20000 },{ "platform": "SEARCH", "impressionsMin": 10000000, "impressionsMax": null }]}],"platforms": ["SEARCH", "SHOPPING"],"euImpressionsMin": 10000000,"euImpressionsMax": null,"targeting": {"demographics": { "included": true, "excluded": false },"geography": { "included": true, "excluded": false },"contextual": { "included": true, "excluded": true },"customerLists": { "included": true, "excluded": false }},"category": "Apparel & Accessories","paidBy": "Nike Retail BV","variationCount": 3,"variationImageUrls": [],"billable": true,"error": null,"scrapedAt": "2026-10-21T04:42:18.558Z"}
- An impression range with
impressionsMax: nullis open-ended, e.g. "10M+". imageUrlis Google's archived picture of the ad. Image ads and most text ads have one; others have apreviewUrlto Google's preview script, and every ad hasadUrl.- Without
includeDetails,advertiserLegalName,advertiserCountry,advertiserVerifiedand the detail fields (regionCounttovariationImageUrls) arenull. billablesays whether the row was charged;errorsays why a search or an ad failed. A search that finds nothing gets one row with an error, so you can see which inputs had no ads.- The run's key-value store has a
SUMMARYrecord: ads saved, failed searches, requests and retries.
Pricing
Pay per event:
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
Ad found (only rows with billable: true) | $0.002 | $0.002 | $0.0016 | $0.0012 |
| Actor start (Apify's standard start fee) | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
That is $2 per 1,000 ads on the Free and Starter plans. Ad details cost nothing extra. Rows with an error, invalid input and duplicates are free: an ad found by two of your searches is saved and charged once. Set a maximum cost per run in the run options; the Actor stops cleanly when it is reached.
Limits
- Data comes from what Google publishes in the Transparency Center. Impression ranges, platforms and targeting are mostly published for ads shown in the EU (and for political ads), so ads shown only elsewhere usually have countries and dates but no impressions.
- The headline and description of text ads are not extracted: Google archives most text ads as images (
imageUrl). - Speed. Without details a run needs one request per 100 ads: 5,000 ads take under a minute. With details every ad needs its own request, so the Actor handles about 2 ads per second (1,000 ads in about 9 minutes).
- Google's limit per IP. Google allows each IP only a few hundred requests in a short time, then refuses it for a while; the shared IPs of cloud servers are sometimes refused from the start. That is why the Actor uses Apify datacenter proxy by default and moves to a new IP whenever Google refuses one. How far a large run with details gets depends on how many fresh proxy IPs your plan has (in our tests one run got 980 ads with details; without a proxy, about 300).
- When Google refuses. The Actor pauses and retries. If Google keeps refusing, the run stops asking, keeps what it saved and says so in the status and the
SUMMARYrecord; ads it could not finish are not charged. If Google refuses from the very first request, the run fails without any charge: try again later. - Only public data from the Transparency Center. You are responsible for how you use it.