|

Cómo automatizar outreach multicanal para B2B

Load Bearing Empire construyó un sistema completo de automatización B2B que combina secuencias de email asincrónicas, llamadas de voz sincrónicas y seguimiento inteligente, todo orquestado a través de Supabase Edge Functions y scheduling con pg_cron. El sistema usa 6 funciones serverless para manejar secuencias de 4 toques de email vía transactional mail, integra VAPI para voice agents que hacen llamadas de calificación automáticas, y gestiona el estado de cada prospect en una base de datos centralizada. Después de 8 iteraciones de producción (V1-V8), documentaron explícitamente cómo escalar desde Supabase free tier hasta el plan pro, ahorrando dinero frente a Zapier o Make.

En 30 segundos

  • Un pipeline de outreach multicanal combina email, llamadas de voz y seguimiento automático sin abandonar Supabase
  • Las 4-touch sequences de Load Bearing Empire (intro → propuesta → urgencia → follow-up post-llamada) usan 6 funciones serverless y pg_cron scheduling
  • VAPI integrado en Supabase hace llamadas de calificación automáticas después de 3 emails, que es cuando el prospect está “warm”
  • State management crítico: cada prospect tiene estados (nuevo, contactado, email_abierto, llamada_completada) y retry logic para rebotes
  • Escala en free tier hasta ~1000 prospects; el jump a pro cuesta menos que Zapier a volumen equivalente

Qué es un Pipeline de Outreach Multicanal

Un pipeline de outreach multicanal es un flujo automatizado que toca a un prospect por múltiples canales (email, voz, PDF, seguimiento) en una secuencia orquestada, basada en acciones previas. No es spam masivo. Es decisión: “Si abrió el email 2, mándalo al email 3. Si no respondió después de 5 días, que el voice agent lo llame. Si contestó la llamada, marca como calificado.”

Ponele que sos Head of Sales en una startup B2B. Tu equipo tiene 500 prospects en la pipeline. Enviar emails manuales, hacer follow-up calls, rastrear quién abrió, quién hizo click — eso te cuesta 40 horas por semana. Un pipeline de outreach automático hace exactamente eso por vos, sin Zapier ($50+/mes), sin Make ($20+/mes), sin herramientas externas: todo en una base de datos de Supabase.

Load Bearing Empire documentó una implementación en producción. Decidieron usar Supabase porque necesitaban scheduling (pg_cron integrado), edge functions (serverless sin Cold starts largos) y un lugar único para guardar el estado de cada prospect. No querían saltar entre tres herramientas.

Anatomía de una 4-Touch Sequence

El patrón que Load Bearing Empire usa es simple pero efectivo. Cuatro toques, cada uno con propósito.

Email 1 (Día 0): Introducción. “Hola [nombre], vi que tu empresa usa [herramienta]. Pensé que esto podría servirte.” Sin venta. Sin hype. Dato personalizado. Objetivo: que abra.

Email 2 (Día 3): Propuesta de Valor. “Aquí está el documento técnico. [Capability statement en PDF].” Empieza a vender suavemente. Objetivo: que haga click. Te puede servir nuestra cobertura de proteger tus credenciales y datos sensibles.

Email 3 (Día 7): Urgencia + Social Proof. “3 empresas como la tuya pasaron de X a Y con esto. Tenemos cupo limitado este mes.” Ojo con esto — si no es verdad, no lo escribas. Objetivo: que responda.

Email 4 (Día 11): Follow-up Post-Llamada. Esto va DESPUÉS de que el voice agent lo llamó (días 8-10). “Me dijiste que ibas a revisar X. ¿Ya lo viste? Acá te paso el link directo.”

Timing es crítico. Si mandas todos los emails el mismo día, parecés spammer. Supabase maneja los delays con pg_cron — cada función scheduled arranca en el momento exacto, revisa si el prospect pasó el gate anterior, y ejecuta.

Supabase Edge Functions como Orquestador Central

