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
blockverdicts as low-priority leads after submission rather than losing them.
Tips
- Answer the webhook quickly (
200first, then process) so Typeform doesn’t retry. - Use test addresses when testing the form.
Official docs: Typeform Developers (Webhooks). See also: B2B lead qualification.