Saltar al contenido
Todo Automatizado
Automatización

Cómo Automatizar tu Backend con n8n, Supabase y PostgreSQL: Guía Práctica

Aprende a automatizar tu backend con n8n y Supabase PostgreSQL. 4 workflows prácticos para gestionar datos, webhooks y lógica sin escribir servidor.

Carlos 13 min de lectura

Cómo Automatizar tu Backend con n8n, Supabase y PostgreSQL

Montar un backend desde cero es lento, caro y aburrido. Configurar un servidor, escribir endpoints, gestionar la base de datos, manejar autenticación, crear lógica de negocio… Para cuando tienes algo funcionando, ya has quemado semanas de desarrollo. Y eso si todo sale bien a la primera.

Hay una forma más rápida. Automatizar tu backend con n8n y Supabase PostgreSQL te permite tener una API funcional, una base de datos relacional completa y flujos de lógica de negocio operativos en horas, no en semanas. Sin montar un servidor Express. Sin escribir controladores. Sin sufrir con el despliegue.

Supabase te da PostgreSQL gestionado, autenticación, almacenamiento de archivos y una API REST automática sobre tus tablas. n8n conecta todo eso con el resto de tus herramientas y añade la lógica que Supabase por sí solo no cubre: validaciones complejas, integraciones con terceros, notificaciones condicionales y procesamiento asíncrono. Juntos, forman un stack que reemplaza buena parte de lo que antes necesitaba un equipo de backend dedicado.

En esta guía vas a montar cuatro workflows reales que cubren los casos más comunes: gestión automática de registros, procesamiento de webhooks, sincronización de datos y generación de informes periódicos.

Por Qué n8n y Supabase Son la Combinación Perfecta para Automatizar tu Backend

Cada herramienta resuelve una parte del problema. Supabase es excelente como capa de datos, pero no ejecuta lógica de negocio compleja. n8n es un motor de automatización muy potente, pero no almacena datos de forma nativa. La combinación elimina las debilidades de ambos.

Lo que Supabase aporta:

  • PostgreSQL completo. No es una base de datos de juguete: es PostgreSQL real con extensiones, triggers, funciones SQL, Row Level Security y soporte para JSON, arrays y tipos personalizados. Todo lo que harías con PostgreSQL en un servidor propio, lo haces en Supabase sin gestionar infraestructura.
  • API REST automática. Cada tabla que creas en Supabase genera automáticamente endpoints REST a través de PostgREST. Puedes insertar, leer, actualizar y borrar registros sin escribir una sola línea de backend.
  • Autenticación integrada. Supabase Auth maneja registro, login, OAuth con Google o GitHub, tokens JWT y Row Level Security para que cada usuario solo vea sus datos.
  • Plan gratuito generoso. Dos proyectos gratuitos con 500 MB de base de datos, 1 GB de almacenamiento y 50.000 filas. Suficiente para prototipos y proyectos pequeños en producción.

Lo que n8n aporta:

  • Lógica de negocio visual. Condicionales, bucles, transformaciones de datos, manejo de errores — todo en un editor visual que cualquiera entiende.
  • Integraciones con +400 servicios. Slack, Gmail, Stripe, Google Sheets, Telegram, APIs REST personalizadas… lo que necesites conectar, n8n probablemente ya tiene un nodo para ello.
  • Webhooks nativos. n8n puede exponer endpoints HTTP que actúan como tu API personalizada. Recibes una petición, ejecutas lógica, escribes en Supabase y devuelves una respuesta — todo sin servidor propio.
  • Self-hosted o cloud. Puedes alojar n8n en tu propia máquina para control total o usar n8n Cloud si prefieres no gestionar infraestructura.

Frente a las alternativas:

  • Firebase + Zapier: Firebase cobra por lecturas/escrituras y su modelo de datos NoSQL no encaja con todos los casos. Zapier cobra por ejecución. Con Supabase + n8n, tienes PostgreSQL relacional real y sin límites de ejecuciones.
  • Backend propio (Express/Django/Rails): Semanas de desarrollo vs. horas de configuración. Para MVPs, proyectos internos o automatizaciones empresariales, un backend propio es sobredimensionar.
  • Airtable + Make: Funciona para cosas simples, pero Airtable no es una base de datos real. Cuando necesitas relaciones complejas, consultas SQL avanzadas o más de 50.000 registros, se queda corto.

Requisitos Previos para Conectar n8n con Supabase

Antes de montar los workflows, necesitas tres cosas configuradas.