Acá es donde Supabase gana frente a Zapier. En Zapier, configurás 4 zaps (uno por email), cada uno con su propio trigger y condición. Si algo falla en el zap 2, el 3 y 4 siguen adelante igual — state management roto. En Supabase, todo vive en una tabla: prospects (id, email, nombre, estado, created_at, email_1_sent_at, email_2_sent_at, etc.). Las funciones leen esa tabla, deciden qué hacer, actualizan el estado.

Load Bearing Empire tiene 6 funciones serverless:

  • send_email_1 — toma prospects nuevos, manda email 1, cambia estado a “email_1_sent”
  • send_email_2 — busca prospects con email_1_sent + created_at > 3 días, manda email 2
  • send_email_3 — busca email_2_sent + 7 días, manda email 3
  • trigger_voice_call — busca email_3_sent + 8 días, llama a VAPI para hacer la llamada
  • send_email_4 — después de que VAPI marca la llamada como completada, manda el email 4 (next day)
  • handle_bounces — detecta rebotes, reintentos, mueve prospects a “no_contact”

Cada función es ~50-100 líneas de TypeScript. Leen la DB, ejecutan la acción (envían email vía SendGrid/Resend o llaman a VAPI), actualizan timestamps. pg_cron scheduling llama a cada función en su horario: Email 1 cada día a las 9 AM. Email 2 cada 3 días. Así.

Ventaja crítica: si una función falla, la siguiente solo ejecuta si el estado es correcto. No hay datos perdidos, no hay duplicados, todo está en SQL. Relacionado: herramientas de IA para tu pipeline.

Voice Agents (VAPI) para Llamadas Automáticas

VAPI es una API que hace llamadas telefónicas automáticas usando voces generadas por IA. No suena como robot — suena como un representante de ventas real. Soporta español argentino. Llamadas bidireccionales: el voice agent pregunta, el prospect responde, el agent escucha y adapta la conversación.

Load Bearing Empire lo usa así: después de Email 3 (urgencia), el sistema hace una llamada de calificación. El voice agent dice algo como “Hola [nombre], soy [nombre del agent] de [empresa]. Vi que recibiste nuestros emails. ¿Es buen momento para una charla rápida?” El prospect responde sí o no. Si dice sí, el agent hace 2-3 preguntas de calificación (“¿Cuántas personas en tu equipo?” “¿Ya usas algo similar?”) y al final propone un meeting o próximo paso.

Resultado de la llamada se guarda en Supabase: “llamada_completada”, “prospect_calificado”, “no_respuesta”, “rechazó”. Este status dispara Email 4 solo si el resultado fue positivo. Rechazó → lo quitas de la secuencia.

Costo: VAPI cobra por minuto de llamada (típicamente $0.10-0.20 por minuto). Una llamada de 3 minutos = $0.30-0.60. Zapier cobraría $2-5 por la automatización sola.

State Management y Retry Logic en Multitoque

El desafío real acá es que los prospects se mueven por estados complejos. Uno abrió Email 1 pero nunca Email 2 (posible rebote en Email 2). Otro abrió Email 3 pero rechazó la llamada. Otro contestó la llamada pero nunca respondió Email 4. Cada rama necesita su propia lógica de reintentos.

La máquina de estados que Load Bearing Empire documenta es así:

EstadoQué significaPróximo pasoSi falla
nuevoProspect importado, no contactadoEmail 1Reintentar Email 1 (3 intentos)
email_1_sentEmail 1 enviado, esperando 3 díasEmail 2Si rebota, marcar no_contact
email_2_sentEmail 2 abierto o click, esperar 7 díasEmail 3Reintentar Email 2 si no hubo click (after 7 days)
email_3_sentEmail 3 abierto, esperar 8 díasVoice callSi no contesta, reintentar call (2 attempts)
llamada_completadaVoice agent habló con prospectEmail 4 (si calificado)Si no respondió, parar
email_4_sentEmail final, oferta concretaSales team follow-up manualSi no responde en 14 días, parar
automatización de outreach multicanal diagrama explicativo

