Vet Typeform leads with ZeroBounce before they hit HubSpot

Every new Typeform response gets its email checked. Verified leads sync to HubSpot, suspicious ones go to a Slack triage channel.

Deterministic Code
TypeformZeroBounceHubSpotSlackSalesMarketingLead EnrichmentData SyncNotifications & Alerts
PromptCreate

Build a code workflow that gates Typeform lead submissions through ZeroBounce email validation before they ever reach HubSpot. This is a deterministic pipeline with discrete nodes, so a code workflow is the right fit.

Trigger: an incoming webhook from Typeform. The form is our demo request form, and Typeform's outgoing webhook delivers the full form response payload. The submitter's email lives inside form_response.answers, alongside the other form fields and form_response.form_id.

Step 1. Parse the webhook payload. Pull out the submitter's email address, the other form answers (first name, last name, company, phone if present), and the form_id.

Step 2. Call ZeroBounce Validate Email on that address. The response returns a status field that will be one of valid, invalid, catch-all, unknown, spamtrap, abuse, or do_not_mail, plus a sub_status field with more detail.

Step 3. Branch on status. If status is valid, send the lead to HubSpot. If status is catch-all, make a second ZeroBounce call to AI Email Scoring on the same address; if the returned score is 8 or higher, send the lead to HubSpot, otherwise treat it as bounced. If status is invalid, spamtrap, abuse, do_not_mail, or unknown, treat it as bounced.

Good path. Call HubSpot Batch Upsert Contacts with email as the unique property. Map the form answers onto standard contact properties (firstname, lastname, company, phone) and set lead_source = "typeform" so we can attribute the contact later.

Bounced path. Call Slack Send a Message to a #leads-bounced channel with a short summary: the submitter's email, the ZeroBounce status, the sub_status, the AI score if one was fetched, and the Typeform form_id. Marketing ops will use this channel to investigate suspicious submissions.

Make the Slack channel name, the lead_source value, the catch-all score threshold, and the HubSpot property mapping easy to edit later, so I can reuse this same flow on other Typeform forms without rewriting nodes.

What does this prompt do?

  • Catches each new Typeform submission in real time and checks the submitter's email with ZeroBounce.
  • Sends only verified leads into HubSpot as new or updated contacts, tagged with the source form.
  • Runs a second quality score on catch-all addresses so only high-confidence catch-alls reach the CRM.
  • Drops bad, abusive, or low-scoring submissions into a Slack triage channel for your marketing ops team.

What do I need to use this?

  • A Typeform account with the form already configured to send outgoing webhooks on submission.
  • A ZeroBounce account with credits for email validation and AI email scoring.
  • A HubSpot account where new contacts should land.
  • A Slack workspace and a channel for bounced or suspicious leads, for example #leads-bounced.

How can I customize it?

  • Point the workflow at any Typeform that collects an email, not just a demo request form.
  • Change which form answers map to which HubSpot properties, including the lead source or campaign tag.
  • Tune the catch-all score threshold, or change which result statuses count as bounced.
  • Send the Slack alert to a different channel and add extra form fields to the message.

FAQs

What is a catch-all email and why does it get a second check?
A catch-all domain accepts mail for any address at that domain, so a basic validation cannot fully confirm the inbox is real. We run an extra quality score on those addresses and only forward the strong ones to HubSpot.
Can I use this with a form other than a demo request?
Yes. Any Typeform that collects an email can plug into this flow, including waitlists, contact forms, content downloads, and event signups.
Will this overwrite existing HubSpot contacts?
No. The workflow uses HubSpot's batch upsert, which updates an existing contact when the email already exists and creates a new one when it does not.
What happens to a lead that gets flagged as bad?
It never reaches HubSpot. Instead, a Slack message lands in your triage channel with the email, the reason it was flagged, and the form it came from, so your team can review or reply manually.
How fast does it run?
As soon as Typeform delivers the response webhook, usually within a second or two of the form being submitted.

Related templates

Client-by-client cold email pipeline review for agencies

Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.

Instantly
HubSpot
Slack Bot
App
Partner tier review board for quarterly promotion calls

Work every partner tier decision from one board, with the revenue and commission numbers, clear promotion thresholds, and AI review briefs.

Introw
HubSpot
Slack
App
Reconcile partner commissions between HubSpot and Introw

Open one board at month end to find every closed deal missing a commission, every commission with no deal behind it, and every amount that does not add up.

Introw
HubSpot
Slack
App
One control room for every Instantly sending mailbox

See warmup status, daily send volume, and bounce risk for every sending account in one grid, with the riskiest mailboxes floating to the top.

Instantly
Slack
App
Hiring signal board for your customers and open pipeline

Open one board each morning to see which of your accounts are hiring, what they are building, and where your product fits the roles they just opened.

JobsPipe
HubSpot
App
Partner payout approval queue with Xero bill handoff

Review Introw partner payouts line by line, approve them from one board, raise the matching bill in Xero, and post every approval to Slack.

Introw
Xero
Slack
App

Stop letting bad emails pollute your HubSpot.

Connect Typeform, ZeroBounce, HubSpot, and Slack once, and every new lead gets vetted before it touches your CRM.