Pular para o conteúdo
Medição · Meta Ads

Por que o painel do Meta mostra conversa e não mostra venda

Nove em cada dez anunciantes perdem a atribuição do clique para WhatsApp. O painel mostra conversa iniciada, o comercial não vê venda, e o custo por lead sobe semana após semana. Este é o motivo técnico, e a ordem certa de resolver.

Por Fabiano de Medeiros · Fórmula Mídia · 3 de setembro de 2026

Resposta curta: o anúncio de clique para WhatsApp injeta um identificador chamado ctwa_clid na primeira mensagem. Se você não devolver esse identificador à Meta quando o lead qualifica ou compra, o algoritmo aprende apenas quem clica, nunca quem fecha. O painel continua mostrando conversa iniciada, e o custo por cliente sobe.

O sintoma: conversa sobe, venda não

A cena se repete. A campanha de clique para WhatsApp está no ar, o Gerenciador mostra centenas de conversas iniciadas, o custo por conversa até cai mês a mês, e o comercial diz que não está entrando venda nenhuma diferente do normal.

A leitura fácil é culpar o atendimento. Quase sempre está errada. O que aconteceu é que o algoritmo fez exatamente o que você pediu: você pediu conversa, ele entregou conversa. Ninguém nunca contou a ele quais dessas conversas viraram cliente.

É um problema de retorno de informação, não de mídia. E ele é a regra, não a exceção: os levantamentos de mercado de 2026 apontam que nove em cada dez anunciantes de clique para WhatsApp não devolvem o resultado à plataforma.

O elo perdido: o ctwa_clid

Quando alguém clica no seu anúncio e cai na conversa, a Meta injeta um identificador na primeira mensagem daquela pessoa. Ele chega no webhook, dentro do bloco de referral, e se chama ctwa_clid, click to WhatsApp click id.

Esse identificador é o único elo entre aquela conversa e o anúncio que a gerou. Ele não é telefone, não é nome, não identifica a pessoa: identifica o clique. E ele tem uma característica cruel, só aparece uma vez. Se o seu sistema de atendimento não o guardar na primeira mensagem, ele se perde para sempre, e com ele a chance de ligar aquela venda ao anúncio.

O que a maioria dos sistemas faz

Recebe o webhook, cria o contato, salva nome e telefone, e descarta o resto do payload, incluindo o referral. A partir daí a conversa existe no CRM e não existe mais para a Meta.

Guardar é a parte fácil. A parte que quase ninguém faz é a segunda metade: devolver. Quando aquela conversa vira lead qualificado ou venda, esse identificador precisa voltar à Meta como evento de conversão, pela API de conversões.

O que medimos na conta do Grupo EMOPS

No Grupo EMOPS, operação B2B de controle de pragas, segurança contra incêndio e saneamento, em Manaus, com atendimento inteiramente por WhatsApp, cruzamos os contatos que traziam o identificador com o desfecho comercial de cada um. O resultado mais interessante não foi o volume: foi a qualidade.

O achado

Quem chegou por clique no anúncio qualificou 4,5 vezes pior que quem viu o anúncio e procurou a empresa por conta própria. Medição de agosto de 2026, uma conta, um período, não é lei de mercado, é um dado real com origem declarada. Publicado com autorização do cliente. O mesmo grupo é o nosso case de SEO local.

Esse número explica o sintoma inteiro. Se quem clica qualifica muito pior, e o algoritmo só recebe de volta o evento de quem clicou, ele passa a otimizar para o pior público disponível, e faz isso cada vez melhor. O custo por conversa cai, o custo por cliente sobe, e os dois números convivem no mesmo painel sem se contradizerem.

É também o argumento mais forte para devolver o evento: não é sobre relatório bonito. É sobre parar de ensinar o algoritmo a comprar o clique errado.

O contrato da API, campo a campo

A parte técnica é curta. Conferimos na documentação da Meta em agosto de 2026, e o corpo do evento é este:

POST https://graph.facebook.com/v25.0/{DATASET_ID}/events?access_token=…

data: [{
  event_name        "QualifiedLead" | "Purchase"
  event_time        unix, em segundos
  action_source     "business_messaging"     ← não "website"
  messaging_channel "whatsapp"
  user_data:   { ctwa_clid: "…" }            ← aqui dentro, e SEM hash
  custom_data: { value, currency, … }
}]

