Seguimiento de conversiones
Cómo enviar un postback cuando un usuario convierte en tu sitio: imprescindible para que las campañas CPA atribuyan y facturen correctamente.
En las campañas CPA, solo sabemos que un usuario ha convertido cuando you nos lo dices. El mecanismo es un postback: cuando un usuario hace en tu sitio lo que quieres que haga, tu servidor envía una petición rápida al nuestro y registramos la conversión asociada al clic original. Sin este cableado, tu campaña CPA servirá clics pero nunca facturará, porque no tenemos forma de saber si alguno se convirtió en cliente.
Esta página explica el cableado paso a paso. Unos 15 minutos de trabajo de desarrollo, sin SDK.
El flujo
- Un usuario hace clic en tu anuncio en el sitio de un editor.
- Nuestro servidor de anuncios añade
?efaid=<click_id>a tu URL de destino y lo redirige allí. El ID de clic es una cadena hexadecimal de 24 caracteres única para ese clic. - Tu página de destino captura el valor de
efaid(parámetro de URL) y lo almacena, normalmente en una cookie de sesión que sobrevive entre cargas de página. - Cuando el usuario completa lo que cuente como conversión (registro, compra, instalación), tu servidor envía un postback a
https://ads.efind.com/serve/postback.php?efaid=<click_id>. - Buscamos el clic, registramos la conversión y te facturamos a la puja vigente en el momento del clic.
Paso 1: captura efaid en tu página de destino
La URL en el navegador del usuario cuando llega a tu sitio tendrá este aspecto:
https://example.com/landing?efaid=ee40d35706798218cce42929
Captura el parámetro efaid y guárdalo. Las cookies son la opción más habitual porque sobreviven a los embudos de varios pasos. Ejemplo en JavaScript:
const url = new URL(window.location); const efaid = url.searchParams.get('efaid'); if (efaid) { document.cookie = `efaid=${efaid}; path=/; max-age=${30*24*60*60}; SameSite=Lax`; }
O en PHP, si controlas la página de destino en el lado del servidor:
<?php if (!empty($_GET['efaid']) && preg_match('/^[a-f0-9]{24}$/', $_GET['efaid'])) { setcookie('efaid', $_GET['efaid'], time() + 30*24*60*60, '/', '', true, true); }
efaid sobrevive solo mientras dure tu almacenamiento. Un usuario que borre las cookies entre la llegada y la conversión no será atribuible. La mayoría de las plataformas ven una fuga del ~5-10% por esto; es el coste de operar en la web abierta.Paso 2: envía el postback en la conversión
En el instante en que se produce una conversión en el lado del servidor, envía un único GET a nuestra URL de postback con el valor almacenado de efaid:
PHP
$efaid = $_COOKIE['efaid'] ?? ''; if ($efaid !== '') { $url = 'https://ads.efind.com/serve/postback.php?efaid=' . urlencode($efaid); // Fire and forget - don't block the user's request on this. @file_get_contents($url, false, stream_context_create([ 'http' => ['timeout' => 2, 'ignore_errors' => true] ])); }
Node.js
const efaid = req.cookies.efaid; if (efaid) { fetch(`https://ads.efind.com/serve/postback.php?efaid=${encodeURIComponent(efaid)}`) .catch(() => {}); // fire-and-forget }
Python
import requests efaid = request.COOKIES.get('efaid') if efaid: try: requests.get(f'https://ads.efind.com/serve/postback.php?efaid={efaid}', timeout=2) except requests.RequestException: pass
cURL (para pruebas o stacks basados en shell)
curl -s "https://ads.efind.com/serve/postback.php?efaid=$EFAID"
Alternativa: basada en píxel (sin acceso al servidor)
Si no puedes enviar un postback desde el servidor —algo habitual en páginas de destino SaaS o en páginas de agradecimiento simples—, puedes usar en su lugar un píxel de imagen de 1×1. Pégalo en el HTML de tu página de confirmación de conversión (página de «gracias» de Shopify, confirmación de pedido de Wix, etc.):
<img src="https://ads.efind.com/serve/pixel.php?efaid=YOUR_EFAID_HERE" width="1" height="1" alt="" style="display:none">
Tendrás que sustituir YOUR_EFAID_HERE por el valor almacenado; la mayoría de las plataformas de comercio electrónico permiten inyectar HTML personalizado con metadatos del pedido. Los píxeles son algo menos fiables que los postbacks de servidor (bloqueadores de anuncios, navegadores que bloquean peticiones de terceros), pero son más fáciles de configurar.
Formato de respuesta
postback.php devuelve JSON. pixel.php devuelve la imagen pero añade información de depuración en las cabeceras, útil para verificar la integración con las herramientas de desarrollo de tu navegador.
Estructura del JSON
{ "ok": true, "recorded": true, "reason": null } ← conversion logged ✓ { "ok": true, "recorded": false, "reason": "already_recorded" } ← duplicate fire (no harm) { "ok": true, "recorded": false, "reason": "not_found" } ← efaid doesn't match a click { "ok": true, "recorded": false, "reason": "bad_click_id" } ← malformed efaid { "ok": true, "recorded": false, "reason": "window_expired" } ← click was over 30 days old
El estado HTTP siempre es 200 en cualquier caso. La señal de si funcionó o no está en recorded. Tu integración debe tratar recorded: true como éxito y cualquier otro estado como «enviado pero no registrado», lo cual suele estar bien (la mayoría de los motivos de «no» son operativamente normales).
Prueba tu integración
- Configura una campaña de prueba en el panel (con cualquier puja; no se te cobrará por conversiones de prueba en campañas en borrador).
- Desde el sitio de un editor o directamente mediante la URL de nuestro servidor de anuncios, haz clic en un anuncio y anota el
efaidañadido a tu URL de destino. - Activa tu flujo de conversión de forma que se envíe el postback.
- Consulta la página de detalle de la campaña en tu panel: la estadística de Conversiones (Conversions) debería subir en un minuto.
- Envía el mismo postback otra vez con el mismo
efaid- la estadística NO debería subir una segunda vez (idempotente).
Comportamientos importantes
- Idempotent. Enviar el mismo postback dos veces (reintentos de red, errores de desarrollo) es seguro: solo cuenta el primero.
- La puja se congela en el momento del clic. Si cambias tu puja después de un clic pero antes del postback de conversión, usamos la puja que estaba vigente cuando ocurrió el clic. Esto mantiene estable la economía de los editores.
- Ventana de 30 días. Los postbacks de clics con más de 30 días se ignoran silenciosamente. Si tienes un embudo de conversión inusualmente largo, háblanos: podemos ampliar la ventana por anunciante.
- Los clics de bots no reciben un efaid. Nuestra capa de deduplicación filtra el spam de recargas evidente y los bots de clic simples en el momento del clic; esas redirecciones no incluyen un
efaid, así que no hay nada contra lo que hacer postback. Esto protege tu inversión.