How to Connect Jotform to HubSpot, End to End
Connecting Jotform to HubSpot looks like a five-minute integration. It is, until contacts duplicate, properties do not populate, and deals end up in the wrong pipeline. Here is the full setup, including the three things that break silently.
- Use Jotform's native HubSpot integration (not Zapier) whenever possible. It is faster, free on paid Jotform plans, and does not add a third-party data processor.
- Map form fields to HubSpot contact properties by name during setup. Field label changes in Jotform break the mapping silently afterward.
- Enable deduplication by email so the same contact does not create duplicate records. Without it, every form submission creates a new contact.
- Test with a real submission before going live. The integration settings page says 'connected' even when the field mapping is wrong.
Jotform's native HubSpot integration is one of the better-built ones. You authenticate, pick a form, map fields, and submissions flow into HubSpot as contacts, deals, or tickets. For most lead capture and intake workflows, it works out of the box.
The problems start when the form changes, when the HubSpot property schema changes, or when you expect deduplication and get duplication instead. I spent five years inside Jotform, and the HubSpot integration was the second most common support escalations I saw (after Salesforce). Here is how to set it up so it actually works, and how to fix it when it does not.
Step 1: Authenticate HubSpot in Jotform
In Jotform, go to Settings then Integrations then HubSpot. Click Authenticate and log into your HubSpot account. Jotform requests access to contacts, deals, and tickets. Grant it. The OAuth token is stored in Jotform; it does not expire under normal use but can be revoked from HubSpot's app settings.
Step 2: Choose what gets created
Jotform can create one of three object types in HubSpot per submission:
- Contact: the most common. Each submission creates or updates a contact record.
- Deal: each submission creates a deal in a pipeline. Useful for sales lead forms where you want pipeline visibility from the first touch.
- Ticket: each submission creates a support ticket. Useful for request forms routed to a service team.
You can create a contact and a deal in the same integration setup by configuring two action blocks. The contact is created first, then the deal is associated with that contact.
Step 3: Map fields
This is where most setups go wrong. Jotform shows your form fields on the left and your HubSpot properties on the right. You match them by dragging: Jotform 'Email' to HubSpot 'Email', Jotform 'Company' to HubSpot 'Company', and so on.
Three things to watch for:
- Jotform maps by field label, not by internal ID. If you rename 'Email' to 'Email Address' in Jotform after setup, the mapping breaks. The integration still says 'connected' but submissions stop populating that field in HubSpot.
- HubSpot custom properties have to exist before you map to them. You cannot create a new HubSpot property from inside Jotform. Create the property in HubSpot first, then come back to Jotform to map it.
- Dropdown and radio button values must match exactly. If your Jotform dropdown says 'Enterprise' and your HubSpot property expects 'Ent', the value does not map. Case-sensitive.
Step 4: Enable deduplication
By default, every Jotform submission creates a new HubSpot contact. If the same person fills out your form twice, you get two contacts. This is the single most common complaint I hear about the Jotform-HubSpot integration.
The fix: in the integration settings, enable 'Check for existing contacts' and set the deduplication key to Email. When a submission comes in, HubSpot checks for an existing contact with the same email. If found, it updates the existing record instead of creating a new one.
Step 5: Configure deal creation (if applicable)
If you selected Deal as the action, you also need to pick a pipeline and a deal stage. Jotform sends the form data; HubSpot places the deal in the pipeline and stage you configured. You can map a Jotform field to the deal amount (useful for order forms) and to the deal name.
Common mistake: mapping the deal amount to a text field in Jotform instead of a number field. HubSpot expects a numeric value for deal amount. If Jotform sends '$500' (with the dollar sign), HubSpot rejects it and the deal amount is blank. Use Jotform's Form Calculation widget to compute a clean number.
The three silent breakages
1. Field label changes in Jotform
As covered above. The integration still shows as 'connected' but the data stops flowing. Lock your form field labels once the integration is live. If you must rename a field, re-map it in the integration settings immediately.
2. HubSpot property renamed or deleted
If someone on the HubSpot side renames or deletes a property that Jotform is mapping to, submissions fail for that property only. Other fields still populate. This makes it hard to notice. Check HubSpot's property change log if submissions start arriving with missing fields.
3. OAuth token revoked
If a HubSpot admin revokes Jotform's app access (under HubSpot Settings then Integrations then Connected Apps), Jotform silently stops sending data. There is no alert in Jotform. The integration status page may still show 'connected' because the token check is cached. Re-authenticate to fix it.
When to use Zapier instead
Use Zapier as the connector when you need:
- Conditional routing: send high-value leads to one pipeline and low-value to another, based on form answers.
- Multi-step logic: create a contact, then a deal, then a task, then send a Slack notification, all from one submission.
- Field transformation: format phone numbers, split full names into first/last, or convert currencies before writing to HubSpot.
The tradeoff is cost (Zapier tasks per submission) and compliance (Zapier becomes a data processor in your chain). For simple contact creation, the native integration is always the better choice.
Testing before going live
Before trusting the integration with real submissions, do this:
- Submit a test entry through the form with realistic data.
- Open HubSpot and verify the contact (or deal) was created with all mapped fields populated.
- Submit the same form again with the same email address. Verify the contact was updated, not duplicated (if deduplication is on).
- Rename a field in Jotform, submit again, and verify the renamed field stops populating in HubSpot. This teaches you what breakage looks like.
- Check the Jotform integration log (Settings then Integrations then HubSpot then View Logs) for errors.

