🎯 Match Quality

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.

📌 Resposta direta

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):

  1. Email hasheado (em) — peso altíssimo
  2. Telefone hasheado (ph) — peso alto
  3. External ID (external_id) — ID do seu CRM, peso médio
  4. Click IDs (fbc, fbp) — peso médio-alto
  5. Nome (fn, ln), cidade (ct), estado (st), CEP (zp), país (country) — peso médio combinado
  6. 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édioCAC típico (referência base 1.0)Comportamento da IA
3-41.40 (40% mais caro)Otimiza por proxy fraco, alta variância
5-61.15 (15% mais caro)Otimiza ok mas perde sinais
7-81.00 (referência)Otimização sólida, baixa variância
9-100.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:

  1. Trim espaços;
  2. Lowercase tudo;
  3. 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âmetro fbclid na 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
Assistente Trakvo
Respondo na hora