Google Ads Transparency Center Scraper & API
Pricing
from $1.00 / 1,000 results
Google Ads Transparency Center Scraper & API
Google Ads Transparency Center scraper & API: extract ads across Search, YouTube, Shopping, Maps & Play by brand, domain or advertiser ID. No login. Competitor ad intelligence, monitor mode & export JSON/CSV/Excel.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Insights Data
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
📢 What is Google Ads Transparency Center Scraper & API?
Google Ads Transparency Center Scraper & API lets PPC marketers, agencies, researchers, and lead-generation teams extract public ad creatives and advertiser summaries from the Google Ads Transparency Center, without copying ads by hand. Just enter a domain, a brand name, or a Google Ads advertiser ID and click Start: no coding, no login, and no Google account needed.
You get structured data instead of screenshots, ready for spreadsheets, dashboards, and AI tools.
- Google Ads competitor analysis: see which creatives, formats, and run dates your rivals use.
- Competitor ad monitoring: schedule runs that return only ads launched since the last run.
- Ad-checks for lead generation: find out which companies on your list advertise on Google.
- Creative swipe files: collect image, video, and text ad previews in one place.
- Google political ads transparency research: filter to political and election ads, with spend and impression ranges where Google publishes them.
- Dashboards and AI agents: send ad data to Google Sheets, BI tools, or AI assistants through the API.
The Transparency Center website has no bulk export, and Google's official API access only covers ads served in the EEA (plus special access for regulators), as explained in Google's Ads Transparency Center help page. This Actor returns the public data for the region you choose as JSON, CSV, or Excel.
What can this Google Ads scraper do?
- 🔗 Accept five kinds of input in one field: domains, brand names, advertiser IDs (
AR…), advertiser + creative ID pairs (AR…/CR…), and pasted Transparency Center URLs - 📰 Two modes: individual ad creatives, or one summary row per advertiser with approximate ad counts
- 🎯 Filter results by region, platform (Search, YouTube, Shopping, Maps, Play), ad format (text, image, video), date window, political ads, impression ranges, and candidate name
- 🔬 Optional full details: A/B creative variations, the countries where each ad ran with first and last shown dates, end payer, and AI-generated-media disclosure
- 👁️ Monitor mode: only ads not seen in previous runs, made for scheduled runs
- 📦 Export Google Ads Transparency data to JSON, CSV, Excel, XML, or HTML
- 🔌 Use it as an API: run it via API, schedule runs, monitor them, and connect Make, Zapier, Google Sheets, and more
📋 What data can Google Ads Transparency Center Scraper & API extract?
Every ad record comes with the creative, the advertiser, and its run history. The Google Ad Transparency Center website shows ads one advertiser at a time. This Actor works as a Google Ads Transparency Center data exporter and turns each ad into one row with these fields:
🆔 Creative ID creativeId | 👤 Advertiser advertiserName, advertiserId |
🌐 Domain domain | 📝 Format format (TEXT, IMAGE, VIDEO) |
📸 Preview imageUrl, previewUrl, iframeUrl, htmlSnippet | 📐 Size width, height |
📅 First and last shown firstShown, lastShown | ⏱️ Days shown shownForDays |
📍 Region region, politicalRegion | 💲 Spend range spendLowerBound, spendUpperBound |
📈 Impression range impressionsLowerBound, impressionsUpperBound | 🏢 Billing country billingCountry, disclosureCountry |
🔀 A/B variations variations | 🗺️ Countries shown regionsShown, servedCountries |
💳 End payer endPayerName | 🤖 AI-generated media containsSyntheticMedia |
✔️ Unverified advertiser isAdvertiserUnverified | 🔗 Ad page adUrl |
In advertiser-summary mode you get advertiserName, advertiserId, billingCountry, isUnverified, runsGoogleAds, and approximate ad-count and impression ranges (approxAdCountLowerBound, approxAdCountUpperBound, approxImpressionsLowerBound, approxImpressionsUpperBound).
Note: Spend and impression ranges are mainly published for political ads. For ordinary commercial ads, the impression bounds are
nulland the spend bounds are empty lists[].hasImpressionDataandhasSpendDatatell you which case you have. The verification flag has two names: ad rows call itisAdvertiserUnverified, advertiser rows call itisUnverified.variations,regionsShown,servedCountries, andendPayerNameare filled only whenincludeDetailsis on.widthandheightare filled when an image or HTML5 preview states its size; otherwise they arenull. Other empty text and list fields come back as""and[].
What data can't Google Ads Transparency Center Scraper & API extract?
- Landing-page URLs or landing-page content
- Ad headlines and descriptions as separate text fields (text ads come as preview markup and URLs)
- Targeting, keywords, bids, or budgets
- Exact spend or impressions for commercial ads
- Clicks, CTR, or conversions
- Ads from other networks such as Meta, TikTok, or LinkedIn
🔍 How to scrape Google Ads Transparency Center ads
You don't need any coding experience to get your first results.
- Create a free Apify account using your email
- Open Google Ads Transparency Center Scraper & API
- Add one target per line to the Brands, domains, advertiser IDs or URLs field (
urls). For your first run, use a domain such asnike.com: a domain is a single target. - Click Start and wait for the run to finish
- Download your data in JSON, CSV, Excel, XML, or HTML
⚠️ Brand names expand. A brand name such as
Nikeis matched to up to 5 advertisers plus up to 3 domains with the default settings, so it can become up to 8 targets. Each target returns up tomaxAdsPerSearchads (10 by default), so one brand name can return up to 80 results and cost up to 8 times more than one domain.
That's all it takes to scrape Google ads by domain, brand, or advertiser ID. Results appear in the dataset while the run is still going.
💲 How much does Google Ads Transparency Center Scraper & API cost?
This Actor uses pay-per-event pricing. You pay for the results you get and a tiny start fee. Apify platform usage is billed to you on top of these event prices.
| 💲 Event | Price | When it is charged |
|---|---|---|
| Result | $2.00 per 1,000 results ($0.002 per result) on the Free plan (lower on paid plans, see below) | For each ad creative, advertiser summary, or disapproved ad saved to the dataset |
| Actor start | $0.00005 per GB of run memory | Once, when a run starts. At the default 1 GB of memory, that is $0.00005 per run. |
| Apify platform usage | Depends on the run | Billed separately by Apify, based on the memory and time your run uses. You see it on the run's detail page after the run. |
| Apify plan | Price per result | Price per 1,000 results |
|---|---|---|
| Free | $0.002 | $2.00 |
| Starter | $0.00175 | $1.75 |
| Scale | $0.0015 | $1.50 |
| Business and higher | $0.001 | $1.00 |
The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.
Pagination & Stats rows are not charged. Turning on includeDetails doesn't add an extra event, but it makes runs slower, which can raise platform usage. See the pricing tab for the current events.
Example costs at the Free plan price (result events, before the $0.00005 start fee and platform usage):
- 1 domain (
nike.com) with the defaults: up to 10 ads = up to $0.02 - 1 brand name (
Nike) with the defaults: up to 8 targets × 10 ads = up to 80 ads = up to $0.16 - 20 competitor domains with the defaults: up to 200 ads = up to $0.40
- 1,000 ad creatives: $2.00
Platform usage varies with your input and settings, so do a small test run first and check its usage on the run's detail page.
Is the Google Ads Transparency Center free to scrape?
Browsing the website costs nothing, and you can try this Actor on the Apify Free plan, which gives you $5 in monthly credit. Free-plan runs work the same as paid runs. Result events and platform usage are both paid from your credit, so set a maximum charge limit when you start a run and do a small test run first.
⬇️ ⬇️ Input
To run this Actor, you only need the urls field (shown in the form as Brands, domains, advertiser IDs or URLs): one domain, brand name, advertiser ID, or Transparency Center URL per line. Everything else is optional and has a sensible default.
Here's an example that collects the 10 most recent ads shown in the United States for nike.com:
{"urls": ["nike.com"],"resultType": "ads","region": "US","maxAdsPerSearch": 10}
See the input tab for a full description of all fields.
| ⬇️ Field | What it does | Default |
|---|---|---|
urls (required) | Domains, brands, AR… IDs, AR…/CR… pairs, or Transparency Center URLs | — |
resultType | ads for ad creatives, advertisers for advertiser summaries | ads |
region | Two-letter country code (US, GB, DE…) or ANYWHERE | US |
platforms | SEARCH, YOUTUBE, SHOPPING, MAPS, PLAY (empty = all) | all |
adFormat | ALL, TEXT, IMAGE, VIDEO | ALL |
startDate / endDate | Only ads shown on or after / before a date (YYYY-MM-DD) | — |
political, impressionRanges, candidateNameKeyword | Political and election ads filters | off |
maxAdsPerSearch | Max ads per target (advertiser or domain) | 10 |
maxAdvertisersPerQuery | How many matching advertisers a brand name expands to (1–50) | 5 |
sortBy / sortDescending | Ad order: LAST_ACTIVITY_DATE, REVENUE, or IMPRESSIONS | LAST_ACTIVITY_DATE, descending |
includeDetails | Adds variations, countries shown, end payer, and more | off |
includeDisapprovedAds | Adds Google's site-wide feed of recently disapproved ads | off |
onlyNewAds / monitorStoreName | Monitor mode: only ads not seen before | off |
urlsFromFile | Pasted list, .txt/.csv link, or Google Sheet with more targets | — |
pageToken | Continue a previous paginated search | — |
legacyKeyAliases | Adds duplicate snake_case columns (creative_id, advertiser_name…) | on |
includeMeta | Adds one Pagination & Stats row per target | on |
Other advanced settings (concurrency, httpMaxConcurrency, requestDelay, maxRetries, requestTimeoutSecs, detailConcurrency, includeRawData) can stay at their defaults. No proxy is needed by default; you can select Apify Proxy in proxyConfiguration.
Brands, domains, advertiser IDs or URLs (urls)
Each line is detected automatically. A domain is one target, and so is a Google Ads advertiser ID. A brand name expands to up to maxAdvertisersPerQuery matching advertisers plus up to 3 matching domains, and each one becomes its own target. A single ad needs its advertiser ID together with the creative ID.
- ✅ Good:
AR16735076323512287233/CR09405416287280037889 - ❌ Bad:
CR09405416287280037889
⚠️ A creative ID on its own is skipped. Single-ad lookups (
AR…/CR…) always include the full detail fields and ignore the platform, format, date, impression, and candidate filters and monitor mode.
Max ads per target (maxAdsPerSearch)
The limit applies per target, not per run, so cost grows with the number of targets × maxAdsPerSearch.
- ✅ Good:
10for a first test run - ❌ Bad:
100000
⚠️ In one run, each target returns at most 2,000 ads, so values above 2,000 don't add more ads per target. Values above 50,000 stop the run with an input error. To get more than 2,000 ads for one target, copy
nextPageTokenfrom that target's Pagination & Stats row, then start a new run with the same target as the only line inurlsand the token inpageToken.
Region (region)
Use a two-letter ISO country code or ANYWHERE for all regions.
- ✅ Good:
GB - ❌ Bad:
United Kingdom
⚠️ An unknown country code stops the run with an input error. The
regionfield in the output repeats the region you asked for; useincludeDetailsandregionsShownto see where an ad actually ran.
Platforms (platforms)
Set platforms to ["YOUTUBE"] to get only Google Ads Transparency Center YouTube ads, ["SHOPPING"] for Shopping ads, or ["SEARCH"] for Search ads. Leave it empty to get ads from all five platforms.
⚠️ The platform filter only applies to ads shown on or after 2023-09-04.
⬆️ ⬆️ Output
Results are stored in a dataset in the Output or Storage tab. You can view them as a table or JSON, switch between the Ad Creatives, Advertiser Summaries, Pagination & Stats, and Disapproved Ads views, and download them in JSON, CSV, Excel, XML, or HTML. Every run that produces at least one record also saves all records as one JSON array under the OUTPUT key in the run's key-value store.
JSON example
Results for the input example above (shortened). IDs, names, and dates are illustrative, not from a real run:
{"recordType": "ad","creativeId": "CR09405416287280037889","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","billingCountry": "US","isAdvertiserUnverified": false,"domain": "nike.com","format": "IMAGE","previewType": "image","imageUrl": "https://…","width": 300,"height": 250,"firstShown": "2026-06-03T00:00:00.000Z","lastShown": "2026-10-01T00:00:00.000Z","shownForDays": 120,"region": "US","politicalRegion": [],"hasImpressionData": false,"impressionsLowerBound": null,"impressionsUpperBound": null,"hasSpendData": false,"spendLowerBound": [],"spendUpperBound": [],"isPolitical": false,"containsSyntheticMedia": false,"variations": [],"regionsShown": [],"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR09405416287280037889?region=US","isNewSinceLastRun": true,"sourceQuery": { "kind": "domain", "value": "nike.com" },"scrapedAt": "2026-10-07T09:15:42.120Z"}
isNewSinceLastRun is always true: without monitor mode there is no earlier run to compare with, and in monitor mode only new ads are saved. sourceQuery shows which line of your input produced the row. In ad-creatives mode, each advertiser or domain target also adds one free Pagination & Stats row with numMatchedResults, adsReturned, hasMoreResults, and nextPageToken.
Advertiser Summaries view
With "resultType": "advertisers" and the same urls, you get one row per advertiser (illustrative values):
{"recordType": "advertiser","advertiserId": "AR16735076323512287233","advertiserName": "Nike, Inc.","billingCountry": "US","isUnverified": false,"runsGoogleAds": true,"hasAdCountData": true,"approxAdCountLowerBound": 100,"approxAdCountUpperBound": 200,"hasImpressionData": false,"approxImpressionsLowerBound": null,"approxImpressionsUpperBound": null,"domain": "nike.com","region": "US","adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US","sourceQuery": { "kind": "domain", "value": "nike.com" }}
How to get a clean spreadsheet export
One dataset can hold several row types: ad or advertiser rows, Pagination & Stats rows, and Disapproved Ads rows if you turned that feed on. The recordType column tells them apart (ad, advertiser, meta, disapprovedAd). For a tidy CSV or Excel file:
- Leave out the Pagination & Stats rows: turn off
includeMeta. Keep it on if you neednextPageTokento continue a search later. - Drop the duplicate columns: each ad row also carries snake_case copies of some fields (
creative_id,advertiser_name,first_shown,deeplink…) becauselegacyKeyAliasesis on by default. Turn it off and only the camelCase fields remain. - Pick your columns: download from the Ad Creatives or Advertiser Summaries view, or select only the fields you need in the export dialog. Views choose columns, not rows, so you can also filter by
recordTypein your spreadsheet. - Nested fields:
sourceQuery,variations, andregionsShowncontain objects or lists, so CSV and Excel spread them over several columns. Use JSON if you need them intact.
With both switches off, the Google Ads Transparency scraper gives you one plain row per ad.
💡 Google Ads Transparency Center scraper tips and advanced usage
How many results can you scrape with Google Ads Transparency Center Scraper & API?
Each target returns up to maxAdsPerSearch ads, and at most 2,000 ads per run. A run with many domains, or with brand names that expand into several targets, can return far more in total. The exact number depends on how many ads Google publishes for each advertiser in your region, your filters, and your run's spending limit (the run stops cleanly when it is reached). The best way to know for your use case is a quick test run.
How to get faster or cheaper results
- Start with the default
maxAdsPerSearchof 10, then raise it. - Use an exact domain or
AR…advertiser ID instead of a brand name to avoid extra targets. - Lower
maxAdvertisersPerQueryif you do use brand names. - Narrow down with
platforms,adFormat,startDate, andendDate. - Leave
includeDetailsoff unless you need variations or country history; it makes runs slower. - Use
resultType: "advertisers"to check many companies quickly.
Monitor competitor ads with monitor mode
Turn on onlyNewAds and schedule the Actor to monitor competitor ads automatically. The first run returns all ads it collects and remembers them; later runs return only ads that weren't seen before. Give each monitored target its own monitorStoreName (for example nike-us-monitor) so the histories don't mix. Add a webhook or the Slack integration to get an alert when a run finishes.
Known issues
- The Sort advertisers by setting (
advertiserSortBy) currently has no effect. - In advertiser-summary mode, only
regionandpoliticalare applied; platform, format, date, impression, and candidate filters are not. candidateNameKeywordis meant for political ad searches, but once filled it is applied to every ad search in the run.- Ads are not de-duplicated across targets. A brand that matches both an advertiser and its domain can return the same ad twice (monitor mode skips ads already seen).
🔌 Integrations and API
Can I use Google Ads Transparency Center Scraper & API as a Google Ads Transparency Center API?
Yes. Google offers no general Google Ads Transparency API for all regions, but the Apify API gives you programmatic access to this Actor: start runs, schedule them, and fetch results. Use the apify-client NPM package for Node.js or the apify-client PyPI package for Python. See the API tab for ready-to-use code. If you searched for a Google Ads Library API, this is the same data: Google's ad archive under its other common name.
Google Ads Transparency Center Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("insights_data/google-ads-transparency-center-scraper-api").call(run_input={"urls": ["nike.com"],"resultType": "ads","region": "US","maxAdsPerSearch": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Can I integrate this Actor with other apps?
Yes. Connect it with almost any cloud service through Apify integrations: Make, Zapier, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain, and more. Use webhooks to trigger actions when a run finishes. For example, schedule a weekly monitor-mode run for your competitors' domains and send new ads to a Google Sheet or a Slack channel.
Can I use it as a Google Ads Transparency Center MCP tool for AI agents?
Yes. Connect the Actor to Claude and other AI assistants through the Apify MCP server, then ask your agent to pull a brand's ads. Open the MCP tab for setup steps.
🔗 Other scrapers for competitor and market research
This Google Ads library scraper pairs well with our other tools for company research, ecommerce competitor analysis, and market sentiment:
| 🚀 Y Combinator Scraper: YC company profiles, founders, open roles, and Launch YC posts, for lead gen and deal sourcing | 🛒 Flipkart Product Scraper: Flipkart prices, discounts, ratings, and sellers, for price monitoring and competitive analysis |
| ⭐ Flipkart Reviews Scraper: Flipkart reviews, star ratings, and photos, for reputation monitoring | 📈 Stocktwits Scraper: Stocktwits messages and bullish/bearish sentiment, for market research |
For example, pull a list of startups with the Y Combinator Scraper, then run their domains through advertiser-summary mode to see which ones advertise on Google.
❓ FAQ
Is it legal to scrape Google's Ads Transparency Center?
Web scraping is generally legal if you extract publicly available data, and the Transparency Center is a public website. However, you should respect personal data (for example, under GDPR) and intellectual property rules, have a legitimate reason for collecting data, and take Google's Terms of Service into account. This is not legal advice. If you're unsure about your use case, check with a lawyer.
What is Google Ads Transparency Center?
It is Google's public archive of ads that run on Google, sometimes called the Google Ads Library or the Google Ads Transparency library. You can look up an advertiser and see their ads across Search, YouTube, Shopping, Maps, and Play, with run dates and regions. It also hosts a Google political ads library, with spend and impression ranges for election ads where Google publishes them.
How does Google Ads Transparency Center Scraper & API work?
It works like you browsing the Transparency Center, only faster. You paste your targets, and the Actor works out what each line is: a domain, a brand, an advertiser ID, an ad ID pair, or a URL. Brand names are matched to the advertisers and domains the Transparency Center suggests. For each target, it reads the public ad listings page by page, applies your filters, optionally fetches full ad details, and saves each record to the dataset as soon as it is ready.
How to use Google Ads Transparency Center data at scale?
Collect it into a dataset and analyze it outside the website. The site shows ads one advertiser at a time and has no export button. With this Actor you can paste hundreds of domains at once, filter by region and platform, and download one table for your Google Ads competitor research.
How do I see competitor ads on Google in bulk?
Paste your competitors' domains into urls and run the Actor. Many people search for "see competitors Google Ads" when they want exactly this. For each domain you get up to maxAdsPerSearch ads (10 by default, at most 2,000 per run), each with its format, preview, and first and last shown dates. To check competitor Google Ads activity regularly, add onlyNewAds and a schedule. Tracking Google Ads Library competitors that run several accounts? Add their AR… advertiser IDs instead of a brand name.
Can I use it as a YouTube ads scraper or a Google Shopping ads spy?
Partly. With platforms set to ["YOUTUBE"], the Actor collects the YouTube ads that Google lists in the Transparency Center, which gives you a searchable YouTube ads library for any advertiser. It doesn't scrape YouTube itself. In the same way, ["SHOPPING"] covers Shopping ads if you need a Google Shopping ads spy for a competitor, and ["SEARCH"] covers text ads if you were looking for a Google Search ads spy tool. In every case you get the creative, run dates, and advertiser, not keywords, bids, or clicks.
How to check if a company runs Google Ads?
Set resultType to advertisers and paste the company domains. For each domain, every advertiser account found with ads for that domain in the chosen region gets its own row with runsGoogleAds: true and approximate ad counts, so one domain can return several rows. A domain with no ads in the chosen region produces no row and no log warning, so a missing row usually means no ads were found for that domain.
How is this different from a Google Ads spy tool or the website?
| Feature | This Actor | Transparency Center website |
|---|---|---|
| Bulk input (hundreds of domains or brands) | ✅ | ❌ |
| Export to JSON, CSV, Excel | ✅ | ❌ |
| API, schedules, and webhooks | ✅ | ❌ |
| Only new ads since the last check | ✅ | ❌ |
| Price | $2.00 per 1,000 results on the Free plan, down to $1.00 on Business, + start fee + platform usage | Free to browse |
Many ad library scraper tools focus on social networks. This one is a Google ad transparency tool: it covers only Google's ads and charges per result, with no monthly subscription.
Why scrape Google ads data?
- PPC competitor research: learn which formats and messages competitors keep running the longest.
- Creative inspiration: build swipe files of image, video, and text ads.
- Market mapping: find out who advertises in a category or region.
- Political research: study election ads with Google political ads transparency data.
- Sales prospecting: qualify leads by whether they advertise on Google.
Why am I getting fewer results than expected?
- Check that
maxAdsPerSearchis high enough (the default is 10). - Remove filters such as
platforms,adFormat, or dates; the platform filter only covers ads shown since 2023-09-04. - Try
ANYWHEREas the region; an advertiser may not run ads in your chosen country. - In monitor mode, ads seen in earlier runs are left out on purpose.
- Each target returns at most 2,000 ads per run; continue with
pageToken. - Check the log for skipped entries: lines that can't be understood and brand names that match no advertiser or domain are skipped with a warning. A domain or advertiser ID with no ads gets no warning; in ad-creatives mode its Pagination & Stats row shows
adsReturned: 0(whenincludeMetais on).
What should I do if my run fails?
Most failed runs come from an input value the Actor can't use. The run stops before scraping, and its status message names the problem. Check these first:
regionis not a known two-letter country code orANYWHERE(for example,United Kingdominstead ofGB).maxAdsPerSearchis above 50,000. The form accepts larger numbers, but the run doesn't.maxAdvertisersPerQueryis above 50. The form accepts up to 500, but the run doesn't.startDateis later thanendDate.
Lines in urls that can't be understood, a creative ID on its own, and brand names that match no advertiser or domain don't fail the run; they're skipped with a log warning. A domain or advertiser ID with no ads in your region doesn't fail the run either, and it gets no warning: in ad-creatives mode its Pagination & Stats row shows adsReturned: 0 (while includeMeta is on, the default), and in advertiser-summary mode a domain with no ads simply produces no row. If no line is usable, the run ends without results and the status says "No valid targets found in the input." If the run fails with "Could not resolve your targets", check your input and try again. If the problem continues, open an issue (see below) and include the run link.
📧 Support and feedback
Found a bug or have a feature request? Please create an issue on the Issues tab.
Need a custom solution, more data, or a different source? Contact us at hello.insights.data@gmail.com.
Built and maintained by Insights Data.
This Actor is an independent tool and is not affiliated with or endorsed by Google LLC. It collects only data that Google publishes in the public Ads Transparency Center.