Floodlight / DV360 (Google)
Floodlight é o sistema de conversões do Google Marketing Platform (Campaign Manager 360 / DV360). Diferente do Google Ads — que na Cactus vive inteiro dentro do GTM — o Floodlight é carregado direto pelo front, via gtag.js.
:::info Esta é a exceção ao "não há SDK Google próprio no front"
O front injeta o Google Tag (DC-<advertiserId>) por conta própria e dispara gtag('event','conversion', { send_to }). Ver Google Ads pra entender o que continua sendo só GTM.
:::
Configuração por brand
// overrides/<brand>/app/config/analytics/analytics.ts
export const analyticsConfig: AnalyticsConfig = {
// ...
floodlight: {
advertiserId: "16089813",
group: "invmedia",
activities: {
allPages: "allpa001",
signUp: "signu00",
addToCart: "addto000",
ftd: "ftdch0",
purchase: "purch000",
},
},
};
| Campo | Equivale a | Pra quê serve |
|---|---|---|
advertiserId | src | ID do advertiser Floodlight. Vira o tag id DC-<advertiserId> no loader e em todo send_to |
group | type | Group tag string |
activities.* | cat | Activity tag string por conversão. Cada uma é opcional — activity ausente nunca dispara |
Opt-in por brand: floodlight: null (default do base) = integração inteiramente inerte. Não há fallback via API — a config é sempre local.
O send_to montado é:
DC-<advertiserId>/<group>/<cat>+standard
Brands ativas (2 hoje)
| Brand | advertiserId | group | allPages | signUp | addToCart | ftd | purchase |
|---|---|---|---|---|---|---|---|
cl-bet7k-com | 16089813 | invmedia | allpa001 | signu00 | addto000 | ftdch0 | purch000 |
ng-7k-bet | 16089813 | invmedia | allpa000 | signu0 | addto00 | ftdin0 | purch00 |
Mesmo advertiser e mesmo group nas duas; o que muda são os cat. fi-7k-bet replica o default do base com floodlight: null (declarado e desligado); todas as outras brands herdam o default.
Mapeamento activity → evento
As chaves de activities são os nomes canônicos declarados no canal floodlight da matriz de destinos (app/analytics/destinations.ts). O cat específico da brand é resolvido dentro do adapter.
Chave (slot.name) | Evento do front que dispara | Nome Floodlight típico |
|---|---|---|
allPages | init do global tag + todo page_view de navegação SPA | All Pages |
signUp | sign_up | Sign Up |
addToCart | deposit_initiated (depósito iniciado) | Add to Cart |
ftd | first_deposit | FTD |
purchase | purchase (depósito confirmado) | Purchase |
Se a brand não configurou aquela activity, o disparo é no-op silencioso — é por isso que a maioria das brands não vê nada no Floodlight mesmo com os eventos rodando normalmente no GTM.
Como carrega
useAnalyticsBootstrap chama initFloodlight(cfg) quando analyticsConfig.floodlight está setado, na mesma lane dos scripts de marketing da brand (eager por default, engagement quando a brand opta — ver GTM → Estratégia de carregamento).
O initFloodlight é idempotente e:
- Garante
window.dataLayer+window.gtagno formato exato da spec do Google. Reusa umwindow.gtagjá existente quando houver. - Injeta os defaults do Consent Mode v2 se ninguém injetou antes — detecta procurando um comando
consent/defaultno dataLayer. Isso cobre o caso da brand com GTM desligado (que é justamente o caso decl-bet7k-comeng-7k-bet, ambas comdisableGtm: true), garantindo que os sinais de ads existam antes do primeiro hit. gtag('js', new Date())+gtag('config', 'DC-<advertiserId>').- Injeta
https://www.googletagmanager.com/gtag/js?id=DC-<advertiserId>. - Dispara a conversão All Pages no init.
Coexistência com GTM
Múltiplos gtag('config', ...) (GA4 + DC-) é o padrão oficial do Google — as conversões ficam isoladas pelo send_to. O adapter nunca toca o caminho dataLayer.push({ event }) do container GTM, então o tracking GTM/Pixel existente fica intacto.
Sem double-fire do All Pages
A conversão All Pages é disparada no init e ancorada no evento page_view. Não há duplicidade no primeiro paint porque o page_view do dispatcher só é emitido em mudança de rota SPA (depois de uma janela de settle), nunca na pintura inicial.
Como debuggar
window.gtag // wrapper gtag (compartilhado com GA4 quando existe)
window.dataLayer // os comandos gtag entram aqui como pseudo-array `arguments`
Na Network, filtre por googletagmanager.com/gtag/js?id=DC- pro loader, e por ad.doubleclick.net / fls.doubleclick.net pros hits de conversão. Cada conversão carrega o src, type e cat na URL — confira se batem com a tabela da brand.
No Campaign Manager 360 / DV360, o Floodlight activity mostra conversões recebidas (latência de dashboard costuma ser bem maior que a dos pixels de ads).
Extensão útil: Google Tag Assistant, que enxerga o DC- como qualquer outro tag Google.
Anti-patterns
- Configurar
advertiserId/groupmas esquecer ocatda activity. A activity ausente é no-op silencioso — nenhum erro, nenhum hit, e a impressão de que a integração está quebrada. - Copiar os
catde uma brand pra outra. Oscatsão por activity e por brand (compare Chile e Nigeria na tabela).caterrado grava a conversão na activity errada. - Criar tag de Floodlight também no GTM. O front já dispara. Duas fontes = conversão dobrada.
- Assumir que o Floodlight herda o
disableGtm. Não herda:cl-bet7k-comeng-7k-bettêm o GTM desligado e o Floodlight ligado. Desligar GTM não desliga Floodlight (e vice-versa).