Guías

Guías17 min de lectura

Crea un formulario de captación de leads que te llegue rápido

Un formulario de captación de leads en tu propio sitio que te avisa por email con reply-to, avisa al chat del equipo y alimenta tu CRM, para responder mientras el lead sigue ahí.

Preet SutharFundador, Ikiform

Pon un formulario corto en tu propia página que envíe el nombre, el email de trabajo y una pregunta de cualificación a un backend de formularios. Activa los emails de notificación para que cada lead llegue a tu bandeja con Reply apuntando al lead, y envía un webhook firmado al chat de tu equipo y a tu CRM. Después mide los minutos que pasan desde el envío hasta la primera respuesta, porque ese número decide más ventas que el diseño del formulario.

Un formulario de leads es un formulario de contacto con una misión: iniciar una conversación de ventas. Quien lo rellena te está comparando con otra empresa, a menudo en otra pestaña. El equipo que responde primero, con una respuesta útil de una persona real, suele llevarse la llamada. Esta guía crea el formulario en tu propio sitio, te hace llegar cada lead en segundos y deja el CRM como opcional.

Cómo viaja un lead

El formulario envía a Ikiform. Ikiform revisa el envío en busca de spam, lo guarda y luego hace tres cosas a la vez: avisa por email a tu equipo con el lead como dirección de respuesta, envía un webhook firmado y muestra el lead en el panel. El webhook es la forma en que el lead llega al chat del equipo y a tu CRM.

Cómo llega un lead desde tu formulario hasta la persona que le respondeformulariode leadstu sitio,cualquier stacko creadorIkiformfiltra spam,guarda el leademail denotificaciónResponder va alleadpanelbuscar, filtrar,exportarwebhookfirmadosubmission.createdchat y CRMrelay oautomatizaciónenvíorelayCómo llega un lead desde tu formulario hasta la persona que le respondeformulariode leadstu sitio,cualquierstack o creadorIkiformfiltra spam,guarda el leademail denotificaciónResponder va alleadpanelbuscar, filtrar,exportarwebhook firmadosubmission.createdchat y CRMrelay oautomatizaciónenvíorelay
  1. Un visitante rellena el formulario de leads de tu sitio, que se envía a tu endpoint de Ikiform.
  2. Ikiform comprueba el honeypot, la puntuación de spam y el límite de frecuencia, y luego guarda el lead.
  3. Segundos después, cada destinatario de las notificaciones recibe un email, y al pulsar Responder se escribe al lead.
  4. El lead aparece en el panel, donde puedes buscarlo, filtrarlo y exportarlo.
  5. Ikiform envía un webhook submission.created firmado.
  6. Un relay o una herramienta de automatización publica el lead en el chat del equipo y crea el contacto en tu CRM.
El email es el camino más rápido sin configuración. El webhook añade los sitios que tu equipo ya vigila.

Cuatro formas de captar leads

Cada configuración habitual destaca en algo. Elige según dónde quieras que vivan los leads y quién mantiene el formulario.

EnfoquePunto fuerteInconvenientes
El formulario propio de tu CRM, como los formularios de HubSpot o los formularios web de PipedriveLos leads llegan al CRM como contactos sin integraciones intermedias. El seguimiento y el lead scoring están en un solo producto.El formulario se incrusta con el script y los estilos del CRM. Cambiar de CRM implica rehacer cada formulario. Algunas funciones dependen del plan.
Un formulario incrustado de un constructor, como Typeform o TallyFormularios de varios pasos pulidos, con lógica y sin código.Un embed que se parece al creador salvo que pagues por cambiarle el estilo. Los webhooks y los límites de respuestas dependen del plan.
Tu propia ruta de API y base de datosCualquier lógica que quieras, como puntuar los leads antes de guardar nada.Tú construyes el filtrado de spam, los límites de frecuencia, las alertas por email, los reintentos y la exportación, y mantienes un servidor funcionando para un solo formulario.
Un backend de formularios, como IkiformTu propio HTML en cualquier sitio. Filtrado de spam, alertas por email con reply-to, webhooks firmados y exportación a CSV, sin servidor.Sin lead scoring, sin registros en el CRM y sin email al lead. Eso viene de tu CRM o de tu herramienta de email, por webhook.

Si todo tu proceso de ventas vive dentro de un CRM y te gusta su formulario, úsalo. Un backend de formularios encaja cuando el formulario tiene que encajar con tu sitio, cuando podrías cambiar de CRM o cuando quieres que el mismo formulario llegue al email, al chat y a un CRM sin tener que elegir.