Retry logic real: si Email 1 rebota, reintentas una vez más después de 2 días. Si vuelve a rebotar, el prospect va a “no_contact” automáticamente — no lo toques más. Eso es respeto por el inbox del otro. Es también legal en GDPR/CAN-SPAM: si no quieren, déjalos en paz después de 2 intentos.

Load Bearing Empire iteró 8 veces (V1 a V8) justamente en esto. V1 no reiniciaba nada. V2 reintentaba todo. V3-V8 fueron refinando cuántos reintentos, en qué timeframe, y cómo no quedar blacklisted por spam-checking. La version final evita rebotes habituales. Lo explicamos a fondo en repositorio para tu código.

Costos: Free Tier vs Pro

Supabase free tier te deja ~500 MB de base de datos y hasta 500,000 requests mensuales a Edge Functions. Con 1000 prospects y 6 funciones corriendo cada uno cada día, estás gastando ~180,000 requests/mes (1000 prospects × 6 funciones × 30 días). Entra. Apenas.

Si escalás a 5000 prospects, necesitás pro. Pro te cuesta $25/mes + $0.0000015 por función invocada (después de 1M gratis). Para 30,000 funciones/mes (5000 × 6), eso es ~$45/mes. Más base de datos si necesitás más de 8 GB. Ponele $80-120/mes total.

Zapier free tier: 100 tasks/mes. Pagos: tier 2 es $19/mes (750 tasks), tier 3 es $49/mes (2000 tasks). Para 180,000 tasks/mes ya estás fuera de presupuesto — tendrías que contratar plan empresarial ($600+/mes). Make es similar. Supabase gana en escala.

Implementación Step-by-Step

Simplificado, así arrancas:

  • Paso 1 — Crear tabla en Supabase. prospects (id, email, nombre, created_at, email_1_sent_at, email_1_opened, email_2_sent_at, email_2_clicked, email_3_sent_at, email_4_sent_at, llamada_completada, state). Trigger RLS si necesitás (probablemente no)
  • Paso 2 — Crear Edge Function send_email_1. Lee prospects donde state = “nuevo”, envía email vía Resend (API key en .env), actualiza timestamps y estado a “email_1_sent”
  • Paso 3 — Configurar pg_cron para Email 1. select cron.schedule(‘send-email-1’, ‘0 9 * * *’, ‘select send_email_1()’) — corre a las 9 AM cada día
  • Paso 4 — Repeat para Email 2, Email 3. Misma lógica, distinto timing (cron.schedule con diferentes horarios)
  • Paso 5 — Integrar VAPI. Edge Function trigger_voice_call invoca https://api.vapi.ai/call con prospect phone + conversation config (qué preguntas, en qué idioma). VAPI devuelve call_id y status
  • Paso 6 — Webhook de VAPI para resultados. VAPI hace POST a tu URL cuando la llamada termina (completada, rechazada, sin respuesta). Eso actualiza estado en Supabase y dispara Email 4
  • Paso 7 — Testing y retry logic. Probá con 10 prospects, mirá logs, refiná timing. Agregá retry logic (reintentos de email si rebota)

No necesitás código super complejo. TypeScript + Supabase client library + fetch para APIs externas = ~300 líneas para todo el pipeline.

Errores Comunes

Error 1: No manejar rebotes de email. Si mandás Email 1 y rebota, no podés simplemente ignorarlo. Ese email va a estar muerto para Email 2 y 3. Solución: integra un webhook de Resend que te avise de rebotes, marca esos prospects como no_contact automáticamente.

Error 2: Llamadas de voz sin “warming” previo. Si llamas a un prospect al que nunca contactaste, suena raro. Debe ser después de 2-3 emails mínimo. Load Bearing Empire aprendió esto en V2 — V1 llamaba después de un email solo, y el prospect decía “quién sos?” Error 3 sería igual: V3 esperaba 7 días, V4+ espera solo 8 días post-Email 3, que es el punto óptimo. Cubrimos ese tema en detalle en generar contenido de voz.

