Por qué tu EMQ está en 5 (y cómo subirlo a 8+)
El EMQ bajo es la causa silenciosa del CAC alto. En 2026, las marcas con EMQ 8+ reducen CAC en 15-25% comparado con quien queda en 5-6. Esta es la checklist técnica completa para subir el EMQ de Meta CAPI sin misterio.
Un EMQ bajo (5 o menos) ocurre porque tu implementación envía pocas señales de identidad a Meta. Las 5 correcciones principales: (1) hashear email en SHA-256 lowercase trimmed; (2) normalizar teléfono en E.164 antes del hash; (3) propagar click IDs (fbc, fbp); (4) incluir PII completa (nombre, ciudad, código postal, estado); (5) garantizar IP y User-Agent del request. Aplicado correctamente, sales de 5 a 8 en 7-14 días.
Qué es EMQ y cómo lo calcula Meta
EMQ (Event Match Quality) es un score de 1 a 10 que Meta asigna a cada evento que envías. Mide cuánto logra Meta emparejar el evento con un usuario real en Facebook/Instagram.
Cuantos más campos identificadores envíes, más probable que Meta encuentre un "match" preciso. Los campos que más cuentan (en orden de peso):
- Email hasheado (em) — peso altísimo
- Teléfono hasheado (ph) — peso alto
- External ID (external_id) — ID de tu CRM, peso medio
- Click IDs (fbc, fbp) — peso medio-alto
- Nombre (fn, ln), ciudad (ct), estado (st), código postal (zp), país (country) — peso medio combinado
- IP + User-Agent — peso bajo individual, pero obligatorio
Por qué el CAC depende de esto
Meta usa EMQ para calibrar la optimización. Eventos con EMQ alto se consideran "verdad" por la IA — optimiza fuertemente por patrones similares. Eventos con EMQ bajo son "ruido" — la IA los ignora o desconfía.
En campañas reales que auditamos en 2026:
| EMQ promedio | CAC típico (referencia base 1.0) | Comportamiento de la IA |
|---|---|---|
| 3-4 | 1.40 (40% más caro) | Optimiza por proxy débil, alta varianza |
| 5-6 | 1.15 (15% más caro) | Optimiza ok pero pierde señales |
| 7-8 | 1.00 (referencia) | Optimización sólida, baja varianza |
| 9-10 | 0.85 (15% más barato) | Look-alike de altísima precisión |
Diagnóstico: por qué tu EMQ está bajo
Antes de corregir, descubre la causa. Ve a Events Manager → tu pixel → Diagnostics. Busca avisos como:
- "Missing customer information parameters" → falta email/teléfono/nombre en user_data
- "Email not hashed correctly" → hash equivocado (con espacio, uppercase, etc.)
- "Phone number format invalid" → teléfono fuera del formato E.164
- "Click ID missing" → fbc/fbp no se está enviando
- "Server and browser events received without event_id" → dedupe roto
Fix 1 — Hash de email (peso alto)
Email es la señal más valiosa. Spec de Meta:
- Trim espacios;
- Lowercase todo;
- SHA-256 del resultado (no MD5, no plaintext, no 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');
Error común: hashear con espacio al final o letra mayúscula. Resultado: hash diferente del que Meta espera, EMQ queda trabado en 0.
Fix 2 — Teléfono en E.164 antes del hash (peso alto)
El teléfono es la segunda señal más valiosa, pero requiere normalización cuidadosa. Spec: formato E.164 (estándar internacional).
// "11 9999-8888" → "+5491199998888" → SHA-256 (Argentina)
function normalizePhone($phone, $defaultCountryCode = '54') {
$digits = preg_replace('/[^0-9]/', '', $phone);
// Agrega código de país si no está
// (54 = Argentina, 52 = México, 57 = Colombia, 56 = Chile, 34 = España)
if (substr($digits, 0, strlen($defaultCountryCode)) !== $defaultCountryCode) {
$digits = $defaultCountryCode . $digits;
}
return '+' . $digits;
}
$phone_e164 = normalizePhone('(11) 9999-8888', '54'); // '+5491199998888'
$hash = hash('sha256', $phone_e164);
Solo, un teléfono bien hasheado puede subir EMQ de 4 → 7.
Fix 3 — Click IDs (fbc + fbp)
Cuando un usuario hace clic en tu anuncio de Meta, el navegador graba dos cookies:
_fbc— Facebook Click ID (viene del parámetrofbcliden la URL)_fbp— Facebook Browser ID (generado por el pixel)
Necesitas capturar esas cookies en tu backend y enviarlas vía CAPI:
// PHP - lee del 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'],
];
Si el usuario convierte horas/días después del click (típico en SaaS B2B), persiste esas cookies en LocalStorage o en el servidor asociado al session_id. Si no, expiran y el EMQ cae.
Fix 4 — PII completa (nombre, dirección)
Cada campo adicional es una señal más para que Meta empareje. Para un checkout de e-com, YA TIENES esos datos — solo falta enviarlos:
$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', 'ar')], // o 'mx', 'co', 'cl', 'es'
'external_id' => [hash('sha256', (string)$order->customer_id)],
]);
Cada uno de esos campos puede sumar 0.3-0.7 al EMQ.
Fix 5 — IP y User-Agent correctos
Son obligatorios y bajan el EMQ cuando faltan. Cuidado con IP detrás de proxy/CloudFlare:
// CloudFlare pasa el IP real en CF-Connecting-IP
$ip = $_SERVER['HTTP_CF_CONNECTING_IP']
?? $_SERVER['HTTP_X_FORWARDED_FOR']
?? $_SERVER['REMOTE_ADDR'];
// Toma solo el primero si es X-Forwarded-For (puede ser una lista)
$ip = trim(explode(',', $ip)[0]);
$user_data['client_ip_address'] = $ip;
$user_data['client_user_agent'] = $_SERVER['HTTP_USER_AGENT'];
Monitorear EMQ continuamente
El EMQ puede caer sin que te des cuenta. Cosas que matan el EMQ:
- Un deploy rompió algo y dejó de enviar teléfono;
- La cookie del click ID está expirando antes de lo que debería;
- El volumen de tráfico cambió (campañas nuevas, audiencias diferentes);
- Meta actualizó la spec y tu hash quedó desactualizado.
Crea alerta automática: si EMQ cae por debajo de 7.0 por 48h, dispara notificación. SaaS como Trakvo hacen esto out-of-the-box.
FAQ
¿Qué es EMQ exactamente?
EMQ (Event Match Quality) es un score de 1 a 10 que mide qué tan bien Meta logra emparejar tus eventos con usuarios reales en la plataforma. Cuanto mayor, mejor optimiza la IA. EMQ se calcula por evento, basado en los últimos 7 días.
¿Qué EMQ se considera bueno?
Meta clasifica: 1-5 bajo, 5-7 mediano (label "Good"), 8-10 alto (label "Great"). Para escalar campañas, apunta a 8+. Arriba de 9 es excepcional y requiere setup técnico cuidadoso.
¿Un EMQ alto realmente reduce CAC?
Sí, mensurablemente. Subir de EMQ 5 → 8 típicamente reduce CAC en 15-25%. Motivo: la IA de Meta optimiza basado en quién REALMENTE convirtió. Con datos malos, optimiza por muestra equivocada — el ad queda caro y rinde poco.
¿Puedo tener EMQ alto SIN server-side?
Es prácticamente imposible llegar a EMQ 7+ solo con pixel client. El máximo realista es 4-5. Porque el pixel solo captura IP + UA + cookie, y Meta necesita más señales (email hasheado, teléfono, click IDs).
¿Cuánto tarda el EMQ en subir tras cambios?
EMQ se actualiza con ventana de 48h. Verás el impacto de los cambios en 1-2 días hábiles. Para estabilizar la mejora, cuenta 7 días.
EMQ 8+ sin trabajo técnico
Trakvo configura hash, normalización, click IDs y PII enrichment automáticamente. Match Quality 8+ garantizado en 7 días o devolvemos tu dinero.
Hablar con el equipo