SincroDev Logo SincroDev

Cómo automatizar un formulario web y guardar leads en Notion con n8n


Muchos equipos siguen gestionando leads o consultas desde un formulario web con un proceso torpe:

  • llega el mensaje
  • alguien revisa el correo
  • copia datos manualmente
  • los pega en Notion, un CRM o una planilla
  • y recién después empieza el seguimiento

Ese flujo no escala bien. Consume tiempo, introduce errores y vuelve opaco algo tan básico como saber cuántos contactos entraron realmente.

En este tutorial vas a construir una automatización simple y útil:

un formulario web envía datos a n8n y n8n crea automáticamente un registro en Notion

Es un caso pequeño, pero representa muy bien el tipo de automatización que después puede crecer hacia procesos de ventas, soporte u operaciones.

Qué vas a construir

El flujo final será este:

Formulario web

Webhook de n8n

Validación de campos

Creación de registro en Notion

Respuesta al frontend

Cuándo conviene esta solución

Este enfoque tiene sentido cuando:

  • recibes leads o consultas desde una landing
  • quieres registrar todo en Notion sin trabajo manual
  • necesitas una solución rápida antes de integrar un CRM más complejo
  • quieres una base automatizada para luego sumar alertas, scoring o seguimiento

No es la mejor opción cuando:

  • ya tienes un CRM bien integrado
  • necesitas lógica comercial compleja desde el primer día
  • el formulario maneja datos altamente sensibles y requiere controles adicionales

Requisitos previos

Antes de empezar, asegúrate de tener:

  • una instancia de n8n funcionando
  • una cuenta de Notion
  • una base de datos creada en Notion
  • una integration de Notion con acceso a esa base

Si todavía no tienes n8n levantado, puedes empezar por este tutorial:

Qué estructura usar en Notion

Para este ejemplo, crea una base de datos con estas propiedades:

PropiedadTipo sugerido
NombreTitle
EmailEmail
MensajeText
FechaDate
EstadoSelect

Puedes añadir otras columnas después, por ejemplo:

  • Origen
  • Campaña
  • Asignado a
  • Prioridad

Paso 1: Crear la integration en Notion

  1. Ve a Settings -> Integrations
  2. Crea una nueva integration
  3. Copia el Internal Integration Token
  4. En la base de datos que usarás, haz click en ... -> Connect to
  5. Selecciona la integration recién creada

Sin ese paso, n8n no podrá escribir en la base.

Paso 2: Obtener el Database ID

Abre la base de datos en Notion y mira la URL.

Tendrá una forma similar a esta:

https://www.notion.so/workspace/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=...

El bloque largo del medio es el database_id.

Guárdalo porque lo necesitarás en el nodo de Notion.

Paso 3: Crear el workflow en n8n

El flujo mínimo necesita estos nodos:

  1. Webhook
  2. Validación
  3. Notion
  4. Respond to Webhook

Si quieres acelerar el proceso, ya tienes un blueprint base disponible aquí:

Pero en este tutorial vamos a montarlo conceptualmente paso a paso.

Paso 4: Configurar el Webhook

Crea un nodo Webhook con:

  • HTTP Method: POST
  • Path: form-notion

El endpoint resultante será algo como:

https://tu-n8n.com/webhook/form-notion

El frontend enviará un JSON así:

{
  "nombre": "María García",
  "email": "maria@ejemplo.com",
  "mensaje": "Me interesa recibir más información"
}

Paso 5: Validar los campos de entrada

No conviene mandar directo a Notion cualquier payload que llegue.

Como mínimo, valida:

  • que nombre exista
  • que email exista
  • que el email tenga formato razonable

En n8n puedes hacerlo con un nodo IF, Code o Set según prefieras.

Una lógica simple sería:

const nombre = $json.nombre?.trim();
const email = $json.email?.trim();
const mensaje = $json.mensaje?.trim() || '';

if (!nombre) {
  throw new Error('El campo nombre es obligatorio');
}

if (!email) {
  throw new Error('El campo email es obligatorio');
}

if (!email.includes('@')) {
  throw new Error('El email no tiene un formato válido');
}

return [{
  nombre,
  email,
  mensaje
}];

