Jotform to Google Sheets, leads routed to the right rep
New leads should feel exciting. Instead, they turn into a messy thread of “Did anyone respond?” and “Who owns this one?” in under a day.
If you’re a marketing manager trying to prove pipeline impact, you feel the pain first. A sales ops lead gets dragged into rule debates. And a small business owner just wants someone to call the lead today. This Jotform lead routing automation fixes the handoff and gets you back to fast follow-up.
You’ll see how this n8n workflow qualifies each Jotform submission with AI, assigns it to the right rep, logs everything in Google Sheets, and notifies people with the context they need to act.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Jotform to Google Sheets, leads routed to the right rep
flowchart LR
subgraph sg0["Jotform Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Lead Data", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "AI Lead Scoring (BANT)", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Parse Lead Score", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Intelligent Routing Logic"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Create CRM Contact"]
n5@{ icon: "mdi:message-outline", form: "rounded", label: "Notify Sales Rep", pos: "b", h: 48 }
n6@{ icon: "mdi:message-outline", form: "rounded", label: "Send Lead Confirmation", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Log to Tracking Sheet", pos: "b", h: 48 }
n8["<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"]
n9@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n8 --> n0
n2 --> n3
n0 --> n1
n9 -.-> n1
n1 --> n2
n3 --> n4
n3 --> n5
n3 --> n6
n3 --> 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 n8 trigger
class n1 ai
class n9 aiModel
class n7 database
class n4 api
class n3 code
classDef customIcon fill:none,stroke:none
class n3,n4,n8 customIcon
The Problem: Leads Get Lost in the Handoff
Jotform makes it easy to collect inquiries. The hard part starts right after the submit button. Someone has to read the form, decide if it’s any good, figure out which rep should take it, and then make sure the rep actually follows up. And when you’re busy, that process stretches from minutes into hours, sometimes days. Meanwhile the lead is still shopping, and the first vendor to respond usually “wins” the conversation (even if they’re not the best fit).
It adds up fast. Here’s where it breaks down in real life.
- Leads sit in an inbox until someone notices, which quietly kills response time.
- Routing turns into tribal knowledge, so one person becomes the bottleneck.
- Reps get partial context, then ask the same questions again and frustrate the prospect.
- Tracking is inconsistent, so you can’t trust reports or coach the team properly.
The Solution: AI Qualification + Automatic Rep Assignment
This workflow turns every Jotform submission into a qualified, routed, and logged sales-ready lead. It starts the moment a form is submitted, maps the raw answers into clean fields, then sends the full lead profile to an AI agent powered by an OpenAI chat model. The AI scores the lead using BANT (Budget, Authority, Need, Timeline), so you get a practical 0–100 score plus short reasoning you can actually use. Next, n8n assigns the lead to the right sales rep using your rules (territory, industry, workload, deal size), then fires off notifications with talking points so the rep can respond immediately. Finally, the workflow appends a complete record to Google Sheets, giving you an audit trail for coaching, attribution, and SLA monitoring.
The flow is simple to live with day-to-day. Jotform triggers the process, OpenAI generates the qualification details, and your routing logic decides ownership. Google Sheets becomes the source of truth, while Gmail and Slack (optional) make sure nobody misses the moment a good lead arrives.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 20 inbound leads a week. Manually, it’s common to spend about 10 minutes per lead to read the form, judge quality, pick a rep, send a message, and update a sheet or CRM. That’s around 3 hours of admin work, plus delays when the “router” is in meetings. With this workflow, the only human time is reviewing the rep notification and taking action. The routing and logging happens automatically, and the lead typically gets touched in about 5 minutes instead of “later today.”
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Jotform to capture lead submissions.
- Google Sheets to log leads and track outcomes.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll paste credentials, map a few fields, and edit routing rules in one code node.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A Jotform submission kicks it off. The trigger grabs the responses the moment someone fills out your lead intake form, including budget range, timeline, industry, and pain points.
The workflow cleans up the lead profile. n8n maps fields into a consistent structure so downstream logic doesn’t break when someone changes wording or form layout. This is also where you can add hidden fields like UTMs later if you want stronger attribution.
AI qualifies the lead with BANT. An AI agent (using the OpenAI chat model) reads the responses and outputs a score plus short reasoning and talking points. Honestly, this is the part that stops reps from asking “Is this even real?” before they follow up.
Routing, notifications, and tracking happen in parallel. Your routing logic assigns a rep, then n8n creates the CRM record via HTTP request, sends Gmail alerts (rep + lead confirmation), and appends a single tracking row to Google Sheets with timestamps and assignment details.
You can easily modify the routing rules to match your territories or round-robin preferences 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 incoming lead capture so the workflow starts when a Jotform submission is received.
- Add the Jotform Lead Intake node as your trigger.
- Set Form to
[YOUR_ID]so it listens to the correct Jotform form. - Credential Required: Connect your jotFormApi credentials.
Step 2: Connect Jotform Lead Intake and Map Lead Fields
Normalize the incoming form payload into fields used throughout the workflow.
- Add the Map Lead Fields node and connect it after Jotform Lead Intake.
- In Map Lead Fields, set the assignments to the following expressions: companyName →
{{ $json.rawRequest['q3_companyName'] }}, contactName →{{ $json.rawRequest['q4_contactName'] }}, email →{{ $json.rawRequest['q5_email'] }}, phone →{{ $json.rawRequest['q6_phone'] }}. - Continue mapping: companySize →
{{ $json.rawRequest['q7_companySize'] }}, budgetRange →{{ $json.rawRequest['q8_budgetRange'] }}, timeline →{{ $json.rawRequest['q9_timeline'] }}, industry →{{ $json.rawRequest['q10_industry'] }}. - Finalize mapping: currentSolution →
{{ $json.rawRequest['q11_currentSolution'] }}, painPoints →{{ $json.rawRequest['q12_painPoints'] }}, submissionId →{{ $json.submissionID }}, submittedAt →{{ $now.toISO() }}.
Step 3: Set Up AI Qualification Scoring
Use AI to score the lead with a BANT-based qualification analysis.
- Add AI Qualification Scoring and connect it after Map Lead Fields.
- Set Text to the full prompt expression:
=Analyze this lead using the BANT framework (Budget, Authority, Need, Timeline) and provide comprehensive qualification: LEAD INFORMATION: Company: {{ $json.companyName }} Contact: {{ $json.contactName }} Email: {{ $json.email }} Phone: {{ $json.phone }} Company Size: {{ $json.companySize }} Budget Range: {{ $json.budgetRange }} Timeline: {{ $json.timeline }} Industry: {{ $json.industry }} Current Solution: {{ $json.currentSolution }} Pain Points: {{ $json.painPoints }} Provide analysis in JSON format: { "leadScore": 0-100, "qualificationTier": "Hot/Warm/Cold/Unqualified", "bant": { "budget": { "score": 0-25, "assessment": "description", "hasBudget": true/false }, "authority": { "score": 0-25, "assessment": "description", "decisionMaker": true/false }, "need": { "score": 0-25, "assessment": "description", "painSeverity": "low/medium/high/critical" }, "timeline": { "score": 0-25, "assessment": "description", "urgency": "immediate/1-3months/3-6months/6+months" } }, "keyInsights": ["insight1", "insight2"], "redFlags": ["flag1", "flag2"], "opportunitySize": "small/medium/large/enterprise", "competitorVulnerability": "low/medium/high", "recommendedAction": "immediate call/email nurture/demo/disqualify", "idealSalesRep": "senior/mid-level/junior/SDR", "conversionProbability": "0-100%", "estimatedDealValue": "dollar amount or range", "nextSteps": ["step1", "step2", "step3"], "talkingPoints": ["point1", "point2", "point3"] }. - Ensure OpenAI Chat Engine is connected as the language model for AI Qualification Scoring.
- Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine (not in the agent node).
- Add Extract Scoring Result after AI Qualification Scoring and set Mode to
expressionDatato normalize the AI JSON output.
Step 4: Configure Assign Sales Representative
Route qualified leads to the correct sales rep based on score, industry, and workload.
- Add Assign Sales Representative and connect it after Extract Scoring Result.
- Set JavaScript Code to the provided script (including your rep details and emails) exactly as shown in the workflow:
const salesTeam = { ... } ... return { json: output };. - Confirm the code references Map Lead Fields for industry and company size using
$('Map Lead Fields').first().json.industryand$('Map Lead Fields').first().json.companySize.
Step 5: Configure Output/Action Nodes
Create CRM records, email the assigned rep, acknowledge the lead, and log the lead to Sheets in parallel.
- Connect Assign Sales Representative to its parallel branches. Assign Sales Representative outputs to both Create CRM Entry and Email Rep Alert and Send Lead Acknowledgment and Append Tracking Record in parallel.
- In Create CRM Entry, set URL to
https://api.hubapi.com/crm/v3/objects/contacts, Method toPOST, Authentication topredefinedCredentialType, and Credential Type tohubspotApi. - Credential Required: Connect your hubspotApi credentials in Create CRM Entry (this node requires credentials but none are configured yet).
- In Email Rep Alert, set Send To to
{{ $json.assignedRepEmail }}, Subject to=🔥 {{ $json.qualificationTier }} Lead Assigned: {{ $json.companyName }} (Score: {{ $json.leadScore }}), and Message to the provided HTML body expression. - Credential Required: Connect your gmailOAuth2 credentials in Email Rep Alert.
- In Send Lead Acknowledgment, set Send To to
{{ $json.email }}, Subject to=Thank You for Your Interest!, and Message to the provided HTML body expression. - Credential Required: Connect your gmailOAuth2 credentials in Send Lead Acknowledgment.
- In Append Tracking Record, set Operation to
appendOrUpdate, Document ID to[YOUR_ID], and Sheet Name toLead_Tracking. - Map the key columns in Append Tracking Record using expressions like email →
{{ $json.email }}, leadScore →{{ $json.leadScore }}, repEmail →{{ $json.assignedRepEmail }}, qualificationTier →{{ $json.qualificationTier }}, and keep the full mapping as defined in the workflow. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Tracking Record.
Step 6: Test and Activate Your Workflow
Verify each branch works correctly before enabling the workflow for production.
- Use Jotform Lead Intake to submit a test entry, then click Execute Workflow to run the full flow.
- Confirm the AI output is parsed in Extract Scoring Result and that Assign Sales Representative outputs assignedRepName and assignedRepEmail.
- Verify all four parallel actions complete: a CRM contact is created by Create CRM Entry, the rep receives Email Rep Alert, the lead receives Send Lead Acknowledgment, and a new row appears in Append Tracking Record.
- When satisfied, toggle the workflow to Active so it runs automatically for new Jotform submissions.
Common Gotchas
- Jotform credentials can expire or need specific permissions. If things break, check your n8n credentials list and Jotform API access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- OpenAI prompts that ship “generic” will stay generic. Add your brand voice and qualification rules early or you’ll be rewriting rep briefs forever.
Frequently Asked Questions
About an hour if your form and Google Sheet already exist.
No, but you will edit one routing section that’s written as simple JavaScript. If you can follow a clear example and change names or territories, you’ll be fine.
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 OpenAI API costs of about $0.20-0.40 per lead.
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. You can change the hot/warm/cold thresholds in the “Extract Scoring Result” mapping and then update the “Assign Sales Representative” code to route by region, industry, or workload. Common tweaks include sending hot leads (75+) to senior reps, using round-robin inside a territory, and adding a special path for enterprise deal sizes.
Usually it’s expired credentials or the Jotform account doesn’t have API access enabled. Reconnect Jotform in n8n, then submit a fresh test lead to confirm the trigger fires. If it still fails, check if the form was duplicated or its field IDs changed, because the mapping step can break when question keys are renamed.
On n8n Cloud, it depends on your plan’s monthly executions, and high-volume teams usually upgrade quickly. If you self-host, there’s no fixed execution limit, so capacity mostly comes down to your server and API rate limits. Practically, this workflow can process leads continuously, one submission at a time, as they come in.
Often, yes, especially if you want AI scoring plus more nuanced routing logic than “if field X, then do Y.” n8n makes it easier to keep the whole decision process in one place, and you can self-host to avoid per-task pricing when volume grows. Zapier or Make can still be a good fit for very simple two-step alerts. The difference shows up once you add tiers, SLAs, and CRM mapping. Talk to an automation expert if you want help choosing.
Once this is live, leads stop depending on someone remembering to do the handoff. The workflow handles the repetitive parts, and your team gets to focus on the conversations that close.
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.