Os três detalhes que invalidam tudo se errados

  • action_source tem que ser business_messaging. Mandar website é o erro mais comum, e ele invalida a atribuição de mensageria inteira, o evento entra, não dá erro, e não liga em anúncio nenhum.
  • O ctwa_clid vai dentro de user_data e não leva hash. Todo o resto de user_data é hasheado; este campo não. Quem aplica o hash por simetria quebra o casamento sem perceber.
  • Use QualifiedLead ou Purchase. Lead seco não é valor válido nesse contexto, e um nome de evento inválido é rejeitado silenciosamente na prática de muita conta.

Duas armadilhas da documentação

1. Um evento velho derruba o lote inteiro

A documentação diz que o event_time pode ter até 7 dias. O que ela não destaca é a consequência: não é o evento velho que é descartado, é a requisição inteira que é rejeitada.

Num envio em lote, um único contato antigo mata todos os outros junto. O filtro de 7 dias tem que estar na consulta que monta o lote, não no tratamento do erro. E isso mata a ideia de "mandar o histórico todo de uma vez": o retorno começa a valer daqui para a frente.

2. A Meta não deduplica por você

O campo event_id serve para casar um evento de pixel com o mesmo evento vindo do servidor. Ele não resolve reenvio seu. Se o seu processo roda de hora em hora e relê os mesmos contatos, você manda o mesmo evento várias vezes, e evento duplicado envenena o aprendizado do algoritmo tão bem quanto evento ausente.

O controle é inteiramente da sua conta: precisa existir uma marca de "já enviado" no seu banco, gravada depois do envio bem-sucedido. Sem ela, o processo reenvia tudo, sempre.

A ordem que quase todo mundo inverte

Esta é a parte que nos custou uma medição para entender, e é a que mais economiza tempo de quem lê.

Quando fomos dimensionar quantos eventos aquele pipeline mandaria por semana, o número foi um ou dois. Não porque a implementação estivesse errada, porque a conta rodava campanhas de engajamento, não de conversa. Campanha de engajamento gera clique sem identificador confiável e sem volume.

A conclusão que mudou a ordem da fila

Um algoritmo de otimização não aprende com um evento por semana. Construir o retorno antes de existir volume entrega uma engrenagem correta girando no vazio, e o pior é que parece progresso.

A ordem correta é esta, e ela é barata de seguir:

  • Primeiro: campanha com objetivo de conversa. Com ela, o clique vai direto ao WhatsApp e o identificador vem sempre.
  • Depois: volume. Semanas suficientes para separar sinal de ruído.
  • Só então: o retorno do evento pela API. É trabalho de uma hora quando a hora chega.

Fazer na ordem inversa, que é o que a maioria dos tutoriais ensina, significa passar semanas implementando um retorno que não tem o que retornar.

Perguntas frequentes

O que é o ctwa_clid?+

É o identificador que a Meta injeta quando alguém clica num anúncio de clique para WhatsApp. Ele chega até você no webhook da primeira mensagem, dentro do campo de referral, e é o único elo entre aquela conversa e o anúncio que a gerou. Sem devolvê-lo, a Meta nunca sabe o que aconteceu depois do clique.

Por que meu custo por lead sobe mesmo com o anúncio funcionando?+

Porque o algoritmo otimiza para o que ele consegue medir. Se o único evento que volta é "conversa iniciada", ele aprende a comprar quem clica, não quem compra. Com o tempo, ele fica muito bom em trazer cliques baratos que não fecham, e o custo por lead qualificado sobe enquanto o custo por conversa cai.

Preciso de API de conversões se já tenho o pixel instalado?+

Para clique para WhatsApp, sim: o pixel não alcança a conversa, que acontece dentro do WhatsApp. O evento tem que sair do seu servidor ou do seu sistema de atendimento, com action_source de mensageria, não de site.

Posso mandar o histórico de conversas antigas de uma vez?+

Não. A Meta aceita evento com até 7 dias, e um evento mais velho dentro do lote derruba a requisição inteira, não só aquele evento. O retorno começa a valer daqui para a frente, não retroativo.

Qual o primeiro passo, se hoje eu não meço nada?+

Não é o código. É trocar o objetivo da campanha para conversa. Campanha de engajamento gera clique sem identificador confiável e sem volume; com objetivo de conversa o identificador vem sempre. Sem volume, o algoritmo não tem o que aprender, e o pipeline de retorno gira no vazio.

Quer conferir se a sua conta está perdendo atribuição?

Se o seu painel mostra conversa iniciada e o comercial não vê venda, provavelmente o identificador está sendo descartado na primeira mensagem. Dá para verificar em minutos.