La idea no es hacer validación perfecta. La idea es evitar basura operativa desde el primer paso.

Paso 6: Crear el registro en Notion

Agrega un nodo de Notion configurado para crear una página dentro de la base de datos.

Mapea los campos así:

database_id: TU_DATABASE_ID

Nombre: "{{ $json.nombre }}"
Email: "{{ $json.email }}"
Mensaje: "{{ $json.mensaje }}"
Fecha: "{{ $now.toISO() }}"
Estado: "Nuevo"

Si tu base tiene otros nombres de propiedades, ajústalos exactamente. Notion es sensible a la estructura esperada.

Paso 7: Devolver una respuesta al frontend

Después de guardar el lead, añade un nodo Respond to Webhook para devolver una respuesta consistente al frontend.

Por ejemplo:

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

Si la validación falla, puedes responder con 400.

Si falla la escritura en Notion, conviene responder con 500 o un error controlado según el caso.

Paso 8: Conectar el formulario web

Desde el frontend, el envío puede hacerse con fetch:

fetch('https://tu-n8n.com/webhook/form-notion', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    nombre: form.nombre.value,
    email: form.email.value,
    mensaje: form.mensaje.value
  })
});

Si quieres mejorar la UX, añade:

  • loader mientras envía
  • mensaje de éxito
  • mensaje claro de error
  • deshabilitar el botón durante el envío

Arquitectura mínima del flujo

Una versión razonable para empezar sería:

Webhook

Validar campos

Crear en Notion

Responder OK

Y una versión un poco más seria:

Webhook

Validar campos

Normalizar datos

Crear en Notion

Notificar por Slack / email

Responder OK

Errores comunes

1) No conectar la integration a la base

Es probablemente el error más común. Tener el token no alcanza: la base debe estar compartida con la integration.

2) Mapeo incorrecto de propiedades

Si en Notion la propiedad se llama Nombre completo y en n8n usas Nombre, fallará.

3) No validar el payload

Si aceptas cualquier cosa, en pocos días la base se llena de ruido, pruebas rotas o spam.

4) Exponer el webhook sin control

Si el endpoint queda completamente abierto, puedes recibir spam o abuso. Como mínimo, conviene:

  • usar rate limiting si el entorno lo permite
  • añadir validación adicional
  • ocultar endpoints públicos cuando no sean necesarios

5) No distinguir error funcional de error técnico

No es lo mismo:

  • “faltó el email”
  • “Notion respondió 401”

Ambos son errores, pero requieren tratamiento distinto.

Cómo llevarlo a producción con más criterio

Si este flujo empieza a ser importante para el negocio, el siguiente paso no es “hacerlo más grande” sino hacerlo más confiable.

Recomendaciones:

  • registrar logs de los envíos
  • guardar timestamp y origen
  • evitar duplicados por email si aplica
  • añadir alertas si falla Notion
  • separar validación de negocio y respuesta al usuario
  • considerar una cola si el volumen crece

También puedes extender el flujo con:

  • envío automático a Slack
  • lead scoring inicial
  • asignación de responsable
  • sincronización con CRM
  • emails de confirmación

Cuándo esta automatización deja de ser suficiente

Este patrón funciona muy bien al principio y en escenarios intermedios.

Pero puede quedarse corto cuando:

  • hay múltiples formularios y campañas
  • necesitas trazabilidad más compleja
  • existe lógica comercial por etapas
  • varias herramientas deben mantenerse sincronizadas

Ahí suele convenir diseñar un flujo más amplio o directamente una capa propia de backend.

Cierre

Automatizar un formulario web hacia Notion es una de esas mejoras pequeñas que se sienten rápido:

  • menos trabajo manual
  • menos errores de carga
  • mejor visibilidad
  • base lista para escalar

No es una solución “glamorosa”, pero sí una muy útil. Y eso suele ser mejor negocio que una demo espectacular sin impacto real.

Si quieres acelerar la implementación, puedes apoyarte en este recurso:

Y si quieres adaptar este flujo a tu proceso real, integrarlo con otras herramientas o convertirlo en algo más sólido para producción, puedes escribirme desde Sobre Mí.