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
9 days 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
$0.0025 per ad found — $2.50 per 1,000 items — plus $0.00005 per Actor start.
This actor uses Pay Per Event (PPE) pricing: you pay per item written to the dataset (ad-found), advertiser records included. Runs that end with a diagnostic record charge nothing.
Apify platform usage (compute units and proxy) is billed to your own account on top of the event price. The Pricing panel on this actor's Apify Store page always shows the price in force.
🔗 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.