Pide menos, cualifica una vez

Cada campo que añades te cuesta envíos. La mayoría de los formularios de leads necesitan cuatro cosas: a quién responder, dónde trabaja, qué quiere y espacio para explicarse. Una pregunta de opciones fijas hace la cualificación, porque llega como uno de unos pocos valores conocidos en los que tu enrutamiento puede confiar. Pruébalo abajo; ejecuta el validador de Ikiform en tu navegador y muestra lo que se guardaría, o el 422 que recibirías.

Vista previa

Ejecuta el validador de Ikiform en tu navegador. No se envía nada.

Pega esta definición en la pestaña Fields del formulario e Ikiform la aplicará en el servidor. La plantilla de formulario de contacto tiene una versión más ligera, con un tema en lugar de un interés.
CampoPor quéTen en cuenta
nameUna respuesta que empieza con su nombreMantén el id name. Un enlace en un campo de nombre es una señal fuerte de spam
emailA quién escribe ReplyMantén el id email. Etiquetarlo como Work email anima a usar uno de trabajo, pero no lo obliga
companyInfórmate antes de responderOpcional. Hacerlo obligatorio te cuesta envíos de freelances
interestEnrutamiento y prioridadUn select guarda uno de los valores de la lista o rechaza el envío, así que las automatizaciones pueden ramificarse según él
messageContexto para la primera respuestaOpcional. Una caja de texto obligatoria es el campo en el que la gente abandona

El teléfono, el tamaño del equipo y el presupuesto van en formularios donde cambian lo que haces después. La plantilla de solicitud de presupuesto es la versión completa, con servicio, presupuesto y plazos como opciones fijas. Si un comercial llama a cada lead, pide un teléfono. Si enrutas según el tamaño del equipo, pídelo como select. Si no, déjalos para la primera respuesta.

El formulario

Elige tu stack. Todas las versiones muestran el mensaje del servidor bajo el campo al que corresponde y conservan lo que escribió el visitante, porque perder un mensaje a medio escribir por una errata es como los leads se rinden. El estado de éxito dice quién responde y cuándo, para que nadie se pregunte si ha funcionado.

El formulario se envía de la forma clásica y redirige a tu página de agradecimiento, así que funciona antes de que cargue ningún script. Cada campo tiene un hueco vacío para su error.

contact-sales.html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="POST" id="lead-form" novalidate>
  <label for="name">Name</label>
  <input id="name" name="name" autocomplete="name" required />
  <p class="error" data-error-for="name" hidden></p>

  <label for="email">Work email</label>
  <input id="email" name="email" type="email" autocomplete="email" required />
  <p class="error" data-error-for="email" hidden></p>

  <label for="company">Company</label>
  <input id="company" name="company" autocomplete="organization" />

  <label for="interest">What can we help with?</label>
  <select id="interest" name="interest" required>
    <option value="pricing">Pricing for my team</option>
    <option value="demo">A live demo</option>
    <option value="custom">A custom plan or contract</option>
    <option value="other">Something else</option>
  </select>

  <label for="message">Anything we should know?</label>
  <textarea id="message" name="message" rows="4"></textarea>
  <p class="error" data-error-for="message" hidden></p>

  <input type="hidden" name="page" value="pricing" />
  <input type="hidden" name="_redirect" value="https://example.com/thanks" />
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Talk to sales</button>
</form>

El script mantiene al visitante en la página. Muestra el error de cada campo que devuelve el servidor bajo ese campo, y sustituye el formulario por una línea que dice quién responde y cuándo.

lead-form.js
const form = document.getElementById("lead-form");

function showErrors(fields) {
  form.querySelectorAll("[data-error-for]").forEach((slot) => {
    const message = fields[slot.dataset.errorFor]?.[0];
    slot.textContent = message ?? "";
    slot.hidden = !message;
  });
}

