zylior
← Blog

Puntua la intencion de compra de tus visitantes sin CRM pesado

Quieres saber quién de tus visitantes está de verdad a punto de comprar — sin instalar un CRM de 200 €/mes ni pasar tres días cableando workflows. Buena noticia: un simple pixel first-party (un script JS que pones en tu sitio) basta para captar las señales que importan. El resto es aritmética ponderada que haces correr en SQL o en un cron.

Las señales que valen algo (y las que puedes tirar)

El error clásico: trackear 40 eventos y ahogar la señal. En realidad, la intención de compra se lee en un puñado de comportamientos. Estos son los que correlacionan de verdad con una conversión, por orden de peso decreciente.

El pixel first-party: lo que pones, lo que envías

First-party = tu propio endpoint, tu propia cookie. Sin dependencia de un SaaS de terceros, sin bloqueo por los adblockers de terceros, y sigues siendo dueño del dato (GDPR-friendly si te quedas en intención anónima + consentimiento). En concreto, un script ligero que envía un latido (heartbeat) cuando la pestaña está visible, y un evento en cada página clave.

// pixel.js — ~30 lignes, posé sur toutes tes pages
const vid = localStorage.getItem('vid') || crypto.randomUUID();
localStorage.setItem('vid', vid);

function send(type, meta = {}) {
  navigator.sendBeacon('/collect', JSON.stringify({
    vid, type, path: location.pathname, ts: Date.now(), meta
  }));
}

send('pageview');

// temps ACTIF : on n'incrémente que si l'onglet est visible
let active = 0;
setInterval(() => {
  if (document.visibilityState === 'visible') {
    active += 5;
    if (active % 30 === 0) send('heartbeat', { active });
  }
}, 5000);

// profondeur de scroll, envoyée une seule fois par palier
let maxScroll = 0;
window.addEventListener('scroll', () => {
  const d = Math.round((scrollY + innerHeight) / document.body.scrollHeight * 100);
  if (d >= maxScroll + 25) { maxScroll = d; send('scroll', { depth: d }); }
}, { passive: true });

Del lado servidor, `/collect` hace un `INSERT` en bruto en una tabla `events(vid, type, path, ts, meta_jsonb)`. Eso es todo. No calculas nada al vuelo: almacenas eventos en bruto y puntúas en batch. Eso te ahorra bugs de doble conteo y puedes re-puntuar todo el histórico cuando cambias la ponderación.

La fórmula de scoring: pondera, limita, descuenta

El score de un visitante = suma de puntos por señal, limitada por señal (si no, un solo obseso del scroll te lo falsea todo) y descontada en el tiempo (una visita a precios de hace 20 días ya no vale una visita de ayer). Esta es una rejilla de partida — calíbrala luego con tus conversiones reales.

-- score par visiteur, recalculé chaque heure en cron
WITH scored AS (
  SELECT vid,
    LEAST(SUM(CASE WHEN type='pageview' AND path='/pricing' THEN 25 END), 50) AS pricing,
    LEAST(SUM(CASE WHEN path = ANY(ARRAY['/docs','/security','/vs']) THEN 15 END), 45) AS funnel,
    LEAST(COUNT(DISTINCT date_trunc('hour', to_timestamp(ts/1000))) * 10, 40) AS sessions
  FROM events
  WHERE to_timestamp(ts/1000) > now() - interval '30 days'
  GROUP BY vid
)
SELECT vid, COALESCE(pricing,0)+COALESCE(funnel,0)+COALESCE(sessions,0) AS score
FROM scored ORDER BY score DESC;
No adivines tus pesos. Exporta tus 20 últimos clientes firmados, reproduce su histórico de señales antes de la firma, y mira qué scores tenían. Si tus conversiones llegaban como mucho a 40 y tu umbral 'caliente' está en 80, tu umbral está mal — no tus clientes.

El umbral 'lead caliente' y el momento justo para contactar

Un umbral absoluto ("80 = caliente") envejece mal. Prefiere un umbral relativo: el top 10 % de los scores del mes móvil. Se auto-calibra cuando tu tráfico cambia. En concreto, calcula el percentil 90 de los scores activos y trata todo lo que lo supere como un lead caliente a atender en 24 h.

Cablea una sola alerta: un cron horario que empuja a un canal de Slack `#leads-calientes` cada `vid` que acaba de cruzar el percentil 90, con su top-3 de páginas vistas. Lo atiendes a mano al principio — 5 leads/semana no justifican ninguna automatización. Solo automatizas el contacto cuando el volumen te desborda.

Empieza mínimo: pon el pixel esta semana, almacena los eventos en bruto, lanza la consulta de scoring en read-only y mírala correr 10 días sin contactar a nadie. Verás rápido si tus scores cuadran con la realidad de tus firmas. Solo entonces conectas la alerta de Slack y ajustas los pesos con tus conversiones reales. Un scoring de intención útil cabe en una tabla de eventos, una consulta SQL y un cron — el CRM elefante, guárdatelo para cuando tengas un equipo comercial que alimentar.

La newsletter

Al suscribirte aceptas recibir la newsletter de Zylior. Baja en 1 clic en cada correo.