El brief
Cliente: marketplace cerrado del sector salud y belleza (anonimizado). Problema: gastaban 8K€/mes entre Meta Ads y Google Ads. Todas las reservas pasaban por Booksy. Ninguna campaña podía atribuirse a una reserva concreta. Decisiones de optimización a ciegas.
Su agencia anterior llevaba 18 meses diciendo "Booksy no se puede integrar". Razón técnica: Booksy no expone API pública para terceros, y los identificadores de cliente no se mantienen entre el ad-click y la reserva.
Por qué importaba
El cliente gastaba 96K€/año en ads sin saber qué funcionaba. La diferencia entre la campaña best-performer (CAC 18€) y la worst (CAC 95€) era 5x. Pero como no había atribución, el algoritmo de Meta Ads estaba optimizando a "click", no a "cliente que reserva". Estaban quemando 60K€/año en clicks que nunca convertían en reservas reales.
Las 3 hipótesis que probamos
Hipótesis 1 · Cookie tracking propio entre ad-click y la página intermedia. No funcionó: Booksy redirige con un parámetro que no se persiste, y los clientes a menudo abren la URL en otro navegador (Safari iOS al WhatsApp).
Hipótesis 2 · UTMs en deep links de Booksy. Booksy ignora UTMs en sus URLs públicas. Descartado.
Hipótesis 3 · Identificador phone-fingerprint en el flujo. Funcionó. Implementamos un middleware entre la landing y Booksy que captura el teléfono del lead, lo hashea, y lo cruza con las reservas Booksy posteriormente vía scraper programado del panel del cliente (donde sí ve sus reservas con teléfonos completos).
La arquitectura final
Ad click (Meta/Google)
↓
Landing intermedia (margital · 1 línea de copy + CTA)
↓ POST hashed phone + click_id + ad_set
Supabase tabla 'attribution_attempts'
↓
User redirige a Booksy → reserva
↓
Cron 1h: scraper headless Chrome del panel Booksy
↓
Match phone-hash entre tabla y reservas
↓
Atribución completa enviada a Meta CAPI + GA4 server-side
21 días desde brief hasta primera atribución completa. 3 días extra para tunear el matching y reducir falsos positivos por colisiones de hash.
Los números reales
- →Antes (mes 0): 0% de atribución. Decisiones a ciegas.
- →Mes 1: 92% de atribución matched. 8% de leads orfanizados (no llegaron a reservar).
- →Mes 2: Meta Ads optimizado a 'reserva-completa'. CAC bajó de 47€ → 26€ promedio.
- →Mes 3: Cliente dejó de gastar en 2 ad-sets que parecían funcionar pero no convertían. Reasignó 2.4K€/mes a los que sí. Misma inversión total, +38% en reservas reales.
Por qué nadie lo había hecho
Esto no requería tecnología avanzada. Requería 3 cosas:
1. Voluntad de meterse en lo feo (scraping del panel del cliente, manejo de hashes con falsos positivos, middleware de redirección). 2. Ingeniería real que no se conforme con "Booksy no se puede integrar". 3. Compromiso comercial honesto (le dijimos al cliente "tardaremos 3 semanas y puede no funcionar; aquí está el contrato con devolución si pasa de 30 días sin resultado").
Las 3 cosas son escasas en agencias. Por eso "imposible".
La lección
Cuando alguien te diga "no se puede integrar X", traduce: "no nos importa lo suficiente como para meternos en el barro". La pregunta correcta es: ¿cuánto cuesta no integrarlo? Si es 60K€/año en ads desperdiciados, la integración casi siempre paga 10x.
Si tu negocio depende de un sistema cerrado y sientes que pagas marketing a ciegas — pide tu First Date. Probablemente lo podemos resolver.