Guias

Guias18 min de leitura

Monte um formulário de captação de leads que chegue rápido até você

Um formulário de leads no seu próprio site que envia e-mail com reply-to, avisa o chat da equipe e alimenta seu CRM, para você responder enquanto o lead ainda está lá.

Preet SutharFundador, Ikiform

Coloque um formulário curto na sua própria página que envia nome, e-mail de trabalho e uma pergunta de qualificação a um backend de formulários. Ative os e-mails de notificação para que cada lead chegue à sua caixa de entrada com o Reply apontado para o lead, e envie um webhook assinado para o chat da equipe e para o seu CRM. Depois meça os minutos entre o envio e a primeira resposta, porque esse número decide mais negócios do que o design do formulário.

Um formulário de leads é um formulário de contato com uma missão: começar uma conversa de vendas. Quem o preenche está comparando você com outra empresa, muitas vezes em outra aba. A equipe que responde primeiro, com uma resposta útil de uma pessoa de verdade, geralmente fica com a reunião. Este guia monta o formulário no seu próprio site, faz cada lead chegar até você em segundos e deixa o CRM como opcional.

Como um lead chega até você

O formulário envia ao Ikiform. O Ikiform verifica se o envio é spam, armazena e então faz três coisas ao mesmo tempo: manda um e-mail para a sua equipe com o lead como endereço de reply-to, envia um webhook assinado e mostra o lead no painel. O webhook é como o lead chega ao chat da equipe e ao seu CRM.

Como um lead vai do seu formulário até a pessoa que respondeformuláriode leadsseu site,qualquer stackou criadorIkiformcheca spam,armazena o leade-mail denotificaçãoReply vai parao leadpainelpesquisa,filtro,exportaçãowebhookassinadosubmission.createdchat e CRMrelay ouautomaçãoenviorelayComo um lead vai do seu formulário até a pessoa que respondeformuláriode leadsseu site,qualquer stackou criadorIkiformcheca spam,armazena o leade-mail denotificaçãoReply vai para oleadpainelpesquisa, filtro,exportaçãowebhookassinadosubmission.createdchat e CRMrelay ou automaçãoenviorelay
  1. Um visitante preenche o formulário de leads no seu site, e ele envia ao seu endpoint do Ikiform.
  2. O Ikiform confere o honeypot, a pontuação de spam e o limite de taxa, e então armazena o lead.
  3. Segundos depois, cada destinatário das notificações recebe um e-mail, e clicar em Reply escreve para o lead.
  4. O lead aparece no painel, onde você pode pesquisá-lo, filtrá-lo e exportá-lo.
  5. O Ikiform envia um webhook submission.created assinado.
  6. Um relay ou uma ferramenta de automação publica o lead no chat da equipe e cria o contato no seu CRM.
O e-mail é o caminho mais rápido, sem nenhuma configuração. O webhook acrescenta os lugares que a sua equipe já acompanha.

Quatro formas de captar leads

Cada configuração comum é boa em alguma coisa. Escolha pelo lugar onde você quer que os leads fiquem e por quem mantém o formulário.

AbordagemBom emContras
O formulário do próprio CRM, como os formulários do HubSpot ou os web forms do PipedriveOs leads chegam ao CRM como contatos sem nenhuma integração extra. Rastreamento e lead scoring ficam num único produto.O formulário é incorporado com o script e o estilo do CRM. Trocar de CRM significa refazer todos os formulários. Alguns recursos dependem do plano.
Formulário incorporado de um criador de formulários, como Typeform ou TallyFormulários em várias etapas caprichados, com lógica e sem código.Um embed com a cara do criador, a menos que você pague para mudar o estilo. Webhooks e limites de respostas dependem do plano.
Sua própria rota de API e banco de dadosQualquer lógica que você quiser, como lead scoring antes de armazenar qualquer coisa.Você constrói filtro de spam, limites de taxa, alertas por e-mail, novas tentativas e exportação, e mantém um servidor rodando para um único formulário.
Backend de formulários, como o IkiformSeu próprio HTML em qualquer site. Filtro de spam, alertas por e-mail com reply-to, webhooks assinados e exportação CSV sem servidor.Sem lead scoring, sem registros no CRM e sem e-mail para o lead. Isso vem do seu CRM ou da sua ferramenta de e-mail, via webhook.

Se todo o seu processo de vendas roda dentro de um CRM e você está satisfeito com o formulário dele, use-o. Um backend de formulários faz sentido quando o formulário precisa combinar com o seu site, quando você pode trocar de CRM ou quando quer que o mesmo formulário chegue ao e-mail, ao chat e a um CRM sem ter que escolher um só.

