Automatically send Jotform submissions to HubSpot, prevent duplicates, log submissions to Google Sheets, and notify Slack using Make.com for reliable lead capture.
Introduction
You still copy Jotform responses into HubSpot by hand, or your CRM fills up with duplicate contacts from slightly different emails. That costs time and damages sales follow-up. The manual flow is: someone submits a form, a teammate creates a contact in HubSpot, duplicates appear, and account owners miss handoff context.
This post shows an intermediate Make.com scenario that receives Jotform submissions, searches HubSpot for an existing contact by email, updates the contact if one exists, or creates a new contact if not. The scenario also writes an audit row to Google Sheets and posts a Slack alert for qualified leads. By the end you will have a repeatable build that prevents duplicates and gives sales the context they need without manual entry.
What you will know by the end: the exact Make.com modules to use, the field mappings, the de-duplication check, and the logging and notification branches to keep the workflow dependable.
What You'll Need
- A Jotform account with the target form and webhook access (Jotform paid plans are required for some webhook features)
- A HubSpot account with permission to search, create, and update contacts, and access to API via Make.com
- A Make.com account with Jotform and HubSpot integrations
- A Google Sheets file for an audit log (create a sheet with columns: submission_id, email, hubspot_id, action, timestamp)
- A Slack workspace and channel where sales/ops receive qualified lead alerts
- Make.com scenario permissions and OAuth/API connections for each tool
Note: HubSpot upsert via email typically requires a HubSpot paid/contact-capable tier for API usage at scale. Confirm your HubSpot API limits before heavy traffic.
How It Works (The Logic)
Trigger (Jotform submission) → Search HubSpot by email → If found, update existing contact; if not, create contact → Write an audit row to Google Sheets → If submission matches qualification rules, post Slack alert.
This uses a search-first, upsert-later pattern to avoid duplicate contacts and gives you a persistent audit trail for compliance and troubleshooting.
Step-by-Step Setup
- Prepare the Jotform form and required fields
- Make the email field required. The dedupe logic depends on a valid email.
- Keep question labels simple: first_name, last_name, email, company, phone, interest_level, message.
- Add hidden fields for campaign or source if you track attribution.
Gotcha: optional or free-text email fields break deduplication. Require email to make the flow reliable.
- Create the Google Sheet audit log
- Create a sheet with columns: submission_id, submitted_at, email, hubspot_id, action (created/updated), note, run_id.
- Share the sheet with the Make.com connected account.
This sheet prevents repeated processing and helps trace what the scenario did for each submission.
- Start a new Scenario in Make.com and add the Jotform trigger
- Module: Jotform, "Watch for New Submissions". Select your form.
- For testing, submit a few sample entries and fetch the sample payload in Make.com.
- Add a Google Sheets lookup to check if the submission was processed
- Module: Google Sheets, "Search rows". Look up submission_id or a unique hidden field.
- If the submission_id exists, stop the scenario to ensure idempotency. If not found, continue.
This guards against webhook retries or accidental replays.
- Add HubSpot: Search contacts by email
- Module: HubSpot, "Search contacts" (or use the Contacts search endpoint). Pass the email from Jotform.
- Configure the search to return contact ID and core fields: firstname, lastname, phone, company, lifecycle stage.
Gotcha: HubSpot search endpoints may return multiple matches. Prefer exact email match. If the connector returns multiple records, pick the most recently modified contact or the one flagged as active depending on your CRM practice.
- Add a router to branch on search results
- Route A: Contact found (search returns at least one contact ID)
- Route B: No contact found
This explicit branching clarifies updates vs creates and keeps logs consistent.
- Route A: Update the existing contact
- Module: HubSpot, "Update contact". Use the contact ID returned by the search.
- Map fields carefully. Only overwrite HubSpot fields when the incoming Jotform value is non-empty.
- Jotform first_name → HubSpot firstname (map only if not blank)
- Jotform last_name → HubSpot lastname
- Jotform phone → HubSpot phone number
- Hidden fields or UTM → HubSpot custom properties (source, campaign)
- Optionally set lifecycle stage to Lead if the interest_level meets your rule set.
Tip: Use conditional mapping functions in Make.com to avoid erasing richer CRM data with empty form fields.
- Route B: Create a new HubSpot contact
- Module: HubSpot, "Create contact". Map the same fields as above.
- Set a property such as "Original source" to "Jotform" and preserve any hidden tracking fields you collected.
- If your process requires a deal creation for high-value submissions, add a Create Deal step here and associate it with the new contact.
- Write an audit row to Google Sheets (both routes)
- Module: Google Sheets, "Add a row". Record: submission_id, timestamp, email, hubspot_id (from update or create), action (updated or created), and a short note.
This provides a traceable record you can use for manual reconciliation or billing queries.
- Add a qualification filter then Slack notification
- Add a filter: continue only if interest_level is "High" or if the message contains keywords like "pricing" or "RFP".
- Module: Slack, "Post a message" into your sales channel. Keep messages short and include the HubSpot contact link.
Example message:
New qualified lead from Jotform
Name: {{first_name}} {{last_name}}
Email: {{email}}
Company: {{company}}
Interest: {{interest_level}}
HubSpot: <https://app.hubspot.com/contacts/{{hubspot_portal_id}}/contact/{{hubspot_id}}|Open contact>
Gotcha: construct HubSpot URLs using your portal ID and the contact ID. Test the link pattern before rolling out.
- Add error handling and retries
- Configure Make.com error handlers for transient HubSpot API failures. On permanent failures, append an error row to Google Sheets and notify an ops Slack channel with the submission_id and error text.
- Test end-to-end and deploy
- Submit test forms for: a new email to create a contact, a second submission with the same email to update, and a high-interest submission to trigger Slack.
- Verify Google Sheets rows for each run, confirm HubSpot contact updates do not overwrite non-empty fields with blanks, and ensure Slack shows working HubSpot links.
Real-World Business Scenario
A consultancy that used to manually enter inbound requests replaced that work with this exact flow. Every Jotform inquiry now appears in HubSpot within seconds, duplicates are avoided by email search, and high-interest leads hit Slack for immediate outreach. The team reduced daily CRM admin by 45 minutes and improved response time to warm leads.
If your intake includes richer data enrichment needs later, compare this pattern with Pipedrive enrichment and Clearbit approaches in our post on enriching Pipedrive leads: How to Enrich Pipedrive Leads with Clearbit Using Make.com.
Common Variations
- Add a CRM enrichment step: call a company enrichment API after create to populate company size and industry before notifying sales.
- Create a Deal for new high-value leads: add a HubSpot deal creation step in Route B and associate it with the contact.
- Use a shared inbox fallback: if the email is missing or invalid, add the submission to a Slack queue for manual review rather than creating a contact.
Keeping your lead intake reliable
You now have a practical Make.com pattern to connect Jotform to HubSpot with email deduplication, audit logging in Google Sheets, and Slack alerts for qualified leads. This reduces manual entry and cleanup while giving sales the context they need.
Olmec Dynamics builds these exact automations for businesses. If you want help implementing or extending this flow across Jotform, HubSpot, Google Sheets, and Slack, you can see what we do at https://olmecdynamics.com.