Google Ads Scraper
Pricing
from $0.70 / 1,000 scraped ads
Google Ads Scraper
Scrape Google Ads Transparency Center creatives from domains, keywords, advertiser IDs, or URLs. Export dates, formats, media URLs, copy, targeting, impressions, and platform filters for competitor research.
Pricing
from $0.70 / 1,000 scraped ads
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
103
Total users
31
Monthly active users
14 hours ago
Last modified
Categories
Share
🔎 Google Ads library scraper for Transparency Center creatives
Google Ads Scraper extracts public ad creatives from the Google Ads Transparency Center. It is for marketers, PPC teams, and analysts who want to see what ads a brand runs. Add a domain, keyword, advertiser ID, creative ID, or Transparency Center URL. You get one row per ad with advertiser IDs, creative IDs, formats, shown dates, ad copy, media URLs, targeting, impressions, and variants when Google shows them.
- Run Google Ads library research to build an archive of public ad creatives by brand, domain, keyword, or advertiser ID.
- Use the Google Ads Transparency data exporter to send ad IDs, dates, formats, and links to CSV, JSON, Excel, or your BI tool.
- Set up competitor ad monitoring to see when brands start new Search, YouTube, Shopping, Maps, or Play ads.
- Start a PPC creative analysis to compare ad copy, images, videos, targeting, and impression ranges.
- Do a known creative refresh to update shown dates and details for ads you already saved.
📦 Google ad data you get
Each dataset row is one Google Ads Transparency Center creative. Every row has the same fields, so your tools can read one stable shape.
- Ad identity: advertiser ID, advertiser name, legal name, region, verified status, and creative ID.
- Ad copy: headline, body text, display URL, landing page URL, and call-to-action label.
- Media: image URLs, video URLs, a preview URL, and a saved HTML preview file.
- Timing: first shown date, last shown date, and number of days shown.
- Reach and targeting: impression ranges, targeting flags, and stats by region and Google platform.
- Variants: each creative version with its own copy, links, images, and videos.
Google does not show every field for every ad. When a value is missing, the field is null or an empty array. The Actor does not guess values.
🚀 How to scrape Google ads
- Add one or more values in Targets. You can use domains such as
nike.com, keywords, advertiser IDs, creative IDs, or Google Ads Transparency Center URLs. - Set Maximum ads to cap the number of ads for the whole run.
- Choose a Region, or pick Worldwide.
- If you want, choose a Platform, Ad format, Start date, or End date.
- Run the Actor. Then export the dataset or read it through the Apify API.
For a first run, keep the nike.com target, region US, and Maximum ads set to 10.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
targets | array of strings | Required. Domains, keywords, advertiser IDs, creative IDs, or Google Ads Transparency Center URLs. Duplicate and empty values are skipped. The form starts with nike.com. |
maxResults | integer | Most ads to save across all targets. Use 0 or leave it empty to get all available ads. The form starts with 10. |
region | string | Two-letter country code, such as US or SE. Use an empty value for Worldwide. Default: US. |
platform | string | google_search, youtube, google_shopping, google_maps, or google_play. Empty means all platforms. Default: empty. |
adFormat | string | text, image, or video. Empty means all formats. For Shopping ads, choose google_shopping in platform. Default: empty. |
dateFrom | string | Optional. Keep ads shown on or after this date, in YYYY-MM-DD form. |
dateTo | string | Optional. Keep ads shown on or before this date, in YYYY-MM-DD form. It must not be before dateFrom. |
Example input
{"targets": ["nike.com"],"maxResults": 10,"region": "US","platform": "","adFormat": ""}
🧾 Output
Output fields
| Field | Type | What it does |
|---|---|---|
submittedTarget | string | The input target that found this ad. |
advertiserId | string | Google Ads Transparency Center advertiser ID. |
advertiserName | string | Advertiser name shown by Google. |
advertiserLegalName | string or null | Legal advertiser name, when Google shows it. |
advertiserRegionCode | string or null | Advertiser region code, when Google shows it. |
advertiserVerified | boolean or null | Whether Google marks the advertiser as verified. |
creativeId | string | Google creative ID for the ad. |
format | string | text, image, video, or unknown. |
adUrl | string | Google Ads Transparency Center page for this ad. |
creativePreviewUrl | string or null | Google-hosted preview link for the creative. |
previewDownloadUrl | string or null | Link to download the ad preview as an HTML file. |
firstShown | string | First date Google reports the ad was shown, in YYYY-MM-DD form. |
lastShown | string | Last date Google reports the ad was shown, in YYYY-MM-DD form. |
totalDaysShown | integer | About how many days the ad was shown. |
headline | string or null | Ad headline or product title, when available. |
body | string or null | Ad body or description text, when available. |
cta | string or null | Call-to-action label, when available. |
displayUrl | string or null | Website address shown in the ad, when available. |
destinationUrl | string or null | Landing page link, when available. |
imageUrls | array of strings | Image file URLs for the creative. |
videoUrls | array of strings | Video file or playback links for the creative. |
impressions | object or null | Overall impression range, when Google shows it. |
impressions.lowerBound | integer or null | Lowest impression count reported. |
impressions.upperBound | integer or null | Highest impression count reported. |
targeting | object or null | Targeting flags, when Google shows them. |
targeting.demographics | object | included and excluded flags (boolean or null) for demographic targeting. |
targeting.geography | object | included and excluded flags for location targeting. |
targeting.contextual | object | included and excluded flags for context targeting. |
targeting.customerLists | object | included and excluded flags for customer-list targeting. |
targeting.topicsOfInterest | object | included and excluded flags for interest targeting. |
regionStats | array of objects | Stats for each country or region where the ad was shown. |
regionStats.regionCode | string | Country or region code. |
regionStats.regionName | string | Country or region name. |
regionStats.firstShown | string or null | First shown date in this region. |
regionStats.lastShown | string or null | Last shown date in this region. |
regionStats.impressions | object or null | Impression range in this region, with lowerBound and upperBound. |
regionStats.platformStats | array of objects | Impression ranges by Google platform in this region. Each item has the same fields as platformStats. |
platformStats | array of objects | Overall impression ranges by Google platform. Left out when Google gives no overall ranges. |
platformStats.platform | string | google_search, youtube, google_shopping, google_maps, google_play, or unknown. |
platformStats.platformName | string | Platform name reported by Google. |
platformStats.impressions | object or null | Impression range, with lowerBound and upperBound. |
variants | array of objects | Each version of the creative. |
variants.headline | string or null | Headline or product title for this version. |
variants.body | string or null | Body or description text for this version. |
variants.displayUrl | string or null | Website address shown in this version. |
variants.destinationUrl | string or null | Landing page link for this version. |
variants.cta | string or null | Call-to-action label for this version. |
variants.imageUrls | array of strings | Image file URLs for this version. |
variants.videoUrls | array of strings | Video file or playback links for this version. |
Example ad
{"submittedTarget": "nike.com","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","advertiserLegalName": "Nike, Inc.","advertiserRegionCode": "US","advertiserVerified": true,"creativeId": "CR13798212767800360961","format": "text","adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR13798212767800360961","creativePreviewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=9975158271&creativeId=681045306684&uiFeatures=12&adGroupId=145820412956&versionId=4&assets=%3DH4sIAAAAAAAAAONS4OLkOHpg28G1TALMXBwcN66eWSspwMjFybF6N1iQUYqd49_SpXOX8Uixc1x9_2h_B5MUO0dD46yHmzil2DnO9b079odJio3j2eSDbb5S7Bwz_txbDVZy9PfUpadBmp70gJWwc8yGSc2DMRq7Xj-fBGKc6ACpAQDxWbZvjQAAAA&allowedVariations=39&sig=ACiVB_z2Hyrb2YHR8mN2wXCHboy0IG26TQ&htmlParentId=fletch-render-12062201132597990860&responseCallback=fletchCallback12062201132597990860","previewDownloadUrl": "https://api.apify.com/v2/key-value-stores/shctdJCS6pQyRAD9y/records/preview-CR13798212767800360961.html?signature=1iPNotShmCTquPSjposGW","firstShown": "2023-11-17","lastShown": "2026-10-30","totalDaysShown": 1079,"headline": "Nike® Official Site","body": "Nike® basketball shoes for your young athletes. Designed with comfort and mobility.","cta": null,"displayUrl": "nike.com","destinationUrl": null,"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/13127716173736170281","https://tpc.googlesyndication.com/archive/simgad/9030713188503643279","https://tpc.googlesyndication.com/archive/simgad/15393350721185562867","https://tpc.googlesyndication.com/archive/simgad/10965413325068165946"],"videoUrls": [],"impressions": null,"targeting": null,"regionStats": [{"regionCode": "US","regionName": "United States","firstShown": null,"lastShown": "2026-10-29","impressions": null,"platformStats": []}],"variants": [{"headline": null,"body": null,"displayUrl": null,"destinationUrl": null,"cta": null,"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/13127716173736170281"],"videoUrls": []},{"headline": null,"body": null,"displayUrl": null,"destinationUrl": null,"cta": null,"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/9030713188503643279"],"videoUrls": []},{"headline": null,"body": null,"displayUrl": null,"destinationUrl": null,"cta": null,"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/15393350721185562867"],"videoUrls": []},{"headline": null,"body": null,"displayUrl": null,"destinationUrl": null,"cta": null,"imageUrls": ["https://tpc.googlesyndication.com/archive/simgad/10965413325068165946"],"videoUrls": []},{"headline": "Nike® Official Site","body": "Nike® basketball shoes for your young athletes. Designed with comfort and mobility.","displayUrl": "nike.com","destinationUrl": null,"cta": null,"imageUrls": [],"videoUrls": []}]}
💳 Pricing
This Actor uses pay-per-event pricing. You pay only for ads saved to your dataset.
- Scraped ad: one Google ad saved to your dataset, with all the details the Actor could get for it.
The price per ad depends on your Apify plan. It is $0.0009 on the Free and Bronze plans, $0.0008 on Silver, and $0.00065 on Gold and higher plans. For example, 1,000 ads on the Free plan cost $0.90. A target that finds no ads adds no ad charge. When your spending limit is reached, the Actor stops saving new ads.
These plan prices start on November 13, 2026. Until then, each saved ad has two charges: $0.0007 for the Scraped ad event and $0.0001 for the Added ad detail event. That is $0.0008 per ad, so 1,000 ads cost $0.80.
🔌 Integrations
- Use the Apify API to send Google Ads creative rows to your own app or data warehouse.
- Schedule recurring runs to monitor brands, domains, or advertiser IDs.
- Export results as JSON, CSV, Excel, XML, RSS, or HTML.
- Connect webhooks to alert your team when a run finishes.
- Send rows to BI tools, spreadsheets, CRM workflows, or internal reporting systems.
❓ FAQ
Why do some ads have no headline or body text?
Google does not share readable text for every ad. When the Actor cannot read the text, headline and body stay null. It does not guess missing text.
Can I search by advertiser ID or creative ID?
Yes. Add an advertiser ID such as AR16735076323512287233. For one ad, add its Google Ads Transparency Center creative URL.
How do I get every ad from a domain?
Add the domain in Targets and set Maximum ads to 0. The Actor then saves all ads it can find for that domain and your filters.
Why are some fields empty?
Google Ads Transparency Center does not show every field for every ad. Copy, landing page links, impression ranges, targeting, region stats, platform stats, and media links can be missing on some ads.
Do I need a Google Ads account?
No. The Actor reads public Google Ads Transparency Center data. You do not need a Google Ads account, Google cookies, or a Google API key.
Is this a Google Ads library scraper?
Yes. It scrapes the public Google Ads Transparency Center, which many people call the Google Ads library. It does not read private Google Ads account data.
Can it scrape live Google Search ads?
No. This Actor reads the Google Ads Transparency Center archive. For live paid Shopping ads on Google Search pages, use Google Shopping Ads Scraper from the related Actors below.
Why not use the Google Ads API?
The Google Ads API is for account and campaign data you are allowed to access. This Actor is for public ad research across domains, advertisers, keywords, and Google Ads Transparency Center URLs.
What are Google Ads Transparency Center alternatives?
For live Shopping ads, use a Google Shopping ads scraper. For other ad libraries, use tools made for that platform, such as LinkedIn, TikTok, Pinterest, or Snapchat ad scrapers.
📝 Changelog
v1.0 (30-10-2026)
- Every row now has full ad details, so the
detailLevelinput is removed. Remove it from saved inputs. The separate details charge ends when the new prices start on November 13, 2026. - The
downloadMediainput and thestoredMediaoutput field are removed. The Actor no longer saves its own copies of ad images and videos. UseimageUrlsandvideoUrlsfor links to the ad media. The newpreviewDownloadUrlfield links to a saved HTML copy of the ad preview when one is available. - The
shoppingchoice is removed from theadFormatinput and from theformatoutput field. Shopping is a place where ads show, not an ad format. To find Shopping ads, setplatformtogoogle_shopping. - Ad rows now fill
headlineandbodyfrom the ad preview when Google has that text, so fewer rows have empty ad copy. - New
ctaandadvertiserVerifiedoutput fields show the call to action and whether Google marks the advertiser as verified.
v0.1
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Google Shopping Ads Scraper: see live paid Shopping ads on Google Search, with prices and merchants.
- LinkedIn Ads Library Scraper: research the same brands' B2B ads in the LinkedIn Ads Library.
- TikTok Creative Center Scraper for Top Ads: compare Google creatives with top TikTok ads.
- Pinterest Ads Scraper: collect public Pinterest ads with targeting and reach data.
- Snapchat Ads Scraper: check a brand's ads in the Snapchat Ads Gallery.
Made with ❤️ by Maxime Dupré