Pergunte menos, qualifique uma vez

Cada campo que você adiciona custa envios. A maioria dos formulários de leads precisa de quatro coisas: para quem responder, onde a pessoa trabalha, o que ela quer e espaço para explicar. Uma única pergunta de escolha fixa faz a qualificação, porque chega como um de poucos valores conhecidos em que o seu roteamento pode confiar. Teste abaixo; ele roda o validador do Ikiform no seu navegador e mostra o que seria armazenado, ou o 422 que você receberia.

Prévia

Roda o validador do Ikiform no seu navegador. Nada é enviado.

Cole esta definição na aba Fields do formulário e o Ikiform a aplica no servidor. O modelo de formulário de contato tem uma versão mais leve, com um assunto em vez de um interesse.
CampoPor quêLembre-se
nameUma resposta que começa pelo nome da pessoaMantenha o id name. Um link no campo de nome é um forte sinal de spam
emailPara quem o Reply escreveMantenha o id email. Rotulá-lo como Work email (e-mail de trabalho) incentiva as pessoas a usar um, mas não obriga
companyPesquisar a pessoa antes de responderOpcional. Torná-lo obrigatório custa envios de freelancers
interestRoteamento e prioridadeUm select armazena um dos valores listados ou recusa o envio, então as automações podem se ramificar com base nele
messageContexto para a primeira respostaOpcional. Uma caixa de texto longo obrigatória é o campo em que as pessoas desistem

Telefone, tamanho da equipe e orçamento pertencem a formulários em que eles mudam o que você faz em seguida. O modelo de pedido de orçamento é a versão mais completa, com serviço, orçamento e prazo como escolhas fixas. Se um vendedor liga para todo lead, peça o telefone. Se você roteia por tamanho de equipe, peça isso como um select. Caso contrário, deixe para a primeira resposta.

O formulário

Escolha sua stack. Toda versão mostra a mensagem do servidor embaixo do campo a que ela se refere e mantém o que o visitante digitou, porque perder uma mensagem escrita pela metade por causa de um erro de digitação é como os leads desistem. O estado de sucesso diz quem responde e quando, para ninguém ficar em dúvida se funcionou.

O formulário envia do jeito tradicional e redireciona para a sua página de agradecimento, então funciona antes de qualquer script carregar. Cada campo tem um espaço vazio para o seu erro.

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>

O script mantém o visitante na página. Ele mostra o erro de cada campo vindo do servidor embaixo desse campo e troca o formulário por uma frase que diz quem responde e quando.

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";
});
  • Troque frm_xxxxxxxxxxxxxxxx pelo id do seu formulário, que está no painel.
  • O input oculto _gotcha é o honeypot. As pessoas nunca o veem; bots que preenchem todos os inputs se marcam como spam.
  • O input oculto page registra de qual página o lead veio: preços, uma página de recurso, uma landing page de campanha. Se você definir campos, adicione page como um campo de texto opcional, ou o envio é recusado com Unknown field.
  • As versões no servidor repassam o header Origin do visitante, porque um fetch feito no servidor não envia nenhum e o Ikiform detecta por ele os testes gratuitos de localhost.
  • O formulário em HTML simples precisa de Redirect after submit, ou de um input _redirect em um dos seus Allowed domains, para cair na sua própria página de agradecimento.
As versões no servidor enviam com uma chave secreta, então o Ikiform pula Allowed domains e a verificação humana. Todo envio passa a vir do IP do seu servidor, e o limite Standard de 5 por minuto por visitante conta todos os seus visitantes juntos. Escolha o limite de taxa Relaxed ou Custom para um formulário que você envia por um servidor, e mantenha IKIFORM_SECRET_KEY em variáveis de ambiente só do servidor.

A documentação cobre a configuração de cada framework em detalhes: Next.js, Astro, SvelteKit, Nuxt, React, Vue, envio a partir de um servidor e HTML simples.

Fale com o lead em minutos

O formulário é a parte fácil. O que separa um formulário de leads que vende de um que só coleta é o tempo entre o envio e a resposta de uma pessoa. Veja como é esse caminho quando funciona:

Os minutos entre o envio de um lead e a sua primeira respostaenviar0 sarmazenadomenos de umsegundoe-mail echatsegundos depoisvocêrespondeda sua caixa deentradafilaReplyOs minutos entre o envio de um lead e a sua primeira respostaenviar0 sarmazenadomenos de um segundoe-mail e chatsegundos depoisvocê respondeda sua caixa de entradafilaReply
  1. O lead envia o formulário.
  2. O Ikiform armazena e responde ao navegador em bem menos de um segundo.
  3. O e-mail de notificação e o webhook saem de uma fila segundos depois.
  4. Alguém da equipe clica em Reply na caixa de entrada, ou no link mailto no chat, e a resposta vai para o lead.
