Jotform to Google Sheets, track every repair request
Maintenance requests have a way of disappearing. An email thread here, a voicemail there, then someone swears they “already told you” about the leak three days ago.
This Jotform Sheets automation hits Property Managers first, honestly. But Facilities teams and busy Operations leads feel it too when the same request gets handled twice, or not at all.
This workflow captures every request, uses AI to classify and prioritize it, emails the right vendor, and logs everything to Google Sheets so you always know what’s happening and what’s overdue.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Jotform to Google Sheets, track every repair request
flowchart LR
subgraph sg0["Form Intake 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/>Form Intake Trigger"]
n1["<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/>Normalize Request Payload"]
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Repair Assessment", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Engine", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Capture AI Output", pos: "b", h: 48 }
n5["<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/>Combine Request Insights"]
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Emergency Priority Check", pos: "b", h: 48 }
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Dispatch Urgent Contractor E..", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send Routine Work Order", pos: "b", h: 48 }
n9@{ icon: "mdi:message-outline", form: "rounded", label: "Notify Tenant Receipt", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Update Maintenance Log", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Record Recurring Issues", pos: "b", h: 48 }
n6 --> n7
n6 --> n8
n0 --> n1
n5 --> n6
n3 -.-> n2
n1 --> n2
n4 --> n5
n2 --> n4
n9 --> n10
n9 --> n11
n8 --> n9
n7 --> n9
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 n2 ai
class n3 aiModel
class n6 decision
class n10,n11 database
class n1,n5 code
classDef customIcon fill:none,stroke:none
class n0,n1,n5 customIcon
The Problem: Repair Requests Get Lost (and Everyone Pays)
Most maintenance “systems” are really just people doing their best across too many inboxes. A tenant submits a form, then someone copies details into a spreadsheet, then someone else forwards a blurry photo to a vendor, then the tenant follows up because they heard nothing. Meanwhile, emergencies don’t look like emergencies until they’ve already become expensive. The worst part is the mental load. You’re not just tracking repairs. You’re tracking conversations about repairs, across tools that don’t talk to each other.
It adds up fast. Here’s where it breaks down in real life.
- Requests arrive in different formats, so the “important details” get missed during copy-paste.
- Urgent issues look the same as routine ones until someone reads them carefully, which often happens too late.
- Vendor dispatch depends on one person remembering who handles HVAC vs. plumbing for each property.
- Without a reliable log, follow-ups become guesswork and reporting becomes a monthly scramble.
The Solution: AI-Categorize Requests, Email Vendors, Log Everything
This workflow turns a tenant’s Jotform submission into a tracked, routed work order in minutes. When a request comes in, n8n normalizes the form fields (unit, urgency, description, photos) so the data is clean and consistent. Then an OpenAI-powered agent reviews the text and classifies the issue (plumbing, HVAC, electrical, general repair) while also detecting urgency signals like “leak,” “no power,” or “sparking.” Based on that AI assessment, the workflow routes the job to the right vendor via Gmail, and sends an acknowledgment message back to the tenant so they’re not left wondering. Finally, it logs the request and key metadata in Google Sheets so you have an audit trail for compliance, reporting, and recurring-issue tracking.
The workflow starts with a Jotform trigger. AI then categorizes and prioritizes the repair, and n8n chooses the right path (emergency vs routine). Gmail sends the work order out, and Google Sheets becomes your living maintenance ledger.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you handle about 100 maintenance requests a month. Manually, it’s easy to spend 10 minutes per request just triaging, forwarding, and logging details, which is roughly 16 hours of admin time. With this workflow, the “human time” becomes reviewing the occasional edge case and updating vendor emails, maybe 1–2 minutes per request. The rest runs in the background: AI categorizes, Gmail sends, and Google Sheets logs it. That’s about a workday or two back every month.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Jotform for tenant maintenance request intake
- Gmail to send tenant and vendor emails
- Google Sheets to maintain an audit trail log
- OpenAI API key (get it from the OpenAI dashboard)
Skill level: Intermediate. You’ll connect accounts, paste a few IDs (like vendor emails), and test with sample submissions.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A tenant submits a maintenance form in Jotform. That submission is the trigger, and it includes structured fields like unit number and urgency, plus optional photos.
The request is cleaned up and standardized. n8n runs a short code step to normalize the payload so “Unit #12B” doesn’t become five different formats in your log.
OpenAI assesses the repair and flags emergencies. The AI agent classifies the issue type, extracts key details, and produces a consistent output your workflow can route on. Then an “emergency check” decides which email path to take.
Gmail sends the right messages and Sheets stores the record. Vendors get a work order with the details they need, tenants get an acknowledgment, and Google Sheets gets updated so you can filter, sort, and report without chasing anyone.
You can easily modify vendor routing to match your properties, or swap Google Sheets logging for a different database 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 new maintenance submissions start the workflow.
- Add and open Form Intake Trigger.
- Credential Required: Connect your jotFormApi credentials.
- Set Form to
[YOUR_ID].
⚠️ Common Pitfall: Replace [YOUR_ID] with your actual JotForm ID, or the trigger will never fire.
Step 2: Connect Gmail and Google Sheets
Authorize outbound email and logging destinations used later in the workflow.
- Open Dispatch Urgent Contractor Email and connect Gmail. Credential Required: Connect your gmailOAuth2 credentials.
- Open Send Routine Work Order and connect Gmail. Credential Required: Connect your gmailOAuth2 credentials.
- Open Notify Tenant Receipt and connect Gmail. Credential Required: Connect your gmailOAuth2 credentials.
- Open Update Maintenance Log and connect Sheets. Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Open Record Recurring Issues and connect Sheets. Credential Required: Connect your googleSheetsOAuth2Api credentials.
Confirm that the Google Sheets file and tab names referenced later exist in your account before testing.
Step 3: Set Up AI Repair Assessment
Configure the AI analysis that categorizes, prioritizes, and recommends vendors.
- Open AI Repair Assessment and confirm Prompt Type is
defineand Text includes the JSON analysis template. - Ensure the prompt interpolations remain intact, such as
{{ $json.unitNumber }},{{ $json.tenantName }}, and{{ $json.issueDescription }}. - Open OpenAI Chat Engine and verify the model is set to
gpt-4.1-mini. - Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine. This node is the language model for AI Repair Assessment.
⚠️ Common Pitfall: Do not add credentials to AI Repair Assessment—the credentials must be added to OpenAI Chat Engine.
Step 4: Configure Request Normalization and Insight Merge
Normalize the JotForm payload, capture AI output, and merge the data into a unified request object.
- Open Normalize Request Payload and keep the JavaScript mapping that sets fields like
requestId,tenantName,issueDescription, andurgencyLevel. - Open Capture AI Output and ensure the assignment aiAnalysis uses
{{ $json.output }}. - Open Combine Request Insights and keep the contractor database and priority mapping logic to build fields such as
finalPriority,contractorEmail, andworkOrderNumber.
Step 5: Configure Routing and Email Outputs
Route emergencies and send work orders to contractors, then notify tenants.
- Open Emergency Priority Check and set the condition to
{{ $json.finalPriority }}equalsemergency. - In Dispatch Urgent Contractor Email, set Send To to
{{ $json.contractorEmail }}and Subject to🚨 EMERGENCY WORK ORDER - {{ $json.workOrderNumber }}. - In Send Routine Work Order, set Send To to
{{ $json.contractorEmail }}and Subject toWork Order: {{ $json.workOrderNumber }} - {{ $json.issueCategory }}. - In Notify Tenant Receipt, set Send To to
{{ $('Form Intake Trigger').item.json['tenant Email'] }}and Subject to✅ Maintenance Request Received - {{ $('Normalize Request Payload').item.json.requestId }}.
⚠️ Common Pitfall: Update contractor emails in Combine Request Insights where placeholders like [YOUR_EMAIL] are defined, or messages may go to invalid addresses.
Step 6: Log Requests to Google Sheets
Record each request and recurring issue details after tenant notification.
- Open Update Maintenance Log and set Operation to
appendOrUpdate. - Set Document ID to
[YOUR_ID]and Sheet Name to[YOUR_ID](Sheet1). - Verify the mapped fields, such as
{{ $('Form Intake Trigger').item.json['tenant Name'].first }}and{{ $('Form Intake Trigger').item.json['issue Description'] }}. - Open Record Recurring Issues and keep Operation as
appendOrUpdatewith Matching Columns set tounitNumberandissueCategory. - Set Document ID to
[YOUR_ID]and Sheet Name to[YOUR_ID](Recurring issue).
Notify Tenant Receipt outputs to both Update Maintenance Log and Record Recurring Issues in parallel.
⚠️ Common Pitfall: Replace all [YOUR_ID] placeholders with actual Google Sheet IDs and sheet names.
Step 7: Test and Activate Your Workflow
Validate the end-to-end flow and then enable it for production use.
- Click Test workflow and submit a JotForm entry with realistic maintenance details.
- Confirm Emergency Priority Check routes emergency submissions to Dispatch Urgent Contractor Email and non-emergencies to Send Routine Work Order.
- Verify that Notify Tenant Receipt sends a confirmation and that both Update Maintenance Log and Record Recurring Issues update correctly in parallel.
- When results look correct, toggle the workflow to Active for live routing.
Common Gotchas
- Gmail credentials can expire or need specific permissions. If things break, check the connected Gmail account in n8n Credentials and confirm it still has send access.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About an hour if your accounts are ready.
No. You will mostly connect accounts and paste in vendor email addresses. The included workflow notes make the “why” behind each piece much easier to follow.
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, which are usually just a few dollars a month at typical request volume.
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, and it’s one of the best upgrades. You can replace the fixed “send to contractor” email logic with a lookup, for example reading a vendor list from Google Sheets, then routing via the Switch and the Gmail send nodes. Common customizations include separate vendors per building, after-hours escalation rules, and attaching different “work order” templates based on the AI category.
Usually it’s expired OAuth access or the wrong Gmail account connected. Reconnect Gmail in n8n Credentials, then confirm the Gmail nodes are using that refreshed credential. If you recently changed workspace security settings, Gmail can also block sends until permissions are re-approved. And if you test by firing lots of submissions quickly, rate limiting can show up as intermittent failures.
On n8n Cloud, it depends on your plan’s monthly executions, but most small teams can run hundreds of requests a month comfortably. If you self-host, there’s no fixed execution cap, so it’s mainly limited by your server and your email/API limits. In practice, a single request runs in seconds, so even busy properties don’t “outgrow” it quickly.
Often, yes, because this is not a simple two-step zap. n8n handles branching logic (emergency vs routine), data shaping, and AI steps in one place without punishing you for complexity. It also gives you the self-hosting option, which can matter when you’re processing lots of requests every month and want predictable costs. Zapier and Make can still be fine if you only need “form submission → email,” and nothing more. If you’re torn, Talk to an automation expert and we’ll help you pick the sensible route.
Once this is running, you stop “managing inboxes” and start managing outcomes. The workflow handles the repetitive follow-ups, and you get clean records you can trust.
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.