Jotform to HubSpot, follow ups never slip
Leads come in, and then… nothing. A form submission sits in someone’s inbox, the company never gets created in HubSpot, and the “quick follow-up” turns into next week’s problem.
Marketing managers feel it when campaign responses go cold. Sales ops gets pulled into cleanup. And the founder ends up asking the same question again: “Did anyone follow up?” This Jotform HubSpot automation fixes that loop.
This workflow takes every Jotform submission, turns it into a clean HubSpot company update plus a real assigned task, then logs the whole trail in Google Sheets so you can prove what happened.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Jotform to HubSpot, follow ups never slip
flowchart LR
subgraph sg0["JotForm Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/jotform.dark.svg' width='40' height='40' /></div><br/>JotForm Trigger"]
n1@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Create HubSpot Task"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/hubspot.svg' width='40' height='40' /></div><br/>Create a company1"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Formating Data"]
n5@{ icon: "mdi:database", form: "rounded", label: "Storel Logs", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Set Company Domain"]
n7@{ icon: "mdi:cog", form: "rounded", label: "Wait10", pos: "b", h: 48 }
n1 --> n2
n7 --> n6
n4 --> n1
n0 --> n3
n3 --> n4
n6 --> n5
n2 --> n7
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n5 database
class n2,n6 api
class n4 code
classDef customIcon fill:none,stroke:none
class n0,n2,n3,n4,n6 customIcon
The Problem: Form Leads Get Lost Between Tools
Jotform is great at capturing intent. The messy part is what happens after. Someone has to read the submission, create or find the company in HubSpot, paste in the domain, and then remember to create a follow-up task with enough context for a rep to act. On busy days, that “someone” is three different people. Leads get duplicated, tasks get skipped, and you can’t confidently answer “What happened to this inquiry?” without digging through threads and timestamps.
The friction compounds. Here’s where it breaks down most often:
- Company records are created inconsistently, so domains, LinkedIn URLs, and budgets end up scattered or missing.
- Follow-up tasks are made “later,” which means the lead is already cooling off by the time someone reaches out.
- Ownership is unclear, so two people reply or nobody does, and both outcomes look unprofessional.
- There’s no audit trail, so debugging a missed lead turns into manual detective work.
The Solution: Jotform → HubSpot Company + Task, Logged in Sheets
This workflow turns every Jotform submission into a structured, trackable CRM action. It starts the moment a new form entry hits your Jotform webhook in n8n. From there, it makes sure the HubSpot company exists (creating it if needed, updating it if it’s already there), then formats the raw submission into consistent fields you can trust. Next, it creates a follow-up task in HubSpot through the Tasks API, with a proper subject and body that includes the key details like budget, domain, and the original question. After that, it updates the company record with the submitted domain so future enrichment and routing work better. Finally, it writes a complete log to Google Sheets so you can see what was processed, what HubSpot returned, and where things failed if something goes sideways.
The workflow starts with a Jotform trigger and immediately touches HubSpot to create or update the company. Then it uses a short delay plus an HTTP request to create the task cleanly, updates the domain in a second pass, and stores the full story in Google Sheets.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 20 inbound inquiries a week from a Jotform “Request a quote” page. Manually, you might spend about 5 minutes creating/updating the HubSpot company, another 3 minutes writing a decent follow-up task, and a minute logging it somewhere for tracking, which is roughly 3 hours a week. With this workflow, the “human time” is basically the form submission itself (a few seconds), plus a quick spot-check in HubSpot. The automation does the rest while you keep moving.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Jotform to capture submissions and send webhooks
- HubSpot to create companies and follow-up tasks
- HubSpot private app token (get it from HubSpot Settings → Integrations → Private Apps)
- Google Sheets for logging, audits, and debugging
Skill level: Intermediate. You’ll paste API credentials, map a few fields, and confirm HubSpot scopes.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new Jotform submission hits your webhook. The workflow starts instantly when someone submits your form, pulling in fields like name, email, LinkedIn profile, company name, marketing budget, domain, and the question they typed.
HubSpot gets a company create-or-update. n8n checks the incoming details and ensures there’s a company record ready in HubSpot, so the rest of the workflow has something consistent to attach to.
The submission is cleaned and packaged. A formatting step standardizes messy inputs (domains, URLs, empty fields) and generates task details like title, due time, and an assigned owner so reps get something actionable.
Tasks and domain updates are pushed via HTTP requests. The workflow posts a task to HubSpot’s Tasks API, waits briefly to avoid rate limits, then updates the company’s domain in a second call. After that, Google Sheets gets a log row with the submission and API responses.
You can easily modify owner assignment to match territories or round-robin, based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the JotForm Trigger
Set up the intake trigger so each JotForm submission starts the workflow.
- Add the JotForm Intake Trigger node to your workflow.
- Set Form to
252808415357461. - Credential Required: Connect your jotFormApi credentials.
- Save the node and copy the webhook URL into your JotForm form settings.
Step 2: Connect HubSpot Company Creation
Create a HubSpot company record as soon as a JotForm submission arrives.
- Add the Generate Company Record node after JotForm Intake Trigger.
- Set Resource to
company. - Set Name to
={{ $json.CompanyName }}. - Credential Required: Connect your hubspotApi credentials.
Step 3: Set Up Submission Processing
Format the submission into a consistent structure and introduce an initial delay before task creation.
- Add the Format Submission Data node after Generate Company Record.
- Paste the full JavaScript from the workflow into Code, including owner assignment and timestamp generation.
- Replace
[YOUR_ID]values in theownerAssignmentsmap with valid HubSpot owner IDs. - Add the Delay Execution node after Format Submission Data.
- Set Amount to
10(seconds).
[YOUR_ID] placeholders in Format Submission Data, tasks will be assigned to invalid owners.Step 4: Configure HubSpot Task Creation, Company Update, and Logging
Create a task in HubSpot, update the company domain, and log the results to Google Sheets in sequence.
- Add the Post HubSpot Task node after Delay Execution.
- Set URL to
https://api.hubapi.com/crm/v3/objects/tasksand Method toPOST. - Set JSON Body to the provided expression, including
{{ $('Format Submission Data').item.json.hubspot_task_title || 'Jotform Marketing Query' }}and the full multi-line task body. - In Header Parameters, set Authorization to
Bearer [CONFIGURE_YOUR_TOKEN]and Content-Type toapplication/json. - Add the Delay Step Two node after Post HubSpot Task (leave default settings).
- Add the Update Company Domain node after Delay Step Two.
- Set URL to
=https://api.hubapi.com/crm/v3/objects/companies/{{ $('Format Submission Data').item.json.company_id }}and Method toPATCH. - Set JSON Body to
={ "properties": { "domain": "{{ $('Format Submission Data').item.json.domain}}" } }. - In Header Parameters, set Authorization to
Bearer [CONFIGURE_YOUR_TOKEN]and Content-Type toapplication/json. - Add the Log Results to Sheets node after Update Company Domain.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Operation to
appendOrUpdate. - Set Document to
[YOUR_ID]and Sheet to[YOUR_ID]. - In Columns, map company to
={{ $json.properties.name }}, domain to={{ $json.properties.domain }}, HubspotCompanyID to={{ $json.id }}, and Notes to=This was created at {{ $json.createdAt }} & was updated at {{ $json.updatedAt }}.
[CONFIGURE_YOUR_TOKEN] is not replaced.Step 5: Test and Activate Your Workflow
Run a full test to verify HubSpot creation, task generation, domain updates, and sheet logging.
- Click Execute Workflow and submit a test entry in your JotForm.
- Confirm Generate Company Record creates a company in HubSpot.
- Verify Post HubSpot Task creates a task linked to the company.
- Check that Update Company Domain updates the company’s domain property.
- Open your Google Sheet and confirm a new row is appended/updated by Log Results to Sheets.
- When successful, toggle the workflow to Active for production use.
Common Gotchas
- HubSpot credentials can expire or need specific permissions. If things break, check your Private App scopes (companies write and tasks write) in HubSpot first.
- If you’re using Wait nodes or external API calls, processing times vary. Bump up the wait duration if downstream HubSpot updates fail because an earlier response hasn’t landed yet.
- Jotform fields are easy to rename, which quietly breaks mapping. If task descriptions suddenly look blank, confirm the Jotform field IDs in the trigger payload and update your formatting step.
Frequently Asked Questions
About 30–60 minutes if your HubSpot token and Sheet are ready.
No. You’ll mostly map fields and paste credentials. The formatting step is already built, and you can adjust it with simple edits.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in HubSpot and Google Sheets usage (typically no extra cost beyond your existing plans).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but keep it simple at first. Add an If check right after “Format Submission Data” and only send items to “Post HubSpot Task” when a condition matches (for example, marketing budget is present, or the query contains a keyword). You can also swap the owner assignment logic in the formatting step if you want round-robin, territories, or “route by domain.” If you need tasks tied to contacts too, extend the HTTP payload to associate the task with a HubSpot Contact found by email.
Usually it’s an invalid or under-scoped private app token. Regenerate the token if needed, then confirm it includes permission to write companies and tasks. Rate limiting can also cause intermittent failures, so keep the Wait steps in place when volume spikes.
On a typical n8n Cloud plan, it can handle hundreds of submissions a day, and self-hosting scales based on your server.
Often, yes, if you care about control and traceability. This workflow uses direct HTTP calls to the HubSpot Tasks API, which means you’re not stuck waiting for a connector to support a field or paying extra for multi-step branching. You also get the option to self-host n8n, which is a big deal once form volume grows. Zapier and Make are still solid for quick, simple automations, but they can get expensive when every lead triggers several steps. If you’re torn, Talk to an automation expert and we’ll sanity-check the best approach for your setup.
You get clean HubSpot records, real follow-up tasks, and a Google Sheets trail you can trust. Set it up once, and missed handoffs stop being a weekly fire drill.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.