Tudo até o e-mail leva segundos. A última seta é a que você controla, e a que ganha negócios.

Responda pela sua caixa de entrada

Cada e-mail de notificação define o endereço de reply-to como o do lead. O Ikiform o pega primeiro de um campo _replyto e depois de um campo chamado email, email_address, your_email, reply_to, contact_email. Mantenha o id do campo email e o Reply vai para o lead, não para o Ikiform. O assunto é New submission: mais o nome do formulário, então dê ao formulário o nome do que ele é, como Talk to sales (fale com vendas), e filtre por esse assunto para marcar ou destacar os leads.

Adicione até 10 destinatários por formulário nas configurações de notificação do formulário: membros do workspace, ou endereços externos que confirmam por e-mail antes. Mande para as pessoas que respondem, não para um alias compartilhado sem dono: um lead em cinco caixas de entrada e assumido por ninguém espera mais do que um lead em uma só.

Os e-mails de notificação têm limite de 50 por formulário por hora, ou 10 enquanto o workspace tiver menos de 7 dias, e depois um resumo para o resto da hora. Um formulário de leads normal nunca chega perto disso. Se você roda uma campanha que possa chegar, roteie os leads também para o chat via webhook.

Avise a equipe onde ela está

O e-mail funciona quando alguém é dono da caixa de entrada. Uma equipe que vive no chat responde mais rápido quando o lead aparece lá. Adicione um webhook para Slack, Teams ou Discord seguindo Slack, Microsoft Teams ou Discord. Coloque um link mailto: na mensagem para que quem assumir o lead possa responder com um clique.

Roteie pelo que a pessoa pediu

Como interest só aceita valores listados, um pequeno relay pode se ramificar com base nele com segurança. Esta rota manda pedidos de demonstração e perguntas sobre contrato para canais próprios e todo o resto para o canal principal de vendas:

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 confere a assinatura e o timestamp, então ninguém mais consegue publicar leads falsos nos seus canais.
  • Um 502 quando o Slack está fora do ar faz o Ikiform tentar de novo a mesma entrega, com o mesmo webhook-id, por cerca de 3 dias.
  • Mude o rótulo de uma opção à vontade. Mantenha o valor estável depois que um relay ou uma automação depender dele.

Mantenha o lixo fora do pipeline

Formulários de leads atraem um tipo específico de spam: gente vendendo SEO, link building e desenvolvimento terceirizado para você. Isso desperdiça a sua resposta mais rápida, então filtre antes que chegue a alguém.

DefesaO que ela barraConfiguração
HoneypotBots que preenchem todos os inputsO input oculto _gotcha
Pontuação de spamFrases conhecidas de pitch de vendas como seo services (+2), links no nome (+3), três ou mais links (+2), repetições (+3). Com 5, é spamNenhuma
Limite de taxaScripts que enviam em loopConfigure o formulário como Strict, 2 a cada 10 minutos por visitante. Um lead real raramente envia duas vezes em dez minutos
Domínios permitidosEnvios de outros sitesAdicione seu domínio em Allowed domains
Verificação humanaBots num navegador de verdadeDefina Spam check como Ikiform. As versões com fetch passam a precisar de um token de challenge()

Spam recebe a mesma resposta de sucesso de um lead real, não envia e-mail nem webhook e não conta no uso. Isso também significa que um lead julgado errado fica em silêncio. Confira o filtro Spam uma vez por semana; marcar um envio como não spam dispara o e-mail e os webhooks dele nesse momento. A documentação de spam lista todos os sinais.

Saiba de onde vêm os leads

Cada envio já registra a origem e o referrer da página, que aparecem no webhook como meta.origin e meta.referrer. As tags de campanha precisam de uma ajudinha, porque o visitante muitas vezes chega numa página e envia em outra. Este snippet copia os parâmetros utm_ para inputs ocultos e os guarda durante a sessão:

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>

Num framework, leia os mesmos parâmetros da URL no servidor e renderize-os como inputs ocultos. Com campos definidos, adicione cada id utm_ como um campo de texto opcional. Nomes que começam com _ nunca são armazenados, então não os use para dados que você quer guardar.

O que o lead vê em seguida

O Ikiform não envia e-mail para quem preenche o formulário. Os e-mails de notificação vão só para você e sua equipe, então não há resposta automática, e-mail de confirmação nem double opt-in. Envie esses e-mails pela sua ferramenta de e-mail, disparados por um webhook. Para um formulário de leads, isso muitas vezes não é problema: uma resposta pessoal rápida vale mais que uma automática. Se mesmo assim você quiser uma confirmação instantânea, envie pelo seu CRM ou ferramenta de e-mail quando o webhook criar o contato, para que respostas e descadastros fiquem registrados num só lugar.

