{"id":995,"date":"2026-04-02T10:36:51","date_gmt":"2026-04-02T10:36:51","guid":{"rendered":"https:\/\/cms.funnelsheet.com\/?p=995"},"modified":"2026-04-02T10:36:51","modified_gmt":"2026-04-02T10:36:51","slug":"how-to-capture-utms-in-webhooks-without-dropping-any-data","status":"publish","type":"post","link":"https:\/\/cms.funnelsheet.com\/?p=995","title":{"rendered":"How to Capture UTMs in Webhooks Without Dropping Any Data"},"content":{"rendered":"<p>How to Capture UTMs in Webhooks Without Dropping Any Data pode soar como um t\u00edtulo t\u00e9cnico, mas a pr\u00e1tica revela o problema central de rastreamento: UTMs de origem costumam sumir quando eventos s\u00e3o encaminhados para servi\u00e7os externos via webhook, especialmente em cen\u00e1rios com WhatsApp, CRM ou integra\u00e7\u00f5es server-to-server. Sem persist\u00eancia adequada, a atribui\u00e7\u00e3o fica confusa: o clique pode n\u00e3o corresponder ao lead, o source\/medium desaparece no caminho para o CRM e as m\u00e9tricas de GA4 divergem do que aparece no Meta. Este artigo aborda exatamente como capturar UTMs em webhooks sem perder dados, com foco em implementa\u00e7\u00e3o pr\u00e1tica, valida\u00e7\u00e3o e governan\u00e7a de dados. <\/p>\n<p>Voc\u00ea ver\u00e1 uma vis\u00e3o clara de onde o fluxo falha, qual arquitetura evita a perda de UTMs e um roteiro de configura\u00e7\u00e3o que pode ser levado direto para a infraestrutura: GTM Server-Side, Webhooks e integra\u00e7\u00e3o com ferramentas de an\u00e1lise para auditoria. A tese \u00e9 simples: se voc\u00ea aplicar uma estrat\u00e9gia de persist\u00eancia de UTMs no lado do servidor e padronizar o envio ao webhook, a correla\u00e7\u00e3o entre campanhas, cliques e convers\u00f5es passa a resistir a redirects, bloqueios de cookies e varia\u00e7\u00f5es entre GA4 e a plataforma de an\u00fancios. Ao final, voc\u00ea ter\u00e1 um setup test\u00e1vel, com valida\u00e7\u00e3o r\u00e1pida e indicadores de sa\u00fade do pipeline. <\/p>\n\n\n                        <figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1161\" height=\"1200\" src=\"https:\/\/cms.funnelsheet.com\/wp-content\/uploads\/2026\/04\/2gjp_az2o_i.jpg\" alt=\"a hard drive is shown on a white surface\" class=\"wp-image-899\" srcset=\"https:\/\/cms.funnelsheet.com\/wp-content\/uploads\/2026\/04\/2gjp_az2o_i.jpg 1161w, https:\/\/cms.funnelsheet.com\/wp-content\/uploads\/2026\/04\/2gjp_az2o_i-290x300.jpg 290w, https:\/\/cms.funnelsheet.com\/wp-content\/uploads\/2026\/04\/2gjp_az2o_i-991x1024.jpg 991w, https:\/\/cms.funnelsheet.com\/wp-content\/uploads\/2026\/04\/2gjp_az2o_i-768x794.jpg 768w\" sizes=\"auto, (max-width: 1161px) 100vw, 1161px\" \/><\/figure>\n                        \n\n<blockquote><p>UTMs precisam viajar at\u00e9 o endpoint do webhook. Sem persist\u00eancia no fluxo, qualquer redirecionamento pode apagar par\u00e2metros cruciais.<\/p><\/blockquote>\n<blockquote><p>UTMs bem capturados permitem reconciliar GA4, Meta e CRM sem depender de cookies de terceiros ou reenvio de dados repetidos.<\/p><\/blockquote>\n<h2>O problema na pr\u00e1tica: UTMs e webhooks<\/h2>\n<h3>Pontos de falha comuns no fluxo<\/h3>\n<p>O problema n\u00e3o est\u00e1 apenas no est\u00e1gio de clique. Quando o usu\u00e1rio interage com um canal de m\u00eddia e, em seguida, a a\u00e7\u00e3o \u00e9 enviada para um webhook (CRM, WhatsApp Business API, ou API de convers\u00e3o offline), UTMs podem n\u00e3o chegar intactas ao destino. Redirecionamentos, subdom\u00ednios, ou integra\u00e7\u00f5es que reescrevem query strings costumam perder utm_source, utm_medium ou utm_campaign. Em cen\u00e1rios com GTM Server-Side, a perda costuma ocorrer quando as UTMs s\u00e3o ingeridas no cliente e n\u00e3o persistidas no servidor entre a requisi\u00e7\u00e3o inicial e o envio do webhook. A documenta\u00e7\u00e3o oficial do Google sobre UTMs refor\u00e7a que esses par\u00e2metros precisam ser tratados de forma intencional para n\u00e3o serem descartados durante a coleta e o envio de dados. <a href=\"https:\/\/support.google.com\/analytics\/answer\/1033863?hl=pt-br\">UTM parameters \u2014 Google Analytics Help (pt-br)<\/a><\/p>\n<h3>Impacto pr\u00e1tico na atribui\u00e7\u00e3o<\/h3>\n<p>Quando UTMs se perdem, as discrep\u00e2ncias entre GA4, Meta Ads e o CRM aumentam. O resultado \u00e9 uma atribui\u00e7\u00e3o desalinhada: o clique que gerou a oportunidade n\u00e3o aparece com a origem correta no CRM; leads podem ser atribu\u00eddos a \u201cdireto\u201d ou a canais gen\u00e9ricos; e, no melhor cen\u00e1rio, a vis\u00e3o de retorno de investimento fica distorcida. Em setups com webhooks, a diferen\u00e7a entre o que foi capturado no momento do clique e o que chega ao backend pode durar dias, piorando a decis\u00e3o de or\u00e7amento. A integra\u00e7\u00e3o GTM Server-Side facilita a coleta de UTMs no servidor, mas depende de uma estrat\u00e9gia expl\u00edcita para repassar essas informa\u00e7\u00f5es no payload do webhook. Para refer\u00eancia t\u00e9cnica, veja a vis\u00e3o de GTM Server-Side sobre pipelines de envio de dados: <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\">GTM Server-Side overview<\/a>.<\/p>\n<h3>Cen\u00e1rios reais de perda de dados<\/h3>\n<p>Imagine uma campanha de WhatsApp que direciona para um formul\u00e1rio, com o envio do lead acionando um webhook para o CRM. Se o UTMs n\u00e3o foi persistido no servidor entre o clique e o envio, a origem pode aparecer como \u201cgoogle\/cpc\u201d no GA4, mas o CRM ver\u00e1 apenas \u201cdirect\u201d ou algu\u00e9m ter\u00e1 de reconectar dados manualmente. Em outra situa\u00e7\u00e3o, o GCLID pode somar ao redirecionar para o ambiente de checkout, sumindo da sequ\u00eancia de eventos, o que impede a liga\u00e7\u00e3o entre an\u00fancios pagos e convers\u00f5es offline. A pr\u00e1tica de capturar UTMs no servidor e repass\u00e1-las com o webhook \u00e9 o que evita esse desalinhamento, conforme diretrizes de implementa\u00e7\u00e3o de dados do ecossistema do Google e de terceiros. Para contexto t\u00e9cnico, o BigQuery pode ser usado para auditar a consist\u00eancia entre fontes: <a href=\"https:\/\/cloud.google.com\/bigquery\/docs\/overview\">BigQuery \u2014 Overview<\/a>.<\/p>\n<h2>Arquitetura recomendada: capturar UTMs sem perda de dados<\/h2>\n<h3>Persist\u00eancia de UTMs no lado do servidor<\/h3>\n<p>A pedra angular \u00e9 n\u00e3o depender de cookies de terceiros para manter UTMs entre o clique e o envio do webhook. Em GTM Server-Side, voc\u00ea pode capturar UTMs diretamente na request que chega ao servidor e armazen\u00e1-los em cookies de first\u2011party ou associ\u00e1-los a uma sess\u00e3o no servidor. A ideia \u00e9 criar uma \u201ccaixa de UTMs\u201d associada ao usu\u00e1rio\/a\u00e7\u00e3o, que viaja com o webhook mesmo quando o usu\u00e1rio passa por redirecionamentos ou camadas de privacidade. A documenta\u00e7\u00e3o oficial sugere a padroniza\u00e7\u00e3o dos dados no servidor para evitar perdas na cadeia de envio. <\/p>\n<h3>Padroniza\u00e7\u00e3o do envio no payload do webhook<\/h3>\n<p>Padronize a inclus\u00e3o dos par\u00e2metros UTMs no payload do webhook. Use nomes expl\u00edcitos como utm_source, utm_medium, utm_campaign, utm_term e utm_content. Evite abrevia\u00e7\u00f5es amb\u00edguas e mantenha a conven\u00e7\u00e3o de nomes consistente entre GA4, GTM Server-Side e o endpoint do webhook (CRM, API de mensagens, etc.). Al\u00e9m disso, inclua a data\/hora da captura e um identificador de sess\u00e3o para poder reconciliar eventos com o CRM e com o GA4. A implementa\u00e7\u00e3o pr\u00e1tica depende do formato do webhook, mas a regra permanece: UTMs devem ser parte expl\u00edcita do corpo da requisi\u00e7\u00e3o, n\u00e3o apenas de query strings que podem ser removidas em etapas posteriores.<\/p>\n<h3>Privacidade, consentimento e conformidade<\/h3>\n<p>Consent Mode v2 e LGPD imp\u00f5em restri\u00e7\u00f5es de uso de dados. Em cen\u00e1rios com UTMs em webhooks, o mais comum \u00e9 capturar apenas informa\u00e7\u00f5es de atribui\u00e7\u00e3o que n\u00e3o identifiquem diretamente o usu\u00e1rio e manter logs de consentimento associado ao evento. Em plataformas com consentimento granular, o envio de UTMs deveria obedecer ao estado de consentimento do usu\u00e1rio no momento da captura. Em resumo, implemente um mecanismo de fallback: se o consentimento n\u00e3o estiver ativo, n\u00e3o envie UTMs sens\u00edveis ou utilize pseudonimiza\u00e7\u00e3o quando poss\u00edvel. Consulte a documenta\u00e7\u00e3o oficial para diretrizes de consentimento e interoperabilidade entre plataformas. <\/p>\n<h2>Passo a passo de implementa\u00e7\u00e3o<\/h2>\n<ol>\n<li>Mapear fluxos cr\u00edticos de entrada: identifique onde os UTMs s\u00e3o gerados, onde os redirects ocorrem e onde o webhook \u00e9 acionado (CRM, Webhook de convers\u00e3o, WhatsApp Business API, etc.).<\/li>\n<li>Padronizar par\u00e2metros UTM: defina um conjunto fixo de nomes (utm_source, utm_medium, utm_campaign, utm_term, utm_content) e um formato consistente para todas as origens. Documente esse padr\u00e3o no guia de projeto da equipe de engenharia e de m\u00eddia.<\/li>\n<li>Configurar GTM Server-Side para captura de UTMs: crie ou ajuste o servidor de GTM para ler UTMs da requisi\u00e7\u00e3o inicial, armazen\u00e1-los em um cookie first\u2011party ou associ\u00e1-los \u00e0 sess\u00e3o do servidor e disponibiliz\u00e1-los para o envio de qualquer webhook subsequente.<\/li>\n<li>Incorporar UTMs no payload do webhook: modifique a estrutura de envio para incluir os par\u00e2metros UTM no corpo da requisi\u00e7\u00e3o, seguindo a conven\u00e7\u00e3o definida. Garanta que o webhook de destino aceite esses campos e os registre de forma consistente no CRM\/plataforma de automa\u00e7\u00e3o.<\/li>\n<li>Configurar valida\u00e7\u00e3o e auditoria: implemente logs no servidor, crie uma exporta\u00e7\u00e3o para BigQuery (ou similar) e estabele\u00e7a uma liga\u00e7\u00e3o entre UTMs capturadas e eventos de GA4 e de an\u00fancios para reconcilia\u00e7\u00e3o r\u00e1pida.<\/li>\n<li>Monitorar, manter e evoluir: ative alertas simples para queda de conformidade (por exemplo, UTMs ausentes em endpoints cr\u00edticos) e alinhe com ciclos de auditoria trimestrais com a equipe de Dev e de performance.<\/li>\n<\/ol>\n<h2>Valida\u00e7\u00e3o, auditoria e resposta a incidentes<\/h2>\n<h3>Quando o setup est\u00e1 quebrado<\/h3>\n<p>Se UTMs chegam incompletas ou ausentes no webhook, j\u00e1 h\u00e1 um desvio entre o que GA4 mostra e o que o CRM registra. Em opera\u00e7\u00f5es de m\u00eddia paga, esse desalinhamento se transforma em decis\u00f5es ruins de or\u00e7amento, pois a origem da convers\u00e3o n\u00e3o fica confi\u00e1vel. A primeira verifica\u00e7\u00e3o \u00e9 confirmar se UTMs s\u00e3o persistidas no servidor antes do envio do webhook e se o payload do webhook realmente os carrega. Consulta r\u00e1pida: <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\">GTM Server-Side overview<\/a>.<\/p>\n<h3>Sinais de que o setup est\u00e1 funcionando ou falhando<\/h3>\n<p>Compatibilidade entre UTMs capturadas, os payloads enviados para CRM e as jun\u00e7\u00f5es com dados de GA4 devem mostrar consist\u00eancia em pelo menos 90% das convers\u00f5es di\u00e1rias. Quedas nesse \u00edndice indicam perda de UTMs em algum dos pontos: redirecionamento, reescrita de URL ou envio ass\u00edncrono. Em casos de discrep\u00e2ncia, o BigQuery pode ser usado para cruzar logs de servidor com dados de GA4 para isolar o ponto de quebra. Para refer\u00eancia t\u00e9cnica, veja como o BigQuery funciona com dados de logs: <a href=\"https:\/\/cloud.google.com\/bigquery\/docs\/overview\">BigQuery \u2014 Overview<\/a>.<\/p>\n<h2>Erros comuns e adapta\u00e7\u00f5es de projeto<\/h2>\n<h3>Erro: UTMs n\u00e3o chegam ao webhook devido a redirects<\/h3>\n<p>Corre\u00e7\u00e3o pr\u00e1tica: capture UTMs imediatamente na primeira recep\u00e7\u00e3o da requisi\u00e7\u00e3o pelo GTM Server-Side, em vez de depender de passagens subsequentes de URL. Garanta que o payload do webhook inclua esses valores e que n\u00e3o haja reescrita de query strings entre a captura e o envio. Al\u00e9m disso, valide a presen\u00e7a dos campos UTMs antes de acionar o webhook, para evitar envios incompletos.<\/p>\n<h3>Erro: uso inadequado de cookies de terceiros<\/h3>\n<p>Corre\u00e7\u00e3o pr\u00e1tica: utilize cookies first\u2011party no dom\u00ednio do servidor para armazenar UTMs. Evite depender de cookies de terceiros, que podem ser bloqueados por navegadores, o que aumenta a probabilidade de perda de dados em fluxos cross-domain. Em contexts de LGPD, considere criptografia dos identificadores e apenas a persist\u00eancia necess\u00e1ria para a atribui\u00e7\u00e3o.<\/p>\n<h3>Erro: discrep\u00e2ncias entre GA4, CRM e webhook sem mecanismo de reconcilia\u00e7\u00e3o<\/h3>\n<p>Corre\u00e7\u00e3o pr\u00e1tica: estabele\u00e7a um fluxo de reconcilia\u00e7\u00e3o que inclua uma chave comum (session_id ou user_id) e uma trilha que una UTMs capturadas com eventos no GA4 e com as entradas no CRM. Um dashboard simples em Looker Studio a partir de BigQuery pode facilitar a identifica\u00e7\u00e3o de gaps de forma proativa.<\/p>\n<p>Se voc\u00ea precisa de alinhamento t\u00e9cnico espec\u00edfico com GA4, GTM Server-Side e integra\u00e7\u00f5es com seu CRM, a Funnelsheet pode ajudar a desenhar e executar o diagn\u00f3stico e a implementa\u00e7\u00e3o. <\/p>\n<p>Em resumo, a pr\u00e1tica recomendada \u00e9: capturar UTMs no servidor, padronizar o envio ao webhook e validar continuamente a consist\u00eancia entre as fontes de dados. A implementa\u00e7\u00e3o n\u00e3o \u00e9 trivial, mas \u00e9 escal\u00e1vel quando bem documentada e automatizada. Para refer\u00eancias oficiais sobre como tratar UTMs no contexto de GA4, consulte a documenta\u00e7\u00e3o de UTMs da Google: <a href=\"https:\/\/support.google.com\/analytics\/answer\/1033863?hl=pt-br\">UTM parameters \u2014 Google Analytics Help (pt-br)<\/a> e acompanhe a vis\u00e3o de GTM Server-Side para orquestra\u00e7\u00e3o de dados: <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\">GTM Server-Side overview<\/a>.<\/p>\n<p>Para uma leitura adicional sobre como grandes plataformas tratam dados de servidor e a pr\u00e1tica de usar BigQuery como reposit\u00f3rio de auditoria, confira o BigQuery \u2014 Overview: <a href=\"https:\/\/cloud.google.com\/bigquery\/docs\/overview\">BigQuery Overview<\/a>.<\/p>\n<p>Pr\u00f3ximo passo: se voc\u00ea quer que a implementa\u00e7\u00e3o seja feita com governan\u00e7a, velocidade e sem desgastes entre equipes, considere agendar uma consultoria pr\u00e1tica com a Funnelsheet para alinhar GA4, GTM Server-Side, CAPI e integra\u00e7\u00f5es com seu CRM, com foco em UTMs persistentes nos webhooks. <\/p>","protected":false},"excerpt":{"rendered":"<p>How to Capture UTMs in Webhooks Without Dropping Any Data pode soar como um t\u00edtulo t\u00e9cnico, mas a pr\u00e1tica revela o problema central de rastreamento: UTMs de origem costumam sumir quando eventos s\u00e3o encaminhados para servi\u00e7os externos via webhook, especialmente em cen\u00e1rios com WhatsApp, CRM ou integra\u00e7\u00f5es server-to-server. Sem persist\u00eancia adequada, a atribui\u00e7\u00e3o fica confusa:&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[9,13,14,19,124],"content_language":[5],"class_list":["post-995","post","type-post","status-publish","format-standard","hentry","category-blogen","tag-crm","tag-ga4","tag-gtm-server-side","tag-utms","tag-webhooks","content_language-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=\/wp\/v2\/posts\/995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=995"}],"version-history":[{"count":0,"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=\/wp\/v2\/posts\/995\/revisions"}],"wp:attachment":[{"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=995"},{"taxonomy":"content_language","embeddable":true,"href":"https:\/\/cms.funnelsheet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcontent_language&post=995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}