Google Ads Transparency Center Scraper: Competitor Ads
Pricing
from $0.36 / 1,000 ads
Google Ads Transparency Center Scraper: Competitor Ads
Google Ads Transparency Center scraper. Search by brand name, website domain, advertiser ID or a pasted Transparency Center URL. Each ad comes with its advertiser, legal name, country, format, creative link and first and last shown dates. Filter by platform, format and date. No login.
Pricing
from $0.36 / 1,000 ads
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 290,000 runs across 310+ public actors.
Updated 10 Oct 2026: search by brand or advertiser name, advertiser IDs and pasted Transparency Center URLs, filter by platform, ad format and date, and get more than 100 ads per search.
Type a competitor's name, such as Nike, or its 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, the advertiser's legal name, country and verification, Google's advertiser and creative IDs, whether it is a text, image or video ad, a link to the creative and to the ad's page, and the first and last time Google showed it. You need no Google account and no API key.
Why choose this actor?
- Search the way you think of a competitor. Give a brand name and the actor finds the matching advertisers through the Transparency Center's own search box, then pulls their ads. In our 10 October test,
NikeandHubSpotfound Nike, Inc. and HubSpot's two main accounts (Hubspot, Inc.andHubSpot) and returned 63 ads, with one charge per ad. - 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. - Only the ads you want. Pick YouTube, Google Search, Maps, Play or Shopping, and text, image or video, and Google applies the filter before it answers, the same as the menus on its site. In a 10 October test, YouTube plus video plus September 2026 on Nike, Inc. returned 20 ads, every one a video ad that was running in September.
- See everyone who advertises a domain, not just the brand. A domain search lists every advertiser whose ads point at the domain. The five sportswear domains came back with 30 different advertisers, including regional subsidiaries, agencies and resellers bidding on the brand.
- Pay per ad delivered, nothing for empty or blocked lookups. A name that matches no advertiser, a domain with no Google ads, a lookup Google rate-limits, rows with no advertiser or no creative, and the run's summary and info rows are never charged. The Gold price is $0.36 per 1,000 ads.
Bookmark this Actor on its Store page so it is one click away next time.
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}
Or search by name instead of website:
{"queries": ["Nike", "HubSpot"],"maxAdvertisersPerQuery": 2,"region": "US","maxAdsPerDomain": 20}
Give at least one of four inputs, in any mix: domains (websites such as nike.com), queries (brand or advertiser names such as Nike), advertiserIds (Google IDs starting with AR) or startUrls (addresses copied from adstransparency.google.com). Pick the country in region (any of the 244 countries and territories Google lists, or ANYWHERE for its whole archive), narrow the ads with platform, adFormat, startDate and endDate, and set how many ads you want per domain or advertiser in maxAdsPerDomain (up to 500).
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. Searches Google's public Ads Transparency Center and returns one row per ad with the advertiser's name, ID, legal name, country and verification, Google's creative ID, the ad format (text, image or video), a creative URL, the ad's Transparency Center page 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. Give at least one of: domains (string[], bare domains such as "nike.com"), queries (string[], brand or advertiser names such as "Nike"; matched against advertiser names, not ad text), advertiserIds (string[], "AR..." IDs), startUrls (array of {"url": "..."} with adstransparency.google.com advertiser, creative or ?domain= URLs). Optional: region (two letter country code such as "US", "IT" or "JP", any of the 244 Google lists, or "ANYWHERE" for the whole archive; default "US"), platform ("ALL", "SEARCH", "YOUTUBE", "MAPS", "PLAY" or "SHOPPING"), adFormat ("ALL", "TEXT", "IMAGE" or "VIDEO"), startDate and endDate ("YYYY-MM-DD"; keeps ads whose first to last shown span overlaps the window), maxAdsPerDomain (integer 1 to 500 per domain, advertiser or URL, default 100; newest last shown first), maxAdvertisersPerQuery (1 to 10, default 3), monitorMode (default false; true delivers and charges only ads not delivered by an earlier run with the same input). At most 25 domains, advertisers and URLs and 10 queries per run. 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
- Four ways in: website domains, brand or advertiser names, advertiser IDs, and pasted Transparency Center URLs (advertiser pages, single ads and website searches). Filters already in a pasted advertiser or website URL, such as
platform=YOUTUBE, are used for that URL. - Name search that stays on target. A name is matched against advertiser names through Google's own suggestions, and an advertiser is kept only when its name contains every word you typed, so
NikefindsNike, Inc.but notNikel Kola. Exact name matches come first, then the accounts with the most ads;maxAdvertisersPerQuerysets how many are fetched. - Platform and format filters sent to Google: Google Search, YouTube, Google Maps, Google Play or Google Shopping, and text, image or video. The format is checked again on every row.
- Date window:
startDateandendDatekeep ads whose first shown to last shown span overlaps your window. - Up to 500 ads per domain or advertiser. Google returns ads newest first by the time they were last shown; past 100 the actor pages through further results. In our 10 October test, 150 ads from one HubSpot account came back over two pages, all 150 different.
- Advertiser details on every row: legal name, country and whether Google shows the advertiser as verified, looked up once per advertiser per run.
- Every country Google lists: 244 countries and territories, or
ANYWHEREfor the whole archive. Google keeps a separate archive per country, so the same domain often returns different ads in each. - Up to 25 domains, advertisers and URLs per run, 5 at a time, plus up to 10 names. Each lookup runs on its own fresh Apify datacenter IP, which is what keeps Google's per-IP rate limit away. Anything past the cap is skipped with a warning in the log, not charged.
- No login, no API key, no browser. The actor sends requests to the same JSON service the Transparency Center website calls when you search it.
How to use it
Competitor watch by brand name
{"queries": ["Nike", "HubSpot"],"maxAdvertisersPerQuery": 3,"region": "US","maxAdsPerDomain": 100}
Each name becomes the advertisers whose names match it, then their ads. Every row carries input_value (the name you typed) and advertiser_name, so you can see which account each ad came from. In our 10 October test with maxAdvertisersPerQuery: 2 and 20 ads each, Nike matched two Nike, Inc. accounts (20 ads and 3 ads) and HubSpot matched Hubspot, Inc. and HubSpot (20 ads each): 63 ads and 63 charges. Names such as Nikel Kola that only start with the same letters were left out. A name that matches no advertiser returns an info row saying so, with the websites Google suggested for it, and costs nothing.
Weekly new-ads monitor
{"queries": ["HubSpot"],"domains": ["salesforce.com"],"region": "US","maxAdsPerDomain": 100,"monitorMode": true}
Save this as a task and schedule it weekly (for example 0 8 * * 1). The first run delivers every ad it finds; each later run with the same input 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. See Run it on a schedule below.
Creative library by format
{"queries": ["Nike"],"maxAdvertisersPerQuery": 1,"platform": "YOUTUBE","adFormat": "VIDEO","region": "US","maxAdsPerDomain": 200}
Every row is a video ad Google showed on YouTube, with ad_url (the ad's page, where it plays) and creative_url. Swap VIDEO for IMAGE or TEXT, or YOUTUBE for SEARCH, MAPS, PLAY or SHOPPING, to build a library of one kind of creative. In our 10 October test of these two filters on Nike, Inc. (with a September 2026 date window added), all 20 rows were video ads.
Ads shown in a date window
{"advertiserIds": ["AR16735076323512287233"],"startDate": "2026-09-01","endDate": "2026-09-30","region": "US","maxAdsPerDomain": 100}
Keeps ads whose first shown to last shown span overlaps September 2026. In our 10 October test of this window with the YouTube and video filters added, Nike, Inc. returned 20 ads; the actor read one page and stopped as soon as it reached ads last shown before 1 September.
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, advertisers and URLs fit in one run; for a longer list, split it across runs.
From a Transparency Center page you already have open
{"startUrls": [{ "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US&platform=YOUTUBE" }],"maxAdsPerDomain": 50}
Copy the address of an advertiser page, a single ad or a website search and paste it. The region, platform, format and dates in an advertiser or website address are used for it. If the actor cannot read one of them, such as region=XX, that address is skipped with an explanation and not charged; it never runs with the filter dropped. A single-ad address returns that one ad: Google's single-ad view is not per country, so the row's shown_in_regions lists where it ran, and region names the country in the address only if the ad ran there, otherwise ANYWHERE.
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 2 October 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 or name once per country (as separate tasks, or one API call each), or paste one address per country in startUrls, and compare the advertiser_name and creative_id sets to see which markets get which creative. In our 1 November test on pomellato.com, the United States returned 56 ads, Italy 162, Japan 25 and South Korea 4. Japan shared none with the other two, and the United States and Italy shared 20.
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 | none (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. |
queries | array of strings | none | Brand or advertiser names, such as Nike. Matched against advertiser names (not ad text) in the chosen region; an advertiser is kept only when its name contains every word. A bare domain here is searched as a domain. At most 10 per run. |
maxAdvertisersPerQuery | integer (1 to 10) | 3 | How many matching advertisers to fetch for each name: exact name matches first, then the most ads. |
advertiserIds | array of strings | none | Google advertiser IDs starting with AR, from an advertiser page address or the advertiser_id of an earlier run. |
startUrls | array of URLs | none | Addresses from adstransparency.google.com: /advertiser/AR..., /advertiser/AR.../creative/CR... or ?domain=.... The region, platform, format and date settings in an advertiser or website address apply to it; a single-ad address returns that one ad. |
region | string | US | The country whose archive to search, as a two letter code such as US, IT or JP (any of the 244 Google lists), or ANYWHERE for the whole archive. One per run; an address in startUrls can name its own. |
platform | string | all | SEARCH, YOUTUBE, MAPS, PLAY or SHOPPING. Sent to Google with the search. |
adFormat | string | all | TEXT, IMAGE or VIDEO. Sent to Google with the search and checked again on each row. |
startDate | date (YYYY-MM-DD) | none | Keep ads last shown on or after this date. |
endDate | date (YYYY-MM-DD) | none | Keep ads first shown on or before this date. |
maxAdsPerDomain | integer (1 to 500) | 100 (form prefill: 40) | Most ads to return per domain, advertiser or URL, newest last shown first. |
monitorMode | boolean | false | Deliver only ads not delivered by an earlier run with the same input. Skipped ads are not charged. Made for weekly schedules. |
Give at least one of domains, queries, advertiserIds or startUrls. At most 25 domains, advertisers and URLs are looked up per run (names count by the advertisers they match); the rest are skipped with a log warning and not charged. "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 lookup, 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.
What you searched: input_type (domain, query, advertiserId or startUrl), input_value (exactly what you entered) and, for website searches, domain (the domain after clean-up).
The advertiser: advertiser_name (the name on the paying account), advertiser_id (Google's advertiser ID, starting with AR), advertiser_legal_name (the legal name field of Google's advertiser record, which in our tests always matched advertiser_name), advertiser_country (where Google says it is based) and advertiser_verified (true when Google shows it as verified).
The ad: creative_id (Google's creative ID, starting with CR), ad_format, format, creative_url and ad_url.
ad_formatis Google's own label:text,imageorvideo.format: "image"means Google archived a static image;creative_urlis that image ontpc.googlesyndication.com, which you can open or download. Google archives text ads this way too, as a picture of the ad.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. Openad_urlto see the ad on the Transparency Center.ad_urlis the ad's own page on adstransparency.google.com.
Where and when: region (the country archive searched, or ANYWHERE), shown_in_regions (single-ad addresses only: the countries Google lists the ad as shown in), platform (only when you chose one, because Google does not say per ad where 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). A row from a single-ad URL has no first_shown, because Google's single-ad view gives only the last shown time.
Each run also ends with a _type: "summary" row (what was looked up, region and filters, ads delivered and charged, blocked lookups, stopped_early, and the run's own cost estimate) and a _type: "info" row with a scheduling tip. A name that matched no advertiser or an input that could not be used gets its own _type: "info" row explaining why. None of these is an ad and none is ever charged. Skip rows that have a _type field when you load the data.
Stable fields for automations
These 9 fields have been in every ad row from a website search since launch, and keep their names:
| Field | What it holds |
|---|---|
domain | The domain you looked up, lowercased, without https:// or a path (website searches only) |
advertiser_id | Google's advertiser ID, such as AR16735076323512287233 |
advertiser_name | The 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 |
Added on 10 October 2026:
| Field | What it holds |
|---|---|
ad_format | text, image or video |
ad_url | The ad's page on adstransparency.google.com |
region | The country archive searched, or ANYWHERE |
platform | The platform you filtered on, when you chose one |
advertiser_legal_name | The legal name field of Google's advertiser record |
advertiser_country | The country Google lists the advertiser as based in |
advertiser_verified | true when Google shows the advertiser as verified |
input_type | domain, query, advertiserId or startUrl |
input_value | The input that produced the row |
In our 10 October tests (294 ad rows over 7 runs), every row had all the fields above except three that apply only sometimes: domain (website searches only), platform (only with a platform filter) and first_shown (missing on the one row from a single-ad URL). advertiser_legal_name was the same as advertiser_name on every row, and 293 of 294 rows came from advertisers Google shows as verified.
We will not rename these fields. New fields may be added over time; existing ones keep their names.
Output examples
A text ad from a name search (queries: ["HubSpot"], US, 10 October 2026):
{"advertiser_id": "AR10072600183532683265","advertiser_name": "Hubspot, Inc.","creative_id": "CR07691415029811249153","format": "image","creative_url": "https://tpc.googlesyndication.com/archive/simgad/17680919876780309651","first_shown": "2024-05-09T19:51:03.000Z","last_shown": "2026-10-10T08:19:53.000Z","ad_format": "text","ad_url": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR07691415029811249153?region=US","region": "US","advertiser_legal_name": "Hubspot, Inc.","advertiser_country": "US","advertiser_verified": true,"input_type": "query","input_value": "HubSpot","scraped_at": "2026-10-10T09:07:53.853Z"}
A YouTube video ad from queries: ["Nike"] with platform: "YOUTUBE" and adFormat: "VIDEO" (US, 10 October 2026), creative URL trimmed:
{"advertiser_id": "AR16735076323512287233","advertiser_name": "Nike, Inc.","creative_id": "CR02029141914422345729","format": "interactive","creative_url": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfu…","first_shown": "2026-07-07T14:19:50.000Z","last_shown": "2026-10-10T03:34:46.000Z","ad_format": "video","ad_url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR02029141914422345729?region=US","region": "US","platform": "YOUTUBE","advertiser_legal_name": "Nike, Inc.","advertiser_country": "US","advertiser_verified": true,"input_type": "query","input_value": "Nike","scraped_at": "2026-10-10T09:08:34.827Z"}
The rows below are real rows from runs before 10 October 2026, so they show the original 9 fields only.
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 or advertisers with 500 ads each, is 12,500 ads for $4.50 plus $0.005. On the Free tier, 500 ads cost $0.30 plus $0.005.
Never charged: a name that matches no advertiser, the advertiser search behind a name, a domain or advertiser with no Google ads, a lookup that was rate-limited or failed, rows Google returns without an advertiser name or creative, ads filtered out by your format or date settings, the same ad found again through a second input in one run, anything past the run caps, 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 this input. 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.
{"queries": ["CaratLane"],"domains": ["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 10 October test on puma.com, the first run delivered and charged 10 ads and the second, a minute later, delivered none and charged nothing; the second run also carried the new inputs at their defaults, which shows a task saved before the update keeps its history. Skipped ads are never charged; the start fee applies to every run as usual. Each run looks at up to maxAdsPerDomain of the most recently shown ads per domain or advertiser, so a new creative is caught as long as it is among them; for a very large advertiser, raise maxAdsPerDomain or 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 the domains, names, IDs, URLs, region or filters and a new history starts; change maxAdsPerDomain and it carries on. Tasks saved before 10 October 2026 keep their history. With several countries in one monitored input, an ad is delivered once, under the first country it was found in; save one task per country to track each on its own.
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 an advertiser account. Anyone can search it by advertiser or website without signing in. This actor searches it by website, advertiser name, advertiser ID or pasted URL and returns the results as rows.
Can I search by brand name or keyword?
By brand or advertiser name, yes: put names in queries. The actor asks the Transparency Center's own search box which advertisers match, keeps those whose name contains every word you typed, and fetches their ads. It matches advertiser names, not the words inside ads, because the Transparency Center has no search by ad text. A generic word such as shoes only finds advertisers with that word in their name. If a name finds nothing, the info row lists the websites Google suggested for it; put one in domains instead.
Which advertiser does a brand name pick?
Advertisers whose name is exactly the brand (ignoring words such as Inc, Ltd or LLC) come first, then other names containing every word, each group ordered by how many ads Google says the account has. maxAdvertisersPerQuery (default 3) sets how many are fetched. The run log lists every advertiser chosen for each name with its ID, and advertiserIds lets you pin exact accounts.
How many ads can I get? Up to 500 per domain, advertiser or URL per country in one run, and up to 25 of those per run. Google returns ads newest first by last shown date, 100 at a time at most, and the actor pages through further results when you ask for more than 100.
Can I get every ad a big advertiser has ever run?
Not in one run. You get up to 500 of the ads Google showed most recently in the country you chose. To see more of a brand's creative, narrow by platform, format or date, run other countries, or run it on a schedule and keep the new creative_id values each time.
How do the date filters work?
startDate keeps ads last shown on or after that day, and endDate keeps ads first shown on or before that day, so together they keep every ad whose first shown to last shown span overlaps your window. An ad that ran on and off is counted for the whole span between those two dates. Because Google returns ads newest last shown first, the actor stops paging as soon as it reaches ads that ended before your window.
How do the platform and format filters work?
They are sent to Google with the search, exactly as the platform and format menus on the Transparency Center site send them, so Google returns only matching ads. The format is also checked on each row against Google's own ad_format label.
What does advertiser_verified mean?
It is true when the Transparency Center shows the advertiser with its "Verified" badge, meaning Google has checked who the advertiser is, and false when it shows the advertiser without one.
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 lookup, 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 lookup keeps every lookup under that limit. If a lookup is rate-limited anyway, it is skipped and not charged, and the run stops after 8 failed lookups in a row rather than keep trying.
Why do I see advertisers other than the brand itself?
A website search 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, or search by name or advertiser ID, if you want the brand's own ads only.
What do the formats mean?
ad_format is Google's label: text, image or video. format says how the creative is stored: image ads have a static archived image in creative_url (text ads are archived as an image of the ad), and interactive ads are drawn by Google's own preview script, so 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.
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 Center Scraper turns competitor names, websites and advertiser IDs into rows of their current Google ads, with the advertiser behind each one, billed per ad delivered.

