Automate Typeform lead intake to HubSpot with Make.com, then notify Slack. You will learn trigger setup, mapping, upsert rules, and alerts to prevent duplicates.
Introduction
If you use Typeform to capture leads, the painful part starts after the submit button. Someone has to copy answers into HubSpot, create or update the contact, then message Slack so sales sees it immediately. Do that manually during a busy campaign and you will miss leads, create duplicates, and drown your team in noisy notifications.
This Cross-Platform Automation (XPA) fixes that by sending each Typeform submission into HubSpot and then notifying Slack using Make.com. You will build a flow that validates key fields, upserts contacts safely, and alerts the right channel only when the submission is usable.
By the end, you will know how to connect Typeform to HubSpot and Slack in Make.com, including the dedupe and error handling pieces that make it production-grade.
What You'll Need
- Typeform: your form, plus access to the payload you receive for submissions (webhook or Make.com integration output).
- HubSpot CRM: permissions to create and update contacts, and the custom properties you want to store Typeform answers in.
- Slack: permission to post messages to a channel.
- Make.com: create a scenario and run tests, recommended paid tier for production reliability.
Decisions you must make upfront:
- Which HubSpot property is your unique upsert key (most teams use email).
- Which Typeform answers map to HubSpot properties, and which ones you will store as custom properties.
How It Works (The Logic)
When a new Typeform submission comes in, Make.com receives the payload as the trigger. It then normalizes and validates the data, upserts (create or update) the HubSpot contact using a deterministic key, and posts a Slack notification with the lead details.
Finally, if anything fails, Make.com routes the error to a dedicated path that posts to an error Slack channel with enough context to fix the issue quickly.
Step-by-Step Setup
1) Create a Make.com scenario
- In Make.com, create a new scenario.
- Name it:
Typeform → HubSpot upsert → Slack notify. - Leave it off until you finish the mapping steps.
2) Add the Typeform trigger
- Add the Typeform trigger module to start the scenario on a new submission.
- Select your specific form.
- Run a test submission to capture a real payload so you can map fields correctly.
Gotcha: test submissions often omit optional answers. Use at least one test where the fields you care about (name, email, company, whatever drives your routing) are actually present.
3) Add a validation step (block bad leads early)
- Add a filter or conditional step after the trigger.
- Require that email is present and not empty.
Routing logic:
- If email is missing: skip HubSpot entirely, and send a Slack message to an “attention required” channel or your main lead channel with “email missing”.
- If email is present: continue to dedupe and upsert.
4) Implement dedupe using Typeform response id
To prevent duplicates from retries and to avoid spamming Slack, dedupe on the Typeform submission identifier.
- Identify the canonical identifier in the Typeform payload, typically response id.
- Add a step that checks whether this
response_idhas been processed. - If processed, stop the scenario run.
- If not processed, continue.
Common implementation options:
- A lightweight Google Sheets or Airtable table keyed by
response_id. - A Make.com data store table keyed by
response_id.
Gotcha: mark the response_id as processed only after the HubSpot upsert succeeds, not before.
5) Upsert the contact in HubSpot
- Add the HubSpot module for creating or updating contacts (upsert).
- Set the upsert key to email.
- Map fields from the Typeform payload:
- Typeform
email→ HubSpotemail - Typeform
first name→ HubSpotfirstname - Typeform
last name→ HubSpotlastname - Typeform
phone→ HubSpotphone - Typeform
company→ HubSpotcompany - Any additional answers → map to custom properties you created in HubSpot
- Typeform
Also map metadata you will want for reporting and follow-up:
- Typeform form id →
last_typeform_form(custom property) - Typeform submitted at →
last_typeform_submission(custom property, date/time format aligned with HubSpot)
Gotcha: date formats. If HubSpot expects ISO date-time and you send a raw string, you will get silent mismatches or validation errors.
6) Post the Slack notification
- Add a Slack module to send a message.
- Choose the channel, for example
#leads-notifications. - Build a message that sales can act on immediately:
- Lead name
- Company
- Form id or form name
- Submission timestamp
- HubSpot contact identifier if the module output includes it
If your Make.com Slack module supports Block Kit, use it. If not, a structured plain-text message is still fine as long as the labels are consistent.
7) Add a dedicated error path
Production workflows need a place for failed runs.
- Configure an error route in the scenario.
- Send an alert to a separate Slack channel, for example
#integration-errors. - Include:
- Typeform
response_id - Which step failed (HubSpot upsert, validation, Slack send)
- The raw error message from Make.com (as much as the module provides)
- Typeform
Optional but useful:
- Write the failed payload into a dead-letter store (Google Sheets or Airtable) so you can reprocess later.
8) Test three scenarios before you go live
Run these tests in order:
- Full lead data (all key fields present)
- Missing optional fields (should still upsert and notify correctly)
- Missing email (should not upsert, should notify the “missing email” path)
After each test, confirm:
- HubSpot contact created or updated as expected
- Slack message sent once per submission
- Error route not triggered for successful cases
9) Enable the scenario
When the tests look good:
- Turn the scenario on.
- Watch scenario run history for the first day.
- Confirm your dedupe store (Sheets/Airtable) is being written as expected.
Real-World Business Scenario
A B2B training provider uses Typeform to capture course interest forms. Before the automation, their team manually created HubSpot contacts and posted Slack alerts, then chased missing follow-ups when the process broke under load.
With this Make.com setup, every Typeform submission upserts the HubSpot contact by email, then posts a Slack message to #leads-notifications with the lead details and submission timestamp. The team reduced duplicate contacts because the upsert is deterministic, and reduced Slack noise because dedupe runs on the Typeform response id.
Common Variations
-
Only notify sales for high-intent answers
- Add a filter before Slack send, for example
lead_type = Enterprise.
- Add a filter before Slack send, for example
-
Route different forms to different Slack channels
- Branch on Typeform
form idand notify#leads-inboundvs#leads-partners.
- Branch on Typeform
-
Create a follow-up task in ClickUp or Asana
- After the HubSpot upsert, add a module to create a task assigned to the right owner, then include the HubSpot link in Slack.
Related reading
No related posts found yet for this exact Typeform → HubSpot → Slack + Make.com pattern.
What You Built, and What to Do Next
You built an XPA that connects Typeform to HubSpot and Slack using Make.com, with two production essentials: deterministic upsert logic and dedupe that prevents duplicates during retries.
If you want help translating your exact Typeform fields into HubSpot properties and tuning the Slack notifications so sales actually uses them, Olmec Dynamics builds these integrations end-to-end. Start with how we think about Cross-Platform Automation (XPA), then we can map your payload and wire the scenario properly for your team.