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.
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.
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.
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.
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.