forms

Qualify Typeform responses by work email

Receive Typeform responses by webhook, check the email answer with isBusinessEmail, and route work emails, personal emails and Microsoft 365 companies.

isBusinessEmail for Typeform

Typeform sends each completed response to a webhook you configure on the form (Connect → Webhooks). Your endpoint finds the email answer, checks it, and routes the lead.

The webhook endpoint (Express)

import express from 'express';

const app = express();
// Keep the raw body if you verify Typeform's signature (recommended; see Typeform's webhook docs).
app.use(express.json({ verify: (req, _res, buf) => { req.rawBody = buf; } }));

async function checkWorkEmail(email) {
  try {
    const res = await fetch('https://api.isbusinessemail.com/v1/check', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.IBE_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ email }),
      signal: AbortSignal.timeout(2500),
    });
    return res.ok ? await res.json() : null;
  } catch {
    return null;
  }
}

app.post('/webhooks/typeform', async (req, res) => {
  // 1. Verify the Typeform-Signature header with your webhook secret here.
  const answers = req.body?.form_response?.answers ?? [];
  const email = answers.find((a) => a.type === 'email')?.email;

  res.sendStatus(200);            // acknowledge fast; do the work after
  if (!email) return;

  const verdict = await checkWorkEmail(email);
  await routeLead({
    email,
    category: verdict?.category ?? 'unchecked',
    recommendation: verdict?.recommendation ?? 'review',
    microsoft365: verdict?.workspace?.microsoft_365?.detected ?? false,
    googleWorkspace: verdict?.workspace?.google_workspace?.detected ?? false,
  });
});

app.listen(3000);

routeLead is yours: create a CRM contact, post to Slack, or add to a sequence.

No-code alternative

Use Typeform as the trigger in Zapier, Make or n8n, then add the HTTP step from those guides.

Can I block personal emails inside the form?

Typeform doesn’t run your code while the respondent fills in the form, so a check can’t stop the submission. Practical options:

  • Label the question “Work email” and explain why you ask.
  • Use logic jumps on a follow-up question (“Don’t have a work email?”) to route those respondents differently.
  • Treat block verdicts as low-priority leads after submission rather than losing them.

Tips

  • Answer the webhook quickly (200 first, then process) so Typeform doesn’t retry.
  • Use test addresses when testing the form.

Official docs: Typeform Developers (Webhooks). See also: B2B lead qualification.