form.addEventListener("submit", async (event) => {
  event.preventDefault();
  const button = form.querySelector("button");
  button.disabled = true;
  button.textContent = "Sending";
  try {
    const response = await fetch(form.action, {
      method: "POST",
      headers: { Accept: "application/json" },
      body: new FormData(form),
    });
    const result = await response.json();
    if (result.ok) {
      const thanks = document.createElement("p");
      thanks.setAttribute("role", "status");
      thanks.textContent = `Thanks, ${form.elements.name.value.trim().split(" ")[0]}. A person on our team will reply to ${form.elements.email.value} within one working day.`;
      form.replaceWith(thanks);
      return;
    }
    showErrors(result.error.fields ?? {});
    if (!result.error.fields) alert(result.error.message);
  } catch {
    alert("Something went wrong. Email sales@example.com and we'll pick it up.");
  }
  button.disabled = false;
  button.textContent = "Talk to sales";
});
  • Sustituye frm_xxxxxxxxxxxxxxxx por el id de tu formulario, que está en el panel.
  • El input oculto _gotcha es el honeypot. Las personas nunca lo ven; los bots que rellenan todos los inputs se marcan solos como spam.
  • El input oculto page registra de qué página vino el lead: precios, una página de producto, una landing de campaña. Si defines campos, añade page como campo de texto opcional, o el envío se rechazará con Unknown field.
  • Las versiones de servidor reenvían la cabecera Origin del visitante, porque un fetch desde el servidor no envía ninguna e Ikiform detecta a partir de ella las pruebas gratuitas desde localhost.
  • El formulario HTML puro necesita Redirect after submit, o un input _redirect en uno de tus Allowed domains, para llegar a tu propia página de agradecimiento.
Las versiones de servidor envían con una clave secreta, así que Ikiform se salta Allowed domains (dominios permitidos) y su verificación humana. Todos los envíos vienen entonces de la IP de tu servidor, y el límite Standard de 5 por minuto por visitante cuenta a todos tus visitantes juntos. Elige el límite de frecuencia Relaxed o Custom para un formulario que envías a través de un servidor, y guarda IKIFORM_SECRET_KEY en variables de entorno solo de servidor.

La documentación cubre a fondo la configuración de cada framework: Next.js, Astro, SvelteKit, Nuxt, React, Vue, envíos desde un servidor y HTML puro.

Contacta con el lead en minutos

El formulario es la parte fácil. Lo que separa un formulario de leads que vende de uno que solo recopila es el tiempo entre el envío y la respuesta de una persona. Así es ese camino cuando funciona:

Los minutos entre el envío de un lead y tu primera respuestaenvío0 sguardadomenos de unsegundoemail y chatsegundosdespuésrespondesdesde tubandejacolaReplyLos minutos entre el envío de un lead y tu primera respuestaenvío0 sguardadomenos de un segundoemail y chatsegundos despuésrespondesdesde tu bandejacolaReply
  1. El lead envía el formulario.
  2. Ikiform lo guarda y responde al navegador en mucho menos de un segundo.
  3. El email de notificación y el webhook salen de una cola segundos después.
  4. Alguien del equipo pulsa Responder en su bandeja, o el enlace mailto en el chat, y la respuesta va al lead.
Todo hasta el email tarda segundos. La última flecha es la que controlas tú, y la que gana las ventas.

Responde desde tu bandeja de entrada

Cada email de notificación pone al lead como dirección de respuesta. Ikiform la toma primero de un campo _replyto y, si no, de un campo llamado email, email_address, your_email, reply_to, contact_email. Mantén el id de campo email y Reply irá al lead, no a Ikiform. El asunto es New submission: más el nombre del formulario, así que ponle al formulario un nombre que diga lo que es, como Talk to sales, y filtra por ese asunto para etiquetar o destacar los leads.

Añade hasta 10 destinatarios por formulario en los ajustes de notificaciones del formulario: miembros del espacio de trabajo o direcciones externas que primero confirman por email. Envíalo a las personas que responden, no a un alias compartido del que nadie se hace cargo: un lead en cinco bandejas que nadie reclama espera más que un lead en una sola.

Los emails de notificación tienen un tope de 50 por formulario y hora, o 10 mientras el espacio de trabajo tenga menos de 7 días; después llega un resumen con el resto de la hora. Un formulario de leads normal nunca se acerca. Si lanzas una campaña que podría hacerlo, envía también los leads al chat por webhook.

Avisa al equipo donde ya está

El email funciona cuando alguien se hace cargo de la bandeja. Un equipo que vive en el chat responde antes cuando el lead aparece ahí. Añade un webhook a Slack, Teams o Discord siguiendo Slack, Microsoft Teams o Discord. Pon un enlace mailto: en el mensaje para que quien lo reclame pueda responder con un clic.

Enruta según lo que pidieron

Como interest solo acepta valores de la lista, un pequeño relay puede ramificarse según él con confianza. Esta ruta envía las peticiones de demo y las preguntas de contrato a sus propios canales, y todo lo demás al canal principal de ventas:

app/api/leads/route.ts
import { verifyWebhook, WebhookVerificationError } from "@ikiform/sdk/webhooks";