Error 3: Ignorar el timezone del prospect. Si envías Email 1 a las 9 AM servidor, y el prospect está en Los Ángeles, lo ve a las 6 AM. No lo lee. pg_cron no soporta scheduling por timezone automático, pero podés guardar timezone en la tabla prospects y ajustar offset en la función.

Error 4: Voice agent sueña en monólogo sin escuchar respuestas. Si la IA no interpola respuestas del prospect, es un monólogo telefónico asqueroso. VAPI por defecto hace conversación real (espera respuestas, adapta). Pero necesitás tuning en el prompt del agent — qué preguntas hace, cuándo escala a “no es el momento”, cuándo agenda un meeting.

Preguntas Frecuentes

¿Cómo se integra VAPI con Supabase?

Una Edge Function en Supabase invoca la API de VAPI pasando el número de teléfono y un “conversation script” (preguntas, en qué orden, qué hacer si contesta). VAPI hace la llamada, y cuando termina, devuelve un webhook a tu servidor con el resultado (completada, rechazada, duración). Ese webhook actualiza la tabla prospects en Supabase. Todo serverless, sin servidor intermedio.

¿Qué pasa si un prospect hace clic en el email pero no abre el siguiente?

Depende de tu máquina de estados. Load Bearing Empire considera “hizo clic” como “abierto”. Si Email 2 tiene un clic pero Email 3 no, el sistema espera 7 días igual, después llama. Algunos equipos son más agresivos — si no hay acción en 14 días, sacan al prospect. Lo importante es documentar la lógica.

¿Cuánto cuesta el sistema mensual?

Para 1000 prospects: Supabase free tier ($0), Email (Resend $10-20/mes si mandas mucho), VAPI (~$0.30 por llamada completada, ~100 al mes = $30/mes). Total: ~$40-50/mes. Zapier costaría $300+ para el mismo volumen. Para 5000 prospects: Supabase pro $80-120 + email $20 + VAPI $150 = $250-290/mes. Aún menos que Zapier.

¿Puedo automatizar esto sin saber programar?

Parcialmente. Supabase tiene interfaz visual para crear tablas y configurar básicos. Pero pg_cron scheduling y Edge Functions necesitan TypeScript. Si no programás, Zapier o Reply.io / Lemlist son más fáciles (pero caros). Lo ideal es tener un engineer que dedique 1-2 semanas a esto.

¿Cómo sé si mi pipeline está funcionando bien?

Métricas clave: % de emails abiertos (debería ser 25-35%), % de clicks (5-10%), % de llamadas completadas (80% si filtros bien previo), % de calificados (20-40% de los que contestan llamada). Monitoreá logs de Edge Functions en Supabase Console. Agregá alertas (webhook a Slack) si algo falla masivamente.

Conclusión

Un pipeline de outreach multicanal automatizado no es un lujo en 2026 — es una necesidad para cualquier equipo de sales que no quiera depender de trabajo manual. Load Bearing Empire documentó una implementación real que usa Supabase + VAPI + Email transaccional, escaló desde V1 hasta V8 en producción, y publicó los learnings. La máquina de estados (nuevo → email 1 → email 2 → email 3 → voice call → email 4 → sales team) es probada. Costos bajos, especialmente si estás en free/pro de Supabase.

El paso clave es elegir las herramientas correctas. Supabase Edge Functions + pg_cron ganan a Zapier en escala y costo. VAPI es mejor que automatización de llamadas genérica porque entiende contexto. Y si cuidas el state management (máquina de estados clara, retry logic inteligente), evitás 80% de los dolores de cabeza. Fijate en donweb.com si necesitás infraestructura para hostear esta automatización en un servidor propio (aunque Supabase serverless es más fácil).

Probá con 100 prospects, mirá qué funciona, iterá. La inversión es baja. El retorno — no tener que hacer 100 follow-ups manuales — es infinito.

Fuentes

Similar Posts