Google Ads Transparency — Advertisers & Ad Creatives
Pricing
from $2.13 / 1,000 ad founds
Google Ads Transparency — Advertisers & Ad Creatives
Real Google advertiser identities, ad-volume ranges, verification status AND the actual ad creatives (headline, body, image, destination URL) from the Ads Transparency Center.
Pricing
from $2.13 / 1,000 ad founds
Rating
0.0
(0)
Developer
viralanalyzer
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Google Ads Transparency Scraper Pro 🔍
🔗 View on Apify Store | 🇺🇸 English | 🇧🇷 Português
🇺🇸 English
Overview
Resolve brand names into real Google advertiser identities — advertiser name, AR… id, registration country, Google's own ad-volume range, and the identity-verification flag — then pull the live ad creatives for the same brands.
Two kinds of records land in one dataset:
- Advertiser records, from Google's Ads Transparency search endpoint.
- Creative records, fetched by delegating to
viralanalyzer/google-ads-transparency, the browser-based scraper that renders the advertiser page. Switch this off withincludeCreatives: false.
Advertiser record
{"query": "nike","advertiserName": "<name Google has on file for the advertiser>","advertiserId": "AR…","advertiserCountry": "US","adCountLow": null,"adCountHigh": null,"adCountIsExact": false,"isVerifiedAdvertiser": true,"transparencyUrl": "https://adstransparency.google.com/advertiser/AR…?region=US","searchRegion": "US","dataSource": "google-ads-transparency-search","scrapedAt": "2026-08-26T14:03:11.008Z"}
| Field | Type | Meaning |
|---|---|---|
query | string | The term from your advertisers input that produced this record |
advertiserName | string | Advertiser name as registered with Google |
advertiserId | string | Google advertiser id, AR followed by digits. Stable across regions |
advertiserCountry | string | null | Country code Google reports for the advertiser registration |
adCountLow | number | null | Lower bound of the ad-volume range Google reports |
adCountHigh | number | null | Upper bound of that range |
adCountIsExact | boolean | true when low and high match, meaning Google gave an exact figure instead of a bucket |
isVerifiedAdvertiser | boolean | true only when Google marks the advertiser identity-verified |
transparencyUrl | string | Public Transparency Center page for this advertiser, scoped to your region |
searchRegion | string | The region you sent, echoed back |
dataSource | string | Constant google-ads-transparency-search |
scrapedAt | string | ISO-8601 extraction timestamp |
Creative record
Emitted when includeCreatives is on and the upstream scraper returns cards. Each record is the upstream item passed through unchanged, with query and dataSource set by this actor:
| Field | Type | Meaning |
|---|---|---|
creativeId | string | Google creative id, CR followed by digits |
advertiserId | string | Owner of the creative |
advertiserName | string | null | Advertiser name read from the page |
advertiserDomain | string | null | Advertiser domain read from the page |
format | string | null | VIDEO, IMAGE or TEXT, inferred from the media present on the card |
headline | string | null | First usable text block on the card |
body | string | null | Remaining text blocks joined, capped at 500 characters |
imageUrl | string | null | First non-icon image on the card |
videoUrl | string | null | <video> source or YouTube iframe source, when present |
destinationUrl | string | null | First external link on the card |
regions | array | Best-effort list of { region, firstShown, lastShown } parsed from "Shown in XX" text. firstShown and lastShown are always null |
creativeUrl | string | Direct link to the creative on the Transparency Center |
source | string | Constant google-ads-transparency |
query | string | The term from your input that produced this creative |
dataSource | string | Constant viralanalyzer/google-ads-transparency |
Input Example
{"advertisers": ["nike","shopify"],"region": "US","maxAds": 30,"includeCreatives": true,"maxCreativesPerAdvertiser": 10}
Input Parameters
| Parameter | Type | Description |
|---|---|---|
advertisers | string[] | Required. Brand or company names to resolve. Brand names (nike) match better than full domains (nike.com) |
region | string | Two-letter country code for the lookup: US, GB, BR, DE, ALL. Default US |
maxAds | integer | Cap applied to advertiser records and, separately, to creative records. Default 30 |
includeCreatives | boolean | Fetch ad creatives through the browser-based upstream scraper. Default true; the run takes longer with it on |
maxCreativesPerAdvertiser | integer | Creatives requested per search term. Default 10, maximum 100 |
proxyConfiguration | object | Apify proxy, residential or datacenter. Default { "useApifyProxy": true } |
When nothing matches
If Google answers but returns no advertiser for your terms, the run ends SUCCEEDED with a single diagnostic row and charges nothing:
{"setup_status": "DIAGNOSTIC_GUIDE","_dataQuality": "diagnostic","message": "[DIAGNÓSTICO] O Google Ads Transparency respondeu à busca sem nenhum anunciante correspondente.","potential_causes": ["Os termos informados não correspondem a nenhum anunciante indexado na região escolhida.","O anunciante pode estar registrado em outra região."],"remediations": ["Use o nome comercial da marca (ex: \"nike\") em vez do domínio completo","Tente outra região no campo \"region\" (ex: BR, GB, DE)"],"advertisers": ["nike"],"region": "US","scrapedAt": "2026-08-26T14:03:11.008Z"}
If the endpoint never answers at all, the run fails loudly instead of returning an empty dataset.
✅ Capabilities & Limits
Stated up front, so you do not pay a run to find out.
| Input / feature | Supported | Notes |
|---|---|---|
advertisers — required | ✅ | One search per term. Brand names resolve better than domains. |
region | ⚠️ | Scopes the lookup and is echoed back as searchRegion. It is your input, not proof that an ad ran there. |
maxAds | ⚠️ | Applied twice: once to advertiser records, once to creative records. A run with both enabled can therefore write up to 2 × maxAds items, and every item is one billable ad-found event. |
includeCreatives | ✅ | Delegates to viralanalyzer/google-ads-transparency. That actor runs a browser, so expect a slower run and its own platform cost on top. |
maxCreativesPerAdvertiser | ✅ | Per-term creative cap, 1 to 100. |
| Proxy | ✅ | Apify proxy for the search endpoint; the proxy config is forwarded to the upstream scraper too. |
Ad geographic targeting (targetRegion) | ❌ | Not emitted. There is no targetRegion field. searchRegion only repeats the region you asked for, and advertiserCountry is the registration country. The creative record carries a best-effort regions array scraped from "Shown in XX" text, which is frequently empty. |
First seen / last seen dates (firstSeenDate, lastSeenDate) | ❌ | Not emitted. No record carries an ad run date. Inside regions, firstShown and lastShown are always null. scrapedAt is the extraction time, nothing else. |
| Ad spend, impressions, clicks, CTR | ❌ | Google does not publish them, and this actor does not estimate them. |
| Keywords, bids, match types | ❌ | Not in the Transparency Center and not emitted. |
Field names adHeadline / adDescription / adFormat | ❌ | Do not exist. Creative text lives in headline, body and format. |
| Landing page content | ❌ | destinationUrl is captured; the page behind it is not fetched. |
Tips
- Run once with
includeCreatives: falseto resolveadvertiserIdvalues cheaply, then run again with the ids you care about. adCountIsExacttells you whetheradCountLow/adCountHighare a real figure or a bucket. Filter on it before charting volumes.advertiserIdis the stable join key across regions and across runs.
Use Cases
- Competitor creative review — read
headline,body,imageUrlanddestinationUrlfor the brands you track. - Advertiser identity resolution — turn a list of brand names into
AR…ids plus verification status. - Ad-volume benchmarking — compare
adCountLow/adCountHighacross a competitive set.
FAQ
Q: Does it cover YouTube video ads?
A: Creative records are classified as VIDEO when the card holds a <video> element or a YouTube iframe, and videoUrl captures that source. Classification comes from the rendered card, not from a Google-declared format field.
Q: Why is there no targetRegion or lastSeenDate?
A: Neither is available from the endpoints this actor reads. Earlier builds printed them from generated values; that was removed in v3.0.0.
Q: How am I billed?
A: One ad-found event per item written — advertiser records included. Diagnostic runs write one row and charge nothing.
🇧🇷 Português
Visão Geral
Resolva nomes de marca em identidades reais de anunciantes do Google — nome, id AR…, país de registro, a faixa de volume de anúncios que o próprio Google publica e o selo de verificação — e depois puxe os criativos ativos dessas mesmas marcas.
Dois tipos de registro caem no mesmo dataset:
- Registros de anunciante, vindos do endpoint de busca do Ads Transparency.
- Registros de criativo, obtidos por delegação ao
viralanalyzer/google-ads-transparency, o scraper de navegador que renderiza a página do anunciante. Desligue comincludeCreatives: false.
Registro de anunciante
{"query": "nike","advertiserName": "<nome que o Google tem registrado para o anunciante>","advertiserId": "AR…","advertiserCountry": "US","adCountLow": null,"adCountHigh": null,"adCountIsExact": false,"isVerifiedAdvertiser": true,"transparencyUrl": "https://adstransparency.google.com/advertiser/AR…?region=US","searchRegion": "US","dataSource": "google-ads-transparency-search","scrapedAt": "2026-08-26T14:03:11.008Z"}
| Campo | Tipo | Significado |
|---|---|---|
query | string | Termo do seu input advertisers que gerou o registro |
advertiserName | string | Nome do anunciante como registrado no Google |
advertiserId | string | Id do anunciante no Google, AR seguido de dígitos. Estável entre regiões |
advertiserCountry | string | null | Código de país do registro do anunciante |
adCountLow | number | null | Limite inferior da faixa de volume de anúncios reportada pelo Google |
adCountHigh | number | null | Limite superior dessa faixa |
adCountIsExact | boolean | true quando limite inferior e superior coincidem, ou seja, o Google deu número exato em vez de faixa |
isVerifiedAdvertiser | boolean | true só quando o Google marca a identidade como verificada |
transparencyUrl | string | Página pública do anunciante no Transparency Center, na sua região |
searchRegion | string | A region que você enviou, devolvida |
dataSource | string | Constante google-ads-transparency-search |
scrapedAt | string | Timestamp ISO-8601 da extração |
Registro de criativo
Sai quando includeCreatives está ligado e o scraper upstream devolve cards. Cada registro é o item do upstream repassado sem alteração, com query e dataSource definidos por este actor:
| Campo | Tipo | Significado |
|---|---|---|
creativeId | string | Id do criativo no Google, CR seguido de dígitos |
advertiserId | string | Dono do criativo |
advertiserName | string | null | Nome do anunciante lido da página |
advertiserDomain | string | null | Domínio do anunciante lido da página |
format | string | null | VIDEO, IMAGE ou TEXT, inferido pela mídia presente no card |
headline | string | null | Primeiro bloco de texto aproveitável do card |
body | string | null | Demais blocos de texto concatenados, cortados em 500 caracteres |
imageUrl | string | null | Primeira imagem não-ícone do card |
videoUrl | string | null | Source do <video> ou do iframe do YouTube, quando existe |
destinationUrl | string | null | Primeiro link externo do card |
regions | array | Lista best-effort de { region, firstShown, lastShown } extraída do texto "Shown in XX". firstShown e lastShown são sempre null |
creativeUrl | string | Link direto para o criativo no Transparency Center |
source | string | Constante google-ads-transparency |
query | string | Termo do seu input que gerou o criativo |
dataSource | string | Constante viralanalyzer/google-ads-transparency |
Exemplo de Entrada
{"advertisers": ["nike","shopify"],"region": "US","maxAds": 30,"includeCreatives": true,"maxCreativesPerAdvertiser": 10}
Parâmetros de Entrada
| Parâmetro | Tipo | Descrição |
|---|---|---|
advertisers | string[] | Obrigatório. Nomes de marca ou empresa a resolver. Nome comercial (nike) casa melhor que domínio completo (nike.com) |
region | string | Código de país de 2 letras para a busca: US, GB, BR, DE, ALL. Padrão US |
maxAds | integer | Teto aplicado aos registros de anunciante e, separadamente, aos de criativo. Padrão 30 |
includeCreatives | boolean | Busca os criativos pelo scraper de navegador upstream. Padrão true; o run demora mais com isso ligado |
maxCreativesPerAdvertiser | integer | Criativos pedidos por termo de busca. Padrão 10, máximo 100 |
proxyConfiguration | object | Proxy Apify, residencial ou datacenter. Padrão { "useApifyProxy": true } |
Quando nada casa
Se o Google responde mas não retorna anunciante para os seus termos, o run termina SUCCEEDED com uma única linha de diagnóstico e não cobra nada:
{"setup_status": "DIAGNOSTIC_GUIDE","_dataQuality": "diagnostic","message": "[DIAGNÓSTICO] O Google Ads Transparency respondeu à busca sem nenhum anunciante correspondente.","potential_causes": ["Os termos informados não correspondem a nenhum anunciante indexado na região escolhida.","O anunciante pode estar registrado em outra região."],"remediations": ["Use o nome comercial da marca (ex: \"nike\") em vez do domínio completo","Tente outra região no campo \"region\" (ex: BR, GB, DE)"],"advertisers": ["nike"],"region": "US","scrapedAt": "2026-08-26T14:03:11.008Z"}
Se o endpoint não responder nada, o run falha de forma explícita em vez de devolver dataset vazio.
✅ Capacidades e Limites
Declarado antes da compra, para não gastar um run descobrindo.
| Entrada / recurso | Suportado | Observações |
|---|---|---|
advertisers — obrigatório | ✅ | Uma busca por termo. Nome de marca resolve melhor que domínio. |
region | ⚠️ | Delimita a busca e volta como searchRegion. É o seu input, não prova de que um anúncio rodou ali. |
maxAds | ⚠️ | Aplicado duas vezes: uma aos registros de anunciante, outra aos de criativo. Um run com os dois ligados pode gravar até 2 × maxAds itens, e cada item é um evento ad-found cobrado. |
includeCreatives | ✅ | Delega ao viralanalyzer/google-ads-transparency. Aquele actor sobe um navegador, então conte com run mais lento e custo de plataforma próprio por cima. |
maxCreativesPerAdvertiser | ✅ | Teto de criativos por termo, de 1 a 100. |
| Proxy | ✅ | Proxy Apify no endpoint de busca; a configuração também é repassada ao scraper upstream. |
Segmentação geográfica do anúncio (targetRegion) | ❌ | Não é emitida. Não existe campo targetRegion. searchRegion apenas repete a região que você pediu, e advertiserCountry é o país de registro. O registro de criativo traz um array regions best-effort raspado do texto "Shown in XX", que costuma vir vazio. |
Datas de primeira/última veiculação (firstSeenDate, lastSeenDate) | ❌ | Não são emitidas. Nenhum registro traz data de veiculação. Dentro de regions, firstShown e lastShown são sempre null. scrapedAt é a hora da extração, e só. |
| Investimento, impressões, cliques, CTR | ❌ | O Google não publica, e este actor não estima. |
| Palavras-chave, lances, tipos de correspondência | ❌ | Não estão no Transparency Center e não são emitidos. |
Campos adHeadline / adDescription / adFormat | ❌ | Não existem. O texto do criativo está em headline, body e format. |
| Conteúdo da landing page | ❌ | destinationUrl é capturada; a página por trás dela não é aberta. |
Dicas
- Rode primeiro com
includeCreatives: falsepara resolver osadvertiserIdde forma barata, depois rode de novo só com os ids que interessam. adCountIsExactdiz seadCountLow/adCountHighsão número real ou faixa. Filtre por ele antes de plotar volumes.advertiserIdé a chave estável entre regiões e entre runs.
Casos de Uso
- Análise de criativos de concorrentes — leia
headline,body,imageUrledestinationUrldas marcas que você acompanha. - Resolução de identidade de anunciante — entra nome de marca, sai o id
AR…do Ads Transparency Center, com o status de verificação e a faixa de volume de anúncios. - Comparação de volume de anúncios — confronte
adCountLow/adCountHighentre um conjunto de concorrentes.
Perguntas Frequentes
P: Inclui anúncios em vídeo do YouTube?
R: O criativo é classificado como VIDEO quando o card tem um elemento <video> ou um iframe do YouTube, e videoUrl captura esse source. A classificação vem do card renderizado, não de um campo de formato declarado pelo Google.
P: Por que não existe targetRegion nem lastSeenDate?
R: Nenhum dos dois está disponível nos endpoints que este actor lê. Versões anteriores imprimiam esses campos a partir de valores gerados; isso saiu na v3.0.0.
P: Como sou cobrado?
R: Um evento ad-found por item gravado, incluindo os registros de anunciante. Run de diagnóstico grava uma linha e não cobra nada.
💰 Pricing
This actor uses Pay Per Event (PPE) pricing — you pay only per item written to the dataset (ad-found), advertiser records included. Platform usage is included. Diagnostic runs charge nothing. See the current price on the Pricing panel of this actor's Apify Store page.
🔗 Related Actors
- Google Ads Transparency (browser-based creatives)
- Facebook Ads Library
- Instagram Reels Scraper
- TikTok Viral Scanner
- Google Maps BR Scraper
- Mercado Livre Scraper
📝 Changelog
- v3.0.0 (2026-08-26) — Creatives added by delegating to
viralanalyzer/google-ads-transparency. Advertiser lookup kept. Fields that earlier builds generated rather than scraped (adHeadline,adDescription,adFormat,firstSeenDate,lastSeenDate,targetRegion) no longer exist. - v1.0.0 (2026-08-20) — Initial release: Pay-Per-Event pricing and automated proxy support
License
ISC © 2026 Viral Analyzer Platform
💡 Need AI analysis on top of this data — sentiment, trend detection and a dashboard, with no API keys to manage?
ViralAnalyzer runs this actor + 42 more data sources with built-in AI. JSON + insights in one call.