const CHANNELS: Record<string, string | undefined> = {
  demo: process.env.SLACK_DEMO_WEBHOOK,
  custom: process.env.SLACK_ENTERPRISE_WEBHOOK,
};

export async function POST(request: Request) {
  const payload = await request.text();
  let event;
  try {
    event = await verifyWebhook({ payload, headers: request.headers, secret: process.env.IKIFORM_WEBHOOK_SECRET! });
  } catch (error) {
    if (error instanceof WebhookVerificationError) return new Response(error.reason, { status: 400 });
    throw error;
  }
  if (event.type !== "submission.created") return new Response(null, { status: 204 });

  const lead = event.data.fields;
  const interest = String(lead.interest ?? "other");
  const target = CHANNELS[interest] ?? process.env.SLACK_SALES_WEBHOOK!;
  const text = [
    `*${lead.name}* from ${lead.company || "an unknown company"} wants: ${interest}`,
    `Reply: mailto:${lead.email}`,
    lead.message ? `> ${String(lead.message).slice(0, 300)}` : "",
  ]
    .filter(Boolean)
    .join("\n");

  const response = await fetch(target, {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({ text }),
  });
  if (!response.ok) return new Response(`Slack answered ${response.status}`, { status: 502 });
  return new Response(null, { status: 204 });
}
  • verifyWebhook comprueba la firma y la marca de tiempo, así que nadie más puede publicar leads falsos en tus canales.
  • Un 502 cuando Slack está caído hace que Ikiform reintente la misma entrega, con el mismo webhook-id, durante unos 3 días.
  • Cambia libremente la etiqueta de una opción. Mantén estable su valor en cuanto un relay o una automatización dependa de él.

Mantén la basura fuera del pipeline

Los formularios de leads atraen un tipo concreto de spam: gente que te quiere vender SEO, link building y desarrollo subcontratado. Desperdicia tu respuesta más rápida, así que fíltralo antes de que llegue a nadie.

DefensaQué frenaConfiguración
HoneypotBots que rellenan todos los inputsEl input oculto _gotcha
Puntuación de spamFrases de venta conocidas como seo services (+2), enlaces en el nombre (+3), tres o más enlaces (+2), repeticiones (+3). Con 5 es spamNinguna
Límite de frecuenciaScripts que envían en buclePon el formulario en Strict, 2 cada 10 minutos por visitante. Un lead real rara vez envía dos veces en diez minutos
Dominios permitidosEnvíos desde otros sitiosAñade tu dominio en Allowed domains
Verificación humanaBots en un navegador realPon Spam check en Ikiform. Las versiones con fetch necesitan entonces un token de challenge()

El spam recibe la misma respuesta de éxito que un lead real, no envía email ni webhook y no cuenta para el uso. Eso también significa que un lead mal juzgado es silencioso. Revisa el filtro Spam una vez por semana; al marcar uno como no spam, se envían en ese momento su email y sus webhooks. La documentación de spam enumera cada señal.

Sabe de dónde vienen los leads

Cada envío ya registra el origen y el referrer de la página, que aparecen en el webhook como meta.origin y meta.referrer. Las etiquetas de campaña necesitan algo de ayuda, porque el visitante a menudo llega a una página y envía el formulario en otra. Este fragmento copia los parámetros utm_ en inputs ocultos y los recuerda durante la sesión:

attribution.html
<input type="hidden" name="utm_source" />
<input type="hidden" name="utm_medium" />
<input type="hidden" name="utm_campaign" />

<script>
  const params = new URLSearchParams(location.search);
  for (const key of ["utm_source", "utm_medium", "utm_campaign"]) {
    let value = params.get(key);
    try {
      if (value) sessionStorage.setItem(key, value);
      else value = sessionStorage.getItem(key);
    } catch {}
    const input = document.querySelector(`#lead-form [name="${key}"]`);
    if (input && value) input.value = value.slice(0, 200);
  }
</script>

En un framework, lee los mismos parámetros de la URL en el servidor y renderízalos como inputs ocultos. Si tienes campos definidos, añade cada id utm_ como campo de texto opcional. Los nombres que empiezan por _ nunca se guardan, así que no los uses para datos que quieras conservar.

Lo que ve el lead después

Ikiform no envía emails a la persona que rellena el formulario. Los emails de notificación van solo a ti y a tu equipo, así que no hay respuesta automática, email de confirmación ni doble opt-in. Envíalos desde tu herramienta de email, disparados por un webhook. En un formulario de leads eso suele estar bien: una respuesta personal rápida gana a una automática. Si aun así quieres un acuse de recibo instantáneo, envíalo desde tu CRM o tu herramienta de email cuando el webhook cree el contacto, para que las respuestas y las bajas se registren en un solo sitio.