Seja o que for que você envie, a mensagem de sucesso na página é a promessa. Diga quem responde e até quando, e cumpra. Um formulário que diz um dia útil e responde em dez minutos ganha confiança; um que diz dez minutos e responde no dia seguinte a perde.

Leads no seu CRM

Não há integrações de um clique. Toda ferramenta é alcançada por um webhook assinado, diretamente ou por uma ferramenta de automação como Zapier ou n8n. Para um CRM, isso significa um relay que mapeia o corpo fixo do webhook do Ikiform para a chamada de criação de contato do CRM. Leads no HubSpot ou no Pipedrive mostra os dois passo a passo, incluindo duplicados e novas tentativas. Até você precisar de um CRM, o painel e uma exportação CSV semanal são um ótimo pipeline.

Escolha o seu caso

A configuração acima serve para qualquer lead. Estas páginas cobrem o que muda para um tipo específico de lead e para levar os leads a um CRM.

Confira se funciona

Siga estes passos antes de mandar tráfego para a página. O Ikiform não tem plano gratuito. Testar é grátis: um workspace sem plano aceita 50 envios de teste por mês a partir de localhost. Para entrar no ar, escolha o Pro a partir de US$ 6/mês para 500 envios, ou pague uma vez: 10.000 envios por US$ 49 ou 50.000 envios por US$ 149, com créditos que nunca expiram. Veja os preços.

  1. Em Allowed domains do formulário, adicione o domínio do seu site, mais localhost enquanto desenvolve. Deixe vazio para aceitar envios de qualquer lugar.
  2. Preencha o formulário na sua página e envie. Você cai na sua página de agradecimento, ou na hospedada pelo Ikiform.
  3. Abra Submissions no painel. O novo envio está lá com todos os campos que você enviou.
  4. Confira a caixa de entrada de cada destinatário. O assunto é New submission: mais o nome do formulário, e o Reply abre uma mensagem para o endereço que você digitou.
  5. Se você adicionou um webhook, abra o endpoint em Webhooks. A entrega mostra succeeded com a resposta do seu servidor.
  6. Envie com o honeypot preenchido, _gotcha=bot. Ele ainda recebe uma resposta de sucesso, mas o envio é armazenado como spam e não dispara e-mail nem webhook.
  7. Não chegou nada? Mude o filtro de status do painel para Spam. Spam recebe a mesma resposta de sucesso de um envio real.
  8. Cronometre: envie pelo celular e anote quanto tempo levam para chegar o e-mail e a mensagem no chat.

Solução de problemas

ProblemaO que fazer
O Reply vai para o endereço do Ikiform, não para o leadO formulário não tem nenhum campo que o Ikiform reconheça como o e-mail do lead. Renomeie o campo para email, ou envie um campo _replyto com o endereço. Nomes aceitos: email, email_address, your_email, reply_to, contact_email.
422 com Unknown field para page ou utm_sourceO formulário tem uma definição de campos e o input oculto não está nela. Adicione-o como um campo de texto opcional, ou remova o input.
422 validation_failedO envio não corresponde à definição de campos do formulário. error.fields aponta cada campo e o motivo. Faça o name do input bater com o id do campo.
403 origin_not_allowed, ou todo envio cai no spamO domínio da página não está em Allowed domains do formulário. Adicione-o, mais localhost para testes locais. Subdomínios de um domínio listado são permitidos.
429 rate_limitedUm visitante enviou mais do que o limite de taxa do formulário permite. O Standard permite 5 por minuto por visitante. Espere o Retry-After, ou escolha Relaxed ou Custom para formulários que enviam a partir de um único IP compartilhado.
403 challenge_requiredA verificação de spam do formulário está como Ikiform e um envio por fetch não tinha token. Obtenha um com challenge(formId) de @ikiform/sdk antes de cada envio, ou desligue a verificação.
O envio está no painel, mas nenhum e-mail ou webhook chegouEle foi armazenado como spam. Spam não envia nada. Abra-o no filtro Spam para ver os motivos e marque-o como não spam para enviar o e-mail e os webhooks dele.
Um destinatário não recebe e-mails de notificaçãoUm endereço de fora do workspace precisa confirmar antes, pelo e-mail que o Ikiform envia a ele. Verifique se ele foi confirmado e depois confira a pasta de spam do destinatário.

Perguntas

Travou em algum passo ou quer um guia para o seu caso? Envie um e-mail para hello@ikiform.com.