Por que seu EMQ está em 5 (e como subir pra 8+)
EMQ baixo é a causa silenciosa de CAC alto. Em 2026, marcas com EMQ 8+ reduzem CAC em 15-25% comparado a quem fica em 5-6. Esta é a checklist técnica completa pra subir o EMQ do Meta CAPI sem mistério.
EMQ baixo (5 ou menos) acontece porque sua implementação manda poucos sinais de identidade pra Meta. As 5 correções principais: (1) hashear email em SHA-256 lowercase trimmed; (2) normalizar telefone em E.164 antes do hash; (3) propagar click IDs (fbc, fbp); (4) incluir PII completa (nome, cidade, CEP, estado); (5) garantir IP e User-Agent do request. Aplicado certo, você sai de 5 pra 8 em 7-14 dias.
O que é EMQ e como Meta calcula
EMQ (Event Match Quality) é um score de 1 a 10 que Meta atribui a cada evento que você envia. Mede o quanto a Meta consegue casar o evento a um usuário real no Facebook/Instagram.
Quanto mais campos identificadores você manda, mais provável que Meta encontre uma "match" precisa. Os campos que mais contam (em ordem de peso):
- Email hasheado (em) — peso altíssimo
- Telefone hasheado (ph) — peso alto
- External ID (external_id) — ID do seu CRM, peso médio
- Click IDs (fbc, fbp) — peso médio-alto
- Nome (fn, ln), cidade (ct), estado (st), CEP (zp), país (country) — peso médio combinado
- IP + User-Agent — peso baixo individual, mas obrigatório
Por que CAC depende disso
O Meta usa EMQ pra calibrar a otimização. Eventos com EMQ alto são considerados "verdade" pela IA — ela otimiza fortemente por padrões similares. Eventos com EMQ baixo são "ruído" — IA ignora ou desconfia.
Em campanhas reais que auditamos em 2026:
| EMQ médio | CAC típico (referência base 1.0) | Comportamento da IA |
|---|---|---|
| 3-4 | 1.40 (40% mais caro) | Otimiza por proxy fraco, alta variância |
| 5-6 | 1.15 (15% mais caro) | Otimiza ok mas perde sinais |
| 7-8 | 1.00 (referência) | Otimização sólida, baixa variância |
| 9-10 | 0.85 (15% mais barato) | Look-alike de altíssima precisão |
Diagnóstico: por que seu EMQ está baixo
Antes de corrigir, descubra a causa. Vá em Events Manager → seu pixel → Diagnostics. Procure avisos como:
- "Missing customer information parameters" → falta email/telefone/nome no user_data
- "Email not hashed correctly" → hash errado (com espaço, uppercase, etc.)
- "Phone number format invalid" → telefone fora do formato E.164
- "Click ID missing" → fbc/fbp não está sendo enviado
- "Server and browser events received without event_id" → dedupe quebrado
Fix 1 — Hash de email (peso alto)
Email é o sinal mais valioso. Spec da Meta:
- Trim espaços;
- Lowercase tudo;
- SHA-256 do resultado (não MD5, não plaintext, não base64).
// PHP
$email = '[email protected] ';
$normalized = strtolower(trim($email)); // '[email protected]'
$hash = hash('sha256', $normalized);
// → 'a7f5f35426b927411fc9231b56382173e3b7be3...'
// JavaScript (Node)
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update(email.trim().toLowerCase()).digest('hex');
Erro comum: hashear com espaço no final ou letra maiúscula. Resultado: hash diferente do que Meta espera, EMQ trava em 0.
Fix 2 — Telefone em E.164 antes do hash (peso alto)
Telefone é o segundo sinal mais valioso, mas requer normalização cuidadosa. Spec: formato E.164 (padrão internacional).
// "11 99999-8888" → "+5511999998888" → SHA-256
function normalizePhone($phone) {
$digits = preg_replace('/[^0-9]/', '', $phone);
// Adiciona DDI do Brasil se não tem
if (strlen($digits) === 11 && $digits[0] !== '5') {
$digits = '55' . $digits;
}
// Tira zero inicial do DDD se vier
if (strlen($digits) === 12 && substr($digits, 0, 2) === '55' && $digits[2] === '0') {
$digits = '55' . substr($digits, 3);
}
return '+' . $digits;
}
$phone_e164 = normalizePhone('(11) 99999-8888'); // '+5511999998888'
$hash = hash('sha256', $phone_e164);
Sozinho, telefone hasheado bem pode subir EMQ de 4 → 7.
Fix 3 — Click IDs (fbc + fbp)
Quando um usuário clica no seu anúncio do Meta, o navegador grava dois cookies:
_fbc— Facebook Click ID (vem do parâmetrofbclidna URL)_fbp— Facebook Browser ID (gerado pelo pixel)
Você precisa capturar esses cookies no seu backend e enviar pela CAPI:
// PHP - lê do request HTTP
$user_data = [
'em' => [hashEmail($email)],
'ph' => [hashPhone($phone)],
'fbp' => $_COOKIE['_fbp'] ?? null,
'fbc' => $_COOKIE['_fbc'] ?? null,
'client_ip_address' => $_SERVER['REMOTE_ADDR'],
'client_user_agent' => $_SERVER['HTTP_USER_AGENT'],
];
Se o usuário converte horas/dias depois do click (típico em SaaS B2B), persista esses cookies no LocalStorage ou no servidor associado ao session_id. Senão eles expiram e EMQ cai.
Fix 4 — PII completa (nome, endereço)
Cada campo adicional é mais um sinal pra Meta casar. Pra checkout de e-com, você JÁ TEM esses dados — só falta enviar:
$user_data = array_merge($user_data, [
'fn' => [hash('sha256', strtolower(trim($order->first_name)))],
'ln' => [hash('sha256', strtolower(trim($order->last_name)))],
'ct' => [hash('sha256', strtolower(trim($order->city)))],
'st' => [hash('sha256', strtolower(trim($order->state_code)))],
'zp' => [hash('sha256', preg_replace('/[^0-9]/', '', $order->zip))],
'country' => [hash('sha256', 'br')],
'external_id' => [hash('sha256', (string)$order->customer_id)],
]);
Cada um desses campos pode somar 0.3-0.7 no EMQ.
Fix 5 — IP e User-Agent corretos
São obrigatórios e baixam EMQ quando faltam. Cuidado com IP atrás de proxy/CloudFlare:
// CloudFlare passa o IP real em CF-Connecting-IP
$ip = $_SERVER['HTTP_CF_CONNECTING_IP']
?? $_SERVER['HTTP_X_FORWARDED_FOR']
?? $_SERVER['REMOTE_ADDR'];
// Pega só o primeiro se for X-Forwarded-For (pode ser lista)
$ip = trim(explode(',', $ip)[0]);
$user_data['client_ip_address'] = $ip;
$user_data['client_user_agent'] = $_SERVER['HTTP_USER_AGENT'];
Monitorar EMQ continuamente
EMQ pode cair sem você notar. Coisas que mato EMQ:
- Deploy quebrou e parou de enviar telefone;
- Cookie de click ID está expirando antes do que deveria;
- Volume de tráfego mudou (campanhas novas, audiências diferentes);
- Meta atualizou spec e seu hash ficou desatualizado.
Crie alerta automático: se EMQ cair abaixo de 7.0 por 48h, dispara notificação. SaaS como Trakvo fazem isso out-of-the-box.
FAQ
O que é EMQ exatamente?
EMQ (Event Match Quality) é um score de 1 a 10 que mede quão bem o Meta consegue casar seus eventos a usuários reais na plataforma. Quanto maior, melhor a IA otimiza. EMQ é calculado por evento, baseado nos últimos 7 dias.
Qual EMQ é considerado bom?
Meta classifica: 1-5 baixo, 5-7 mediano (label "Good"), 8-10 alto (label "Great"). Pra escalar campanhas, mire 8+. Acima de 9 é excepcional e requer setup técnico cuidadoso.
EMQ alto realmente reduz CAC?
Sim, mensuravelmente. Subir de EMQ 5 → 8 tipicamente reduz CAC em 15-25%. Motivo: a IA da Meta otimiza com base em quem REALMENTE convertou. Com dados ruins, ela otimiza por amostra errada — ad fica caro pra retornar pouco.
Posso ter EMQ alto SEM server-side?
É praticamente impossível chegar a EMQ 7+ só com pixel client. O máximo realista é 4-5. Porque pixel sozinho captura só IP + UA + cookie, e Meta precisa de mais sinais (email hasheado, telefone, click IDs).
Demora quanto pra EMQ subir após mudanças?
EMQ atualiza com janela de 48h. Você verá o impacto de mudanças em 1-2 dias úteis. Pra estabilizar a melhoria, conte 7 dias.
EMQ 8+ sem trabalho técnico
Trakvo configura hash, normalização, click IDs e PII enrichment automaticamente. Match Quality 8+ garantido em 7 dias ou seu dinheiro de volta.
Falar com o time