Atribuição First-Party: Como Cruzar GCLID/FBCLID com o Webhook do ERP Sem Perda de Dados
Por Que o Pixel Frontend Está Fragmentando Seus Dados
O modelo padrão de rastreamento em e-commerce funciona assim: o usuário clica no anúncio, o gtag.js ou o pixel Meta lê o GCLID/FBCLID da URL, armazena em cookie, e dispara um evento de conversão quando o pedido é concluído. Simples em teoria. Fragmentado na prática.
Três forças sistêmicas estão degradando esse modelo:
Bloqueadores de anúncios — a taxa de uso de extensões como uBlock Origin, AdBlock Plus, e similares está entre 25-35% em usuários desktop no Brasil. Esses bloqueadores não apenas bloqueiam anúncios: eles bloqueiam os scripts de rastreamento que dependem dos mesmos servidores. O gtag.js não executa. O pixel Meta não dispara. A conversão acontece mas nunca é registrada.
ITP (Intelligent Tracking Prevention) do Safari — o Safari limita cookies criados via JavaScript (third-party scripts) a 7 dias. Em alguns cenários com query parameters, o limite cai para 24 horas. Ciclos de compra que duram mais de 7 dias — consultas, abandono de carrinho, retorno — perdem a atribuição no navegador mais usado em iOS.
Cookies de terceiros em extinção — o Chrome iniciou a deprecação gradual de third-party cookies. Scripts externos que tentam rastrear o usuário entre sites estão cada vez mais isolados. O FBCLID do Meta é especialmente afetado em cenários onde o usuário navega de domínios externos para a loja.
O resultado agregado: em operações típicas na Nuvemshop, 15-30% das conversões reais não aparecem nos painéis de ads por falhas de rastreamento client-side.
O Problema Específico do GCLID e do FBCLID
O gclid e o fbclid são parâmetros que as plataformas de ads adicionam à URL de destino no momento do clique. Eles carregam o identificador único do clique que originou aquela sessão.
https://loja.com.br/produto?gclid=EAIaIQobChMI8d2x...&utm_source=google
Para que a conversão seja atribuída corretamente ao clique que a originou, esse gclid precisa:
- Ser capturado no carregamento da página
- Persistir durante toda a sessão de navegação (mesmo em páginas sem o parâmetro na URL)
- Ser associado ao ID do pedido no momento da compra
- Ser transmitido ao Google Ads junto com os dados da conversão
Cada etapa é um ponto de falha potencial com rastreamento puramente client-side.
A Arquitetura de Rastreamento Bulletproof
A solução tem três camadas que trabalham em conjunto:
Camada 1: Captura com Cookie First-Party no Domínio da Loja
O parâmetro gclid (e fbclid) deve ser capturado via script que executa antes do GTM, antes de scripts externos, no contexto do próprio domínio da loja. Isso significa um cookie first-party em loja.com.br, não um cookie de terceiro em analytics.plataforma.com.
(function () {
var params = new URLSearchParams(window.location.search);
var ids = {
gclid: params.get('gclid'),
fbclid: params.get('fbclid'),
utm_source: params.get('utm_source'),
utm_campaign: params.get('utm_campaign'),
};
// Só sobrescreve se há novos parâmetros (clique novo)
if (ids.gclid || ids.fbclid) {
var cookieValue = JSON.stringify({
...ids,
captured_at: Date.now(),
});
// Cookie first-party, TTL 30 dias, escopo de domínio raiz
document.cookie =
'nx_attribution=' + encodeURIComponent(cookieValue) +
'; max-age=2592000; path=/; SameSite=Lax';
}
})();
Diferença crítica para cookies third-party: este cookie é indistinguível de um cookie funcional da loja (sessão de usuário, carrinho). O ITP do Safari não o classifica como rastreamento de terceiro. Ad blockers não o bloqueiam porque o script executa no domínio da própria loja.
O TTL de 30 dias cobre a maioria dos ciclos de compra em e-commerce. Para ciclos mais longos (produtos de alto envolvimento, compras recorrentes programadas), o TTL é configurável.
Camada 2: Amarração ao ID do Pedido
Quando o pedido é criado, o checkout da Nuvemshop dispara um evento que o script do app captura antes da navegação para a página de confirmação. Nesse momento, o cookie nx_attribution ainda está acessível via document.cookie.
O fluxo:
- Usuário clica em “Finalizar compra”
- O script lê
nx_attributiondo cookie - Adiciona os IDs de atribuição ao payload do pedido (via campo customizado ou parâmetro de sessão)
- A Nuvemshop cria o pedido com os dados de atribuição embutidos
// Pseudocódigo do fluxo no NubeSDK
nube.checkout.onOrderCreate(function (order) {
var attributionCookie = document.cookie
.split('; ')
.find(row => row.startsWith('nx_attribution='));
if (!attributionCookie) return;
var attribution = JSON.parse(
decodeURIComponent(attributionCookie.split('=')[1])
);
order.metadata.nx_gclid = attribution.gclid;
order.metadata.nx_fbclid = attribution.fbclid;
order.metadata.nx_source = attribution.utm_source;
order.metadata.nx_campaign = attribution.utm_campaign;
});
O resultado: cada pedido na Nuvemshop carrega, em seus metadados, o identificador do clique que originou a sessão — independentemente de quanto tempo passou entre o clique e a compra.
Camada 3: Cruzamento com o Webhook do ERP (Bling)
Para uma visão da rotina operacional que essa arquitetura habilita — pausar ad sets por margem em tempo real — veja Otimização Orientada a Lucro com CMV do Bling.
Quando o pedido é confirmado na Nuvemshop, dois webhooks disparam em sequência:
Webhook da Nuvemshop (order/paid) — entrega o ID do pedido, o valor total, os SKUs comprados, e os metadados customizados (onde estão o gclid e fbclid gravados na camada 2).
Webhook do Bling — dispara quando o pedido é integrado ao ERP, entregando o CMV por SKU, a nota fiscal (com impostos calculados), e o custo de frete real da transportadora.
O backend do Nexopath cruza esses dois webhooks usando o ID do pedido como chave:
Pedido #48291 (Nuvemshop) ← → Pedido #48291 (Bling)
├── gclid: EAIaIQobChMI8d2x... ← Da Nuvemshop
├── receita: R$ 320,00 ← Da Nuvemshop
├── CMV: R$ 112,00 ← Do Bling
├── impostos: R$ 19,20 ← Do Bling (NF-e)
├── frete_real: R$ 18,50 ← Do Bling (logística)
└── lucro_liquido: R$ 170,30 ← Calculado
Com esses dados cruzados, o pipeline calcula o POAS real do pedido e o envia como conversion_value para o Google Ads via API Enhanced Conversions, usando o gclid como chave de match.
Por Que Não Basta Usar Enhanced Conversions Diretamente
O Google oferece Enhanced Conversions como uma forma de melhorar a atribuição via dados hasheados (email, telefone). Isso ajuda quando o gclid está ausente — o Google tenta fazer o match via identidade do usuário.
Mas há uma limitação fundamental: Enhanced Conversions com dados hasheados do browser ainda depende que o usuário esteja logado no Google. A taxa de match em cenários sem gclid fica entre 40-60%.
Com gclid disponível, o match rate sobe para 95%+. Isso significa que preservar o gclid via cookie first-party — e não depender do fallback de PII hasheada — é o que garante qualidade de atribuição em escala.
Cenários de Falha Que Esta Arquitetura Resolve
Usuário com ad blocker — o gclid está na URL no momento do clique. O script first-party executa antes de qualquer bloqueio externo. O cookie é criado. A conversão é atribuída.
Safari com ITP — o cookie é first-party, setado via document.cookie no contexto do domínio da loja. O ITP não o classifica como rastreamento de terceiro. O TTL de 30 dias é respeitado.
Ciclo de compra longo (> 7 dias) — o cookie persiste durante os 30 dias configurados. Um usuário que clica no anúncio na segunda e compra na quarta-feira da semana seguinte tem a conversão atribuída ao clique correto.
Navegação entre páginas sem UTMs — o cookie persiste durante toda a sessão e além. Um usuário que vai de /produto → /categoria → /produto-2 → checkout tem o gclid disponível no momento da compra, independentemente de qual URL carregou no final.
Frete subsidiado não contabilizado no ERP — o webhook do Bling carrega o custo logístico real da etiqueta de envio, não o valor cobrado do cliente. O pipeline usa esse número para calcular o impacto real do frete subsidiado na margem do pedido.
O Gargalo da Implementação Manual
É tecnicamente possível implementar cada camada desta arquitetura de forma independente:
- Script first-party para captura de GCLID: um desenvolvedor experiente leva 2-4 horas
- Amarração do cookie ao metadado do pedido: requer acesso ao NubeSDK, mais 4-8 horas
- Webhook da Nuvemshop + webhook do Bling + cruzamento: backend, banco de dados de staging, retry logic — semanas de desenvolvimento
- Enhanced Conversions API: autenticação OAuth2, deduplicação, retry exponencial — mais semanas
A implementação manual existe e funciona. O custo é de tempo de engenharia e manutenção contínua: cada mudança na API do Bling, na estrutura do webhook da Nuvemshop, ou nos requisitos da Google Ads API exige atualização.
O Nexopath POAS encapsula essa infraestrutura como serviço gerenciado. O setup leva menos de 10 minutos. As atualizações de API são absorvidas pelo time de infraestrutura do Nexopath.
Próximo Passo
O Nexopath POAS está disponível na Nuvemshop App Store. O setup de menos de 10 minutos inclui conexão com a Nuvemshop, integração com o ERP, e autenticação do Google Ads. As três camadas de rastreamento first-party descritas neste artigo são configuradas automaticamente. Free trial de 14 dias.