1. Proyecto en Supabase:

  1. Entra en supabase.com y crea una cuenta gratuita.
  2. Crea un nuevo proyecto. Elige una región cercana a tu servidor de n8n para minimizar latencia (Europa oeste si estás en España).
  3. Anota la URL del proyecto y la API key (anon/public). Las encuentras en Settings → API.

2. n8n operativo:

Si aún no lo tienes instalado, la forma más rápida es Docker en tu propio servidor. En 15 minutos tienes n8n corriendo.

3. Credenciales de Supabase en n8n:

  1. En n8n, ve a Settings → Credentials → Add Credential.
  2. Busca Supabase en la lista.
  3. Pega la URL de tu proyecto (formato https://xxxxx.supabase.co) y tu API key.
  4. Haz un test de conexión. Si marca verde, estás listo.

Consejo: Usa la service_role key (no la anon key) para los workflows de n8n. La service_role key ignora Row Level Security, lo que te da acceso completo a todas las tablas desde tus automatizaciones. La anon key es para el frontend, donde quieres que RLS filtre datos por usuario.

Crear la Estructura de Tablas en PostgreSQL con Supabase

Vamos a trabajar con un caso práctico: una plataforma que recibe leads a través de un formulario web, los almacena, los cualifica automáticamente y envía notificaciones al equipo de ventas.

Tabla leads:

Abre el SQL Editor en Supabase y ejecuta:

CREATE TABLE leads (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  nombre TEXT NOT NULL,
  email TEXT NOT NULL UNIQUE,
  empresa TEXT,
  telefono TEXT,
  mensaje TEXT,
  origen TEXT DEFAULT 'web',
  puntuacion INTEGER DEFAULT 0,
  estado TEXT DEFAULT 'nuevo' CHECK (estado IN ('nuevo', 'contactado', 'cualificado', 'descartado', 'cerrado')),
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Índice para búsquedas frecuentes
CREATE INDEX idx_leads_estado ON leads(estado);
CREATE INDEX idx_leads_created ON leads(created_at DESC);

-- Trigger para actualizar updated_at automáticamente
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER leads_updated_at
  BEFORE UPDATE ON leads
  FOR EACH ROW
  EXECUTE FUNCTION update_updated_at();

Fíjate en los detalles que marcan la diferencia con soluciones como Airtable: UUIDs como clave primaria, restricciones CHECK en el campo estado, índices para rendimiento y un trigger que actualiza la fecha de modificación automáticamente. Esto es PostgreSQL real, no una hoja de cálculo disfrazada.

Workflow 1: Recibir Leads por Webhook y Guardarlos en Supabase

Este es el workflow base. Un formulario web envía datos a un webhook de n8n, que los valida y los guarda en Supabase.

Nodos del workflow:

  1. Webhook — Expone un endpoint POST que recibe los datos del formulario.
  2. IF — Valida que el email tenga formato correcto y que nombre no esté vacío.
  3. Supabase (Create Row) — Inserta el lead en la tabla leads.
  4. Respond to Webhook — Devuelve un JSON de confirmación al formulario.

Configuración del nodo Webhook:

Método: POST
Path: /nuevo-lead
Response Mode: Using 'Respond to Webhook' node

Configuración del nodo IF (validación):

Condición 1: {{ $json.email }} contiene "@"
Condición 2: {{ $json.nombre }} no está vacío
Operador: AND (ambas deben cumplirse)

Configuración del nodo Supabase:

Operación: Create a Row
Tabla: leads
Campos:
  nombre: {{ $json.nombre }}
  email: {{ $json.email }}
  empresa: {{ $json.empresa || '' }}
  telefono: {{ $json.telefono || '' }}
  mensaje: {{ $json.mensaje || '' }}
  origen: {{ $json.origen || 'web' }}

Configuración del Respond to Webhook:

{
  "success": true,
  "message": "Lead registrado correctamente"
}

Si la validación falla, el camino alternativo del nodo IF devuelve un error 400 con un mensaje explicativo. Así tu formulario sabe que algo fue mal y puede mostrar un mensaje al usuario.

¿Y el CORS? Si llamas al webhook desde un frontend en otro dominio, n8n maneja las cabeceras CORS automáticamente en las versiones recientes. Si usas una versión anterior, añade un nodo de respuesta para las peticiones OPTIONS con las cabeceras Access-Control-Allow-Origin correspondientes.

Workflow 2: Cualificar Leads Automáticamente con Lógica de Puntuación

No todos los leads tienen el mismo valor. Un director de operaciones de una empresa industrial que escribe un mensaje detallado no es lo mismo que alguien que pone “hola” en todos los campos. Este workflow asigna una puntuación automática a cada lead nuevo.

Nodos del workflow:

  1. Supabase Trigger (o Schedule + Supabase Get All Rows con filtro puntuacion = 0) — Detecta leads nuevos sin puntuar.
  2. Code (JavaScript) — Calcula la puntuación basándose en reglas.
  3. Supabase (Update Row) — Actualiza la puntuación y el estado del lead.
  4. IF — Si la puntuación supera 70, es un lead caliente.
  5. Slack / Telegram — Notifica al equipo de ventas con los datos del lead caliente.

Lógica de puntuación (nodo Code):

const lead = $input.first().json;
let puntuacion = 0;

// Tiene empresa → probablemente B2B
if (lead.empresa && lead.empresa.length > 2) puntuacion += 25;

// Mensaje largo → interés real
if (lead.mensaje && lead.mensaje.length > 50) puntuacion += 20;

// Tiene teléfono → disposición a contacto directo
if (lead.telefono && lead.telefono.length > 6) puntuacion += 15;

// Email corporativo (no gmail, hotmail, etc.)
const dominiosGratuitos = ['gmail', 'hotmail', 'yahoo', 'outlook', 'live'];
const dominio = lead.email.split('@')[1]?.split('.')[0] || '';
if (!dominiosGratuitos.includes(dominio)) puntuacion += 25;

// Palabras clave de alta intención en el mensaje
const palabrasClave = ['automatizar', 'presupuesto', 'proyecto', 'integrar', 'scada', 'plc', 'producción'];
const mensajeLower = (lead.mensaje || '').toLowerCase();
for (const palabra of palabrasClave) {
  if (mensajeLower.includes(palabra)) {
    puntuacion += 10;
    break; // Solo sumar una vez
  }
}

return [{
  json: {
    ...lead,
    puntuacion: Math.min(puntuacion, 100),
    estado: puntuacion >= 70 ? 'cualificado' : 'nuevo'
  }
}];

Esto reemplaza lo que en un backend tradicional serían decenas de líneas de código en un servicio aparte, con tests, despliegue y mantenimiento. Aquí lo cambias visualmente cuando quieras ajustar las reglas.

Workflow 3: Sincronizar Datos entre Supabase y Google Sheets para Reporting

El equipo de ventas no vive en Supabase. Vive en hojas de cálculo. Este workflow mantiene un Google Sheet sincronizado con los leads cualificados, actualizado cada hora.

Nodos del workflow:

  1. Schedule Trigger — Se ejecuta cada 60 minutos.
  2. Supabase (Get All Rows) — Lee todos los leads con estado = cualificado y updated_at en la última hora.
  3. Google Sheets (Append or Update) — Añade los nuevos y actualiza los existentes, usando el email como clave única.

Filtro en Supabase:

Tabla: leads
Filtros: 
  estado = cualificado
  updated_at > {{ $now.minus({ hours: 1 }).toISO() }}

Mapeo en Google Sheets:

Columna SheetCampo Supabase
Nombrenombre
Emailemail
Empresaempresa
Teléfonotelefono
Puntuaciónpuntuacion
Estadoestado
Fecha altacreated_at

Este patrón de sincronización unidireccional es limpio y predecible. Los datos viven en PostgreSQL (fuente de verdad) y la hoja de cálculo es solo una vista cómoda para quienes la necesitan. Si alguien borra una fila en el Sheet, el próximo ciclo la restaura.

Workflow 4: API Personalizada con Lógica de Negocio Compleja

Aquí es donde la combinación brilla de verdad. Supabase expone una API REST automática, pero esa API es CRUD puro — no tiene lógica de negocio. Con n8n puedes crear endpoints personalizados que hacen mucho más que leer y escribir datos.

Ejemplo: endpoint para registrar un pedido.

Un frontend envía los datos del pedido. n8n necesita:

  1. Verificar que el cliente existe en Supabase.
  2. Comprobar stock consultando otra tabla.
  3. Calcular descuentos según el historial del cliente.
  4. Crear el pedido y actualizar el stock.
  5. Enviar email de confirmación.
  6. Devolver el resumen al frontend.

Nodos del workflow:

  1. Webhook (POST /crear-pedido) — Recibe los datos.
  2. Supabase (Get Row) — Busca el cliente por ID.
  3. IF — ¿El cliente existe? Si no, devuelve error 404.
  4. Supabase (Get Row) — Consulta el stock del producto.
  5. IF — ¿Hay stock suficiente? Si no, devuelve error 409.
  6. Code — Calcula descuento: 10% si el cliente tiene más de 5 pedidos previos, 15% si supera 20.
  7. Supabase (Create Row) — Inserta el pedido.
  8. Supabase (Update Row) — Resta unidades al stock.
  9. Gmail / SMTP — Envía confirmación al cliente.
  10. Respond to Webhook — Devuelve JSON con el resumen del pedido.

Diez nodos. Sin servidor Express. Sin controladores. Sin middleware de autenticación. Sin ORM. Y si mañana necesitas añadir un paso extra — enviar el pedido también a un ERP, por ejemplo — arrastras un nodo nuevo y lo conectas. En un backend tradicional, eso implica tocar código, testear, hacer deploy y rezar para que no rompa nada.

Buenas Prácticas para Automatizar Backend con n8n y Supabase

Después de montar estos workflows, hay patrones que conviene seguir para mantener todo robusto en producción.

Manejo de errores. Activa el Error Trigger en n8n. Si un workflow falla (Supabase caído, datos corruptos, API de terceros que no responde), el Error Trigger captura el fallo y puedes loguearlo en una tabla error_log en Supabase o enviarte una notificación. Nunca dejes un workflow en producción sin manejo de errores.

Idempotencia. Si un webhook se ejecuta dos veces con los mismos datos (porque el frontend reintentó), el segundo intento no debería crear un registro duplicado. Usa campos UNIQUE en PostgreSQL (como el email en leads) y maneja el error de duplicado en n8n con un nodo IF que comprueba si el registro ya existe.

Variables de entorno. No pongas la URL de Supabase o los API keys directamente en los nodos. Usa las credenciales de n8n y, si necesitas valores dinámicos, las variables de entorno de n8n. Así puedes tener un entorno de desarrollo y otro de producción sin cambiar workflows.

Backups. Supabase hace backups automáticos en los planes de pago (Pro en adelante). En el plan gratuito, programa un workflow de n8n que exporte las tablas críticas a un CSV en Google Drive o S3 cada noche. Es una red de seguridad que cuesta cero.

Row Level Security. Si tu frontend accede directamente a Supabase (además de pasar por n8n), activa RLS en todas las tablas y define políticas para que cada usuario solo acceda a sus datos. n8n, al usar la service_role key, no se ve afectado por RLS y mantiene acceso completo para las automatizaciones.

Cuándo Esta Arquitectura Tiene Sentido (y Cuándo No)

Usa n8n + Supabase cuando:

  • Estás construyendo un MVP y necesitas validar rápido sin invertir meses en backend.
  • Tu aplicación es principalmente CRUD con lógica de negocio moderada.
  • Necesitas integraciones con muchos servicios externos (CRM, email, Slack, ERPs).
  • Quieres que personas no técnicas puedan entender y modificar la lógica de negocio.
  • El presupuesto es limitado y cada hora de desarrollo cuenta.

Considera un backend propio cuando:

  • Tienes lógica de negocio extremadamente compleja con transacciones distribuidas.
  • Necesitas latencia por debajo de 50 ms en cada petición.
  • Tu equipo ya tiene un backend robusto y solo necesitas añadir automatizaciones puntuales.
  • Manejas millones de registros con consultas analíticas pesadas (ahí PostgreSQL en Supabase puede quedarse corto sin tuning).

Para la mayoría de proyectos — SaaS internos, herramientas de gestión, automatizaciones empresariales, plataformas de contenido — la combinación de n8n y Supabase cubre el 80% de lo que necesitas con un 20% del esfuerzo.

Conclusión y Próximos Pasos

Automatizar tu backend con n8n y Supabase PostgreSQL no es un atajo — es una forma más inteligente de construir. Tienes una base de datos relacional real, una API automática, lógica de negocio visual y más de 400 integraciones disponibles sin escribir un solo endpoint a mano.

Los cuatro workflows de esta guía cubren los patrones fundamentales: recepción de datos, procesamiento automático, sincronización y APIs personalizadas. A partir de aquí puedes combinarlos, extenderlos y adaptarlos a tu caso concreto.

Si ya usas n8n, añadir Supabase como tu capa de datos es cuestión de minutos. Si vienes de Supabase, n8n te da la lógica de negocio y las integraciones que faltan. Y si no usas ninguno de los dos, acabas de encontrar tu stack para el próximo proyecto.

¿Quieres que montemos juntos la automatización de tu backend? Contacta con nosotros y te ayudamos a diseñar la arquitectura que mejor se adapte a tu proyecto.


Recursos útiles:

#n8n #Supabase #PostgreSQL #backend #automatización #workflows #API #BaaS #webhooks #low-code

Sigue leyendo