Envíes lo que envíes, el mensaje de éxito en la página es la promesa. Di quién responde y cuándo, y cúmplelo. Un formulario que dice un día laborable y responde en diez minutos se gana la confianza; uno que dice diez minutos y responde mañana la pierde.

Leads en tu CRM

No hay integraciones de un clic. Cada herramienta se conecta mediante un webhook firmado, directamente o a través de una herramienta de automatización como Zapier o n8n. Para un CRM, eso significa un relay que traduce el cuerpo fijo del webhook de Ikiform a la llamada de crear contacto del CRM. Leads a HubSpot o Pipedrive explica ambos, incluidos los duplicados y los reintentos. Hasta que necesites un CRM, el panel y una exportación a CSV semanal son un buen pipeline.

Elige tu caso

La configuración de arriba sirve para cualquier lead. Estas páginas cubren lo que cambia para un tipo concreto de lead y para llevar los leads a un CRM.

Comprueba que funciona

Repasa esto antes de enviar tráfico a la página. Ikiform no tiene plan gratuito. Probar es gratis: un espacio de trabajo sin plan acepta 50 envíos de prueba al mes desde localhost. Para salir a producción, elige Pro desde 6 $/mes para 500 envíos, o paga una vez: 10.000 envíos por 49 $ o 50.000 envíos por 149 $, con créditos que nunca caducan. Consulta los precios.

  1. En Allowed domains del formulario, añade el dominio de tu sitio, y localhost mientras desarrollas. Déjalo vacío para aceptar envíos desde cualquier lugar.
  2. Rellena el formulario en tu página y envíalo. Llegas a tu página de agradecimiento, o a la alojada de Ikiform.
  3. Abre Submissions en el panel. El nuevo envío está ahí con todos los campos que enviaste.
  4. Revisa la bandeja de cada destinatario. El asunto es New submission: más el nombre del formulario, y Reply abre un mensaje a la dirección que introdujiste.
  5. Si añadiste un webhook, abre el endpoint en Webhooks. La entrega muestra succeeded con la respuesta de tu servidor.
  6. Envía con el honeypot relleno, _gotcha=bot. Igualmente recibe una respuesta de éxito, pero el envío se guarda como spam y no envía email ni webhook.
  7. ¿No llegó nada? Cambia el filtro de estado del panel a Spam. El spam recibe la misma respuesta de éxito que un envío real.
  8. Cronométralo: envía desde tu móvil y anota cuánto tardan en llegar el email y el mensaje del chat.

Solución de problemas

ProblemaQué hacer
Reply va a la dirección de Ikiform, no al leadEl formulario no tiene ningún campo que Ikiform reconozca como el email del lead. Renombra el campo a email, o envía un campo _replyto con la dirección. Nombres aceptados: email, email_address, your_email, reply_to, contact_email.
422 con Unknown field para page o utm_sourceEl formulario tiene una definición de campos y el input oculto no está en ella. Añádelo como campo de texto opcional o quita el input.
422 validation_failedEl envío no coincide con la definición de campos del formulario. error.fields indica cada campo y el motivo. Haz que el name del input coincida con el id del campo.
403 origin_not_allowed, o todos los envíos acaban en spamEl dominio de la página no está en Allowed domains del formulario. Añádelo, y localhost para las pruebas locales. Los subdominios de un dominio de la lista están permitidos.
429 rate_limitedUn visitante envió más de lo que permite el límite de frecuencia del formulario. Standard permite 5 por minuto por visitante. Espera lo que indique Retry-After, o elige Relaxed o Custom para formularios que envían desde una IP compartida.
403 challenge_requiredLa verificación antispam del formulario está en Ikiform y un envío con fetch no llevaba token. Consigue uno con challenge(formId) de @ikiform/sdk antes de cada envío, o desactiva la verificación.
El envío está en el panel pero no llegó ningún email ni webhookSe guardó como spam. El spam no envía nada. Ábrelo en el filtro Spam para ver los motivos y márcalo como no spam para enviar su email y sus webhooks.
Un destinatario no recibe emails de notificaciónUna dirección de fuera del espacio de trabajo tiene que confirmar primero, desde el email que le envía Ikiform. Comprueba que se confirmó y luego revisa la carpeta de spam del destinatario.

Preguntas

¿Te atascaste en un paso o quieres una guía para tu caso? Escribe a hello@ikiform.com.