Google Ads Transparency Scraper: Advertiser Ad Archive
Pricing
from $0.36 / 1,000 ads
Google Ads Transparency Scraper: Advertiser Ad Archive
Search Google's Ads Transparency Center by domain. Get every ad a company runs: creative assets, first and last shown dates, and country-level targeting, no login or API key.
Pricing
from $0.36 / 1,000 ads
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
8
Monthly active users
2 hours ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Type a competitor's website, such as nike.com, and get back the ads Google has shown for it in Google's public Ads Transparency Center: who paid for each ad, Google's advertiser and creative IDs, whether it is an image or an interactive ad, a link to the creative, and the first and last time Google showed it. You need no Google account and no API key.
Why choose this actor?
- A competitor's live ad set in seconds. In a recorded run on 2 October 2026, five sportswear brands (
nike.com,adidas.com,puma.com,newbalance.com,underarmour.com) returned 500 ads in 4 seconds, 100 per brand, every one of them shown by Google within the previous 24 hours. No login, no Google Ads account, no browser. - See everyone who advertises a domain, not just the brand. The archive lists every advertiser whose ads point at the domain. Those five brands came back with 30 different advertisers, including regional subsidiaries, agencies and resellers bidding on the brand, each with Google's verified advertiser name.
- Pay per ad delivered, nothing for empty or blocked lookups. A domain with no Google ads, a lookup Google rate-limits, rows with no advertiser or no creative, and the run's summary rows are never charged. The Gold price is $0.36 per 1,000 ads.
Part of The Mine Works Marketing, SEO and reviews family: Facebook Ad Library Scraper, Similarweb Scraper, Google News Scraper, Trustpilot Reviews Scraper, Google Trends Scraper, Semrush Scraper.
Try it in one minute
Paste this into the JSON tab of the input page and press Start. It returns 10 of Nike's most recently shown US ads in a few seconds.
{"domains": ["nike.com"],"region": "US","maxAdsPerDomain": 10}
The only input you must give is domains: one or more website domains, one per line, such as nike.com or caratlane.com. A full URL also works, because the actor strips https:// and any path and lowercases the domain, and repeated domains are looked up once. Pick the country in region (United States, United Kingdom, Canada, Australia, India, Germany or France) and how many ads you want per domain in maxAdsPerDomain (up to 100).
Apify's free plan includes $5 of credit every month, which covers about 8,000 ads at this actor's Free plan price ($0.0006 an ad plus the $0.005 start fee, in runs of 5 domains and 500 ads).
Copy to your AI assistant
Paste this block into ChatGPT, Claude, Cursor or any assistant that can write code, and it can run the actor for you.
themineworks/google-ads-transparency on Apify. Looks up website domains in Google's public Ads Transparency Center and returns one row per ad with the advertiser's name and ID, Google's creative ID, the format (image or interactive), a creative URL, and the first and last date Google showed the ad. Call ApifyClient("TOKEN").actor("themineworks/google-ads-transparency").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: domains (string[], bare domains such as "nike.com", up to 25 per run). Optional: region ("US", "GB", "CA", "AU", "IN", "DE" or "FR", default "US"), maxAdsPerDomain (integer 1 to 100, default 100; Google returns the most recently shown ads first), monitorMode (default false; true delivers and charges only ads not delivered by an earlier run with the same input). Rows with _type "summary" or "info" are run reports and are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~google-ads-transparency/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- 9 fields per ad:
domain,advertiser_id,advertiser_name,creative_id,format,creative_url,first_shown,last_shownandscraped_at. All 9 were filled in every one of the 976 ads we checked across three runs. - 7 countries: the United States, the United Kingdom, Canada, Australia, India, Germany and France. Google keeps a separate archive per country, so the same domain often returns different ads in each.
- Up to 25 domains per run, 5 at a time. Each domain is looked up on its own fresh Apify datacenter IP, which is what keeps Google's per-IP rate limit away. Domains past the 25th are skipped with a warning in the log, not charged.
- The 100 most recently shown ads per domain. Google returns ads newest first by the time they were last shown, up to 100 in one response. In our test every returned ad had been shown in the 24 hours before the run.
- Every advertiser behind a domain. Results are not limited to the brand's own account: subsidiaries in other countries, media agencies and resellers whose ads link to the domain appear with their own
advertiser_nameandadvertiser_id. - No login, no API key, no browser. The actor sends one request per domain to the same JSON service the Transparency Center website calls when you search it, then stops.
How to use it
Basic: one competitor, US ads
{"domains": ["adidas.com"],"region": "US","maxAdsPerDomain": 100}
You get up to 100 ads, newest first by last shown date, each with the advertiser that paid for it.
Several competitors in one run
{"domains": ["nike.com", "adidas.com", "puma.com", "newbalance.com", "underarmour.com"],"region": "US","maxAdsPerDomain": 100}
This is the exact input of our 2 October test: 500 ads in 4 seconds. Up to 25 domains fit in one run; for a longer list, split it across runs.
Weekly watch on a competitor's new creative
{"domains": ["caratlane.com", "bluestone.com"],"region": "IN","maxAdsPerDomain": 100}
Save this as a task and schedule it weekly (for example 0 8 * * 1). Add "monitorMode": true and each run delivers only creatives you have not received before (see Run it on a schedule), or filter on first_shown to the last 7 days. In our US test, 9 of the 500 ads had a first_shown date in the previous week, all from one brand: that is the launch you want to see first.
Who else is advertising your brand?
{"domains": ["yourbrand.com"],"region": "GB","maxAdsPerDomain": 100}
Group the rows by advertiser_name. Anything that is not your own company is an agency, a reseller or an affiliate whose ads send people to your site. In our test, two of the five sportswear brands had ads from the same third-party advertiser pointing at them.
One brand, several countries
{"domains": ["puma.com"],"region": "DE","maxAdsPerDomain": 100}
region takes one country per run. Run the same domain once per country (as separate tasks, or one API call each) and compare the advertiser_name and creative_id sets to see which markets get which creative.
Agency prospecting: who runs Google ads right now?
{"domains": ["prospect-one.com", "prospect-two.com", "prospect-three.com"],"region": "AU","maxAdsPerDomain": 5}
A small maxAdsPerDomain keeps the cost to a few ads per prospect. A domain with ads shows you its most recent last_shown date; a domain with none returns no rows and costs nothing.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
domains | array of strings | required (form prefill: nike.com) | Website domains to look up, such as nike.com. https://, any path and upper case are removed, and duplicates are looked up once. At most 25 domains per run; the rest are skipped with a log warning. |
region | string | US | The country whose archive to search: US, GB, CA, AU, IN, DE or FR. One country per run. |
maxAdsPerDomain | integer (1 to 100) | 100 (form prefill: 40) | Most ads to return per domain. Google caps one search at 100 ads, so a domain with more archived ads returns its 100 most recently shown. |
monitorMode | boolean | false | Deliver only ads not delivered by an earlier run with the same domains and region. Skipped ads are not charged. Made for weekly schedules. |
"Form prefill" values fill the Console form for you; an API call that leaves maxAdsPerDomain out gets the default of 100.
There is no proxy setting. The actor always uses Apify's datacenter proxy, with a new IP for each domain, and that proxy is included in your Apify plan. A run takes seconds, far inside the default 300 second timeout; if a run ever does reach its timeout, it stops 15 seconds early and keeps every ad already delivered.
What data do you get?
One row per ad. Every field below was filled in every ad row we sampled.
The query: domain (the domain you asked about, after clean-up).
The advertiser: advertiser_name (the name Google verified for the paying account, often the legal company name, such as CARATLANE TRADING PRIVATE LIMITED) and advertiser_id (Google's advertiser ID, starting with AR).
The ad: creative_id (Google's creative ID, starting with CR), format and creative_url.
format: "image"means Google archived a static image;creative_urlis that image ontpc.googlesyndication.com, which you can open or download.format: "interactive"means Google draws the ad with its own preview script and keeps no static image;creative_urlis that script's address ondisplayads-formats.googleusercontent.com. It is the ad as Google serves it, not a picture, so use the advertiser and creative IDs to find it in the Transparency Center if you want to look at it.- In our US test, 420 of 500 ads were images and 80 were interactive; in an India run of five jewellery brands, 263 of 473 were images.
When it ran: first_shown and last_shown (ISO timestamps in UTC from Google; older ads sometimes carry a date with a fixed time such as 07:00:00), and scraped_at (when the row was captured).
Each run also ends with a _type: "summary" row (domains looked up, region, ads delivered and charged, blocked lookups, stopped_early, and the run's own cost estimate) and a _type: "info" row with a scheduling tip. Neither is an ad and neither is ever charged. Skip rows that have a _type field when you load the data.
Stable fields for automations
These 9 fields were present and filled in every ad row we sampled (976 ads across three runs in September and October 2026):
| Field | What it holds |
|---|---|
domain | The domain you looked up, lowercased, without https:// or a path |
advertiser_id | Google's advertiser ID, such as AR16735076323512287233 |
advertiser_name | The verified name of the account that paid for the ad |
creative_id | Google's ID for this ad, such as CR17975796099339780097; use it to spot new ads between runs |
format | image or interactive |
creative_url | Archived image URL, or the URL of Google's preview script for interactive ads |
first_shown | First time Google showed the ad, ISO timestamp |
last_shown | Most recent time Google showed the ad, ISO timestamp |
scraped_at | ISO timestamp when the row was captured |
We will not rename these fields. New fields may be added over time; existing ones keep their names.
Output examples
Real rows from our own runs, with long URLs trimmed.
An image ad from the brand's own account (nike.com, US, 2 October 2026):
{"domain": "nike.com","advertiser_id": "AR16735076323512287233","advertiser_name": "Nike, Inc.","creative_id": "CR17975796099339780097","format": "image","creative_url": "https://tpc.googlesyndication.com/archive/simgad/7821516092700860910","first_shown": "2022-11-30T14:50:48.000Z","last_shown": "2026-10-02T06:59:04.000Z","scraped_at": "2026-10-02T07:50:54.392Z"}
An interactive ad (adidas.com, US, 2 October 2026), where the creative is Google's preview script:
{"domain": "adidas.com","advertiser_id": "AR14017378248766259201","advertiser_name": "Adidas America, Inc","creative_id": "CR10667280702501814273","format": "interactive","creative_url": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=5324553121&creativeId=675142161340…","first_shown": "2023-09-25T21:43:27.000Z","last_shown": "2026-10-02T06:47:38.000Z","scraped_at": "2026-10-02T07:50:55.175Z"}
A third-party advertiser whose ads point at a brand's site (underarmour.com, US):
{"domain": "underarmour.com","advertiser_id": "AR11133654742859776001","advertiser_name": "Click Tech Limited","creative_id": "CR15149127703497539585","format": "image","creative_url": "https://tpc.googlesyndication.com/archive/simgad/3578742225938847868","first_shown": "2026-03-16T16:30:52.000Z","last_shown": "2026-10-02T04:52:16.000Z","scraped_at": "2026-10-02T07:50:54.512Z"}
An India region row (caratlane.com, region IN, 14 September 2026):
{"domain": "caratlane.com","advertiser_id": "AR14650583146911760385","advertiser_name": "CARATLANE TRADING PRIVATE LIMITED","creative_id": "CR09114204215982424065","format": "interactive","creative_url": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=9132612935&creativeId=821377037502…","first_shown": "2026-08-19T10:36:34.000Z","last_shown": "2026-09-14T10:48:46.000Z","scraped_at": "2026-09-14T11:11:10.058Z"}
The summary row that ended that India run of five domains (never charged):
{"_type": "summary","domains": 5,"region": "IN","delivered": 473,"charged": 473,"blocked": 0,"stopped_early": false,"requests": 5,"est_spend_usd": 0.0075,"est_revenue_usd": 0.4541,"profit_guard_tripped": false,"scraped_at": "2026-09-14T11:11:15.196Z"}
blocked counts domains whose lookup Google rate-limited or that failed; those domains delivered nothing and were not charged.
Pricing
Pay per event: you pay for each ad delivered to your dataset, plus a small start fee per run.
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
ad-scraped, per ad | $0.0006 | $0.00054 | $0.00048 | $0.00036 |
ad-scraped, per 1,000 ads | $0.60 | $0.54 | $0.48 | $0.36 |
apify-actor-start, per run | $0.005 per GB of run memory, minimum one event | same | same | same |
The start fee, exactly. Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 256 MB by default, which is under 1 GB, so a default run pays one event: $0.005.
Worked examples on the Gold tier: 100 ads (one domain) cost $0.036 plus $0.005. 500 ads (five domains) cost $0.18 plus $0.005. The largest possible run, 25 domains with 100 ads each, is 2,500 ads for $0.90 plus $0.005. On the Free tier, 500 ads cost $0.30 plus $0.005.
Never charged: a domain with no Google ads, a domain whose lookup was rate-limited or failed, rows Google returns without an advertiser name or creative, domains past the 25th in one run, and the summary and info rows. A run that finds no ads pays only the start fee.
There is no scheduled price change for this actor; the prices above have applied since 14 September 2026. The Pricing tab on this page always shows the rate for your own plan; if it and this table ever differ, the Pricing tab is right.
Run it on a schedule
Switch on monitorMode and the actor remembers which ads it has delivered for these domains. Each later run delivers only creatives you have not received before, which are the ads a competitor started since the last run, and you pay only for those.
- Fill in the input, tick Monitor mode, and save it as a task.
- In Apify Console open Schedules, click Add schedule, and pick Weekly or Daily (or a cron such as
0 8 * * 1). - Add the saved task to the schedule and click Save.
{"domains": ["caratlane.com", "bluestone.com"],"region": "IN","maxAdsPerDomain": 100,"monitorMode": true}
The first run delivers every ad it finds. Each later run with the same input delivers only ads whose creative_id it has not delivered before. In our 9 October test on two US brands, the first run delivered 80 ads and the second, a minute later, none. Skipped ads are never charged; the start fee applies to every run as usual. Google returns the 100 most recently shown ads per domain, so a new creative is caught as long as it is among them; for a very large advertiser, schedule daily. The last row of each run (_type: "info") gives new_this_run, skipped_already_seen and a scheduling tip. The history belongs to the input: change domains or region and a new history starts; change maxAdsPerDomain and it carries on.
FAQ
What is the Google Ads Transparency Center? It is Google's public archive of the ads it serves, at adstransparency.google.com, with each ad tied to a verified advertiser. Anyone can search it by advertiser or website without signing in. This actor searches it by website domain and returns the results as rows.
How many ads can I get? Up to 100 per domain per country in one run, and up to 25 domains per run, so at most 2,500 ads per run. Google's own search returns at most 100 ads per request, newest first by last shown date, and this actor does not page past that. A brand with more archived ads returns its 100 most recently shown.
Can I get every ad a big advertiser has ever run?
No. For large advertisers you get the 100 ads Google showed most recently in the country you chose. To see more of a brand's creative, run the same domain for other countries, or run it on a schedule and keep the new creative_id values each time.
How fresh is the data?
Every run queries Google live; nothing is cached. In our 2 October test, every one of the 500 ads returned had a last_shown time within 24 hours of the run.
Do I need a Google account, Google Ads access or an API key? No. You need only an Apify account. Google's Ads API shows ads only for accounts you manage; the Transparency Center is the public view of everyone's ads, and that is what this actor reads.
Which proxy does it use? Apify's datacenter proxy, with a fresh IP for each domain, which is included in your Apify plan. There is nothing to set. Google limits how many searches one IP can make in a few minutes; a new IP per domain keeps every lookup under that limit. If a lookup is rate-limited anyway, that domain is skipped and not charged, and the run stops after 8 failed lookups in a row rather than keep trying.
Can I search by advertiser name or keyword? Not yet. Search is by website domain only. Domain search covers the usual competitor research case, since you normally know a competitor's site.
Why do I see advertisers other than the brand itself?
The archive lists every advertiser whose ads lead to the domain: the brand's accounts in other countries, media agencies buying on its behalf, and resellers or affiliates. That is often the most useful part. Filter on advertiser_name if you want the brand's own ads only.
What do the two formats mean?
image ads have a static archived image in creative_url. interactive ads are drawn by Google's own preview script, and creative_url is the address of that script rather than a picture. Ads that come back with neither an image nor a script, or without an advertiser name, are left out and not charged.
Can I run it on a schedule?
Yes. Save your input as a task, then in Apify Console open Schedules, create a new schedule (daily, weekly or a cron expression such as 0 8 * * 1) and pick the task. Set monitorMode to true and each run delivers, and charges, only ads not delivered by an earlier run with the same input. You can also filter on first_shown to find new creative.
How do I export the data?
From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. Remove rows that have a _type field if you want ads only.
Can I use it from Claude, ChatGPT or another AI assistant?
- Connector URL:
https://mcp.apify.com/?tools=themineworks/google-ads-transparency. - Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http google-ads-transparency "https://mcp.apify.com/?tools=themineworks/google-ads-transparency".
Is it legal to scrape the Ads Transparency Center? The actor reads only Google's public ad archive, which Google publishes so that anyone can see who is advertising. It does not log in or get past any access control. Advertiser names are business names in almost every case, though a few small advertisers register under a personal name. You are responsible for how you use the data, including Google's terms and data protection laws such as GDPR and CCPA. This is general information, not legal advice.
Integrations
- Google Sheets: export a run straight to a sheet, or use Apify's Google Sheets integration to add each scheduled run's ads to one sheet.
- Make, Zapier and n8n: use the Apify app or node to start a run and send new competitor ads to Slack, email or a project board.
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. See the "Copy to your AI assistant" block above for the exact call.
- MCP clients: Claude, ChatGPT, Cursor, VS Code and other MCP clients can call the actor through
https://mcp.apify.com.
More from The Mine Works
Marketing, SEO and reviews
- Facebook Ad Library Scraper
- Similarweb Scraper
- Google News Scraper
- Trustpilot Reviews Scraper
- Google Trends Scraper
- Semrush Scraper
- App Review Monitor
- Trustpilot Business Search
- TripAdvisor Reviews Scraper
- Username Checker
- Backlink Building Agent
- E-commerce Intel MCP
Social media and video
Leads and business directories
Real estate
Science, health and government data
Jobs and hiring
E-commerce and marketplaces
Company and business data
Food and local services
Developer and AI tools
More tools
- Tennis Match & Player Data Scraper
- Google Hotels Prices Scraper
- LandWatch Scraper
- Taobao Products Scraper 淘宝 天猫
Support
Found a bug or need a field we do not return yet? Open an issue on the Issues tab of this page and we will reply there. To ask for a new ad library or data source, email dmineworks@gmail.com. A guide and FAQ for this actor also live at themineworks.com.
Google Ads Transparency Scraper turns a list of competitor domains into rows of their current Google ads, with the advertiser behind each one, billed per ad delivered.

