AutomationFlowsAI & RAG › Automate Vehicle Inspections & Maintenance Workflows with Openai & Jotform

Automate Vehicle Inspections & Maintenance Workflows with Openai & Jotform

ByJitesh Dugar @jiteshdugar on n8n.io

Transform your fleet operations from paper-based chaos to intelligent automation - achieving 40% reduction in breakdowns, 100% inspection compliance, and predictive maintenance that saves thousands in repair costs.

Event trigger★★★★☆ complexityAI-powered20 nodesAgentGmailGoogle SheetsOpenAI ChatJot Form Trigger
AI & RAG Trigger: Event Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #9659 — we link there as the canonical source.

This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "d2e9183f-f32a-4e71-af56-402f3b93a80c",
      "name": "Parse Inspection Data",
      "type": "n8n-nodes-base.code",
      "position": [
        272,
        112
      ],
      "parameters": {
        "jsCode": "// Parse vehicle inspection form data\nconst formData = $input.first().json;\n\nreturn {\n  json: {\n    inspectionId: formData.submissionID || 'INS-' + Date.now(),\n    inspectionDate: formData.inspectionDate || new Date().toISOString().split('T')[0],\n    driverName: formData.driverName || formData.q3_driverName,\n    driverEmail: formData.driverEmail || formData.q4_driverEmail,\n    vehicleId: formData.vehicleId || formData.q5_vehicleId,\n    vehicleMake: formData.vehicleMake || formData.q6_vehicleMake,\n    vehicleModel: formData.vehicleModel || formData.q7_vehicleModel,\n    vehicleYear: formData.vehicleYear || formData.q8_vehicleYear,\n    licensePlate: formData.licensePlate || formData.q9_licensePlate,\n    currentMileage: parseInt(formData.currentMileage || formData.q10_currentMileage),\n    fuelLevel: formData.fuelLevel || formData.q11_fuelLevel,\n    tiresCondition: formData.tiresCondition || formData.q12_tiresCondition || 'good',\n    brakesCondition: formData.brakesCondition || formData.q13_brakesCondition || 'good',\n    lightsCondition: formData.lightsCondition || formData.q14_lightsCondition || 'good',\n    fluidLevels: formData.fluidLevels || formData.q15_fluidLevels || 'good',\n    engineCondition: formData.engineCondition || formData.q16_engineCondition || 'good',\n    transmissionCondition: formData.transmissionCondition || formData.q17_transmissionCondition || 'good',\n    interiorCondition: formData.interiorCondition || formData.q18_interiorCondition || 'good',\n    exteriorCondition: formData.exteriorCondition || formData.q19_exteriorCondition || 'good',\n    hasIssues: formData.hasIssues || formData.q20_hasIssues || 'no',\n    issueDescription: formData.issueDescription || formData.q21_issueDescription || '',\n    damagePhotos: formData.damagePhotos || formData.q22_damagePhotos || '',\n    cleanlinessRating: formData.cleanlinessRating || formData.q23_cleanlinessRating || '5',\n    odometerPhoto: formData.odometerPhoto || formData.q24_odometerPhoto || '',\n    notes: formData.notes || formData.q25_notes || '',\n    submittedAt: new Date().toISOString(),\n    status: 'pending_review'\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "383f6d18-ad13-4f9c-ba67-50128170ef73",
      "name": "Get Vehicle History",
      "type": "n8n-nodes-base.code",
      "position": [
        528,
        80
      ],
      "parameters": {
        "jsCode": "// Retrieve maintenance history for vehicle\nconst data = $input.first().json;\n\nconst vehicleDatabase = {\n  lastInspectionMileage: data.currentMileage - 3500,\n  lastOilChangeMileage: data.currentMileage - 2800,\n  lastTireRotationMileage: data.currentMileage - 4200,\n  lastBrakeInspectionMileage: data.currentMileage - 5100,\n  oilChangeIntervalMiles: 5000,\n  tireRotationIntervalMiles: 6000,\n  brakeInspectionIntervalMiles: 10000,\n  annualInspectionDue: '2025-12-15',\n  registrationExpiry: '2025-11-30',\n  insuranceExpiry: '2026-03-15',\n  vehicleAge: new Date().getFullYear() - parseInt(data.vehicleYear),\n  fleetCategory: 'delivery',\n  dotInspectionDue: '2025-10-20'\n};\n\nconst oilChangeDue = (data.currentMileage - vehicleDatabase.lastOilChangeMileage) >= (vehicleDatabase.oilChangeIntervalMiles * 0.9);\nconst tireRotationDue = (data.currentMileage - vehicleDatabase.lastTireRotationMileage) >= (vehicleDatabase.tireRotationIntervalMiles * 0.9);\nconst brakeInspectionDue = (data.currentMileage - vehicleDatabase.lastBrakeInspectionMileage) >= (vehicleDatabase.brakeInspectionIntervalMiles * 0.9);\n\nconst today = new Date();\nconst annualInspectionOverdue = new Date(vehicleDatabase.annualInspectionDue) < today;\nconst dotInspectionOverdue = new Date(vehicleDatabase.dotInspectionDue) < today;\nconst registrationExpiringSoon = (new Date(vehicleDatabase.registrationExpiry) - today) / (1000 * 60 * 60 * 24) < 30;\n\nreturn {\n  json: {\n    ...data,\n    lastOilChangeMileage: vehicleDatabase.lastOilChangeMileage,\n    lastTireRotationMileage: vehicleDatabase.lastTireRotationMileage,\n    lastBrakeInspectionMileage: vehicleDatabase.lastBrakeInspectionMileage,\n    oilChangeDue: oilChangeDue,\n    tireRotationDue: tireRotationDue,\n    brakeInspectionDue: brakeInspectionDue,\n    milesSinceOilChange: data.currentMileage - vehicleDatabase.lastOilChangeMileage,\n    milesSinceTireRotation: data.currentMileage - vehicleDatabase.lastTireRotationMileage,\n    milesSinceBrakeInspection: data.currentMileage - vehicleDatabase.lastBrakeInspectionMileage,\n    annualInspectionDue: vehicleDatabase.annualInspectionDue,\n    annualInspectionOverdue: annualInspectionOverdue,\n    dotInspectionDue: vehicleDatabase.dotInspectionDue,\n    dotInspectionOverdue: dotInspectionOverdue,\n    registrationExpiry: vehicleDatabase.registrationExpiry,\n    registrationExpiringSoon: registrationExpiringSoon,\n    vehicleAge: vehicleDatabase.vehicleAge,\n    fleetCategory: vehicleDatabase.fleetCategory\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "f11733cb-050d-48a2-9009-7006b707a37d",
      "name": "AI Fleet Analysis",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        752,
        144
      ],
      "parameters": {
        "text": "=You are an expert fleet maintenance analyst. Analyze this vehicle inspection:\n\n**Vehicle:** {{ $json.vehicleYear }} {{ $json.vehicleMake }} {{ $json.vehicleModel }} (ID: {{ $json.vehicleId }})\n**Mileage:** {{ $json.currentMileage }}\n**Age:** {{ $json.vehicleAge }} years\n**Category:** {{ $json.fleetCategory }}\n\n**Inspection Results:**\n- Tires: {{ $json.tiresCondition }}\n- Brakes: {{ $json.brakesCondition }}\n- Lights: {{ $json.lightsCondition }}\n- Fluids: {{ $json.fluidLevels }}\n- Engine: {{ $json.engineCondition }}\n- Transmission: {{ $json.transmissionCondition }}\n- Interior: {{ $json.interiorCondition }}\n- Exterior: {{ $json.exteriorCondition }}\n- Fuel: {{ $json.fuelLevel }}\n\n**Issues:** {{ $json.hasIssues }}\n{{ $json.issueDescription }}\n\n**Maintenance Status:**\n- Miles since oil change: {{ $json.milesSinceOilChange }}\n- Oil change due: {{ $json.oilChangeDue }}\n- Tire rotation due: {{ $json.tireRotationDue }}\n- Brake inspection due: {{ $json.brakeInspectionDue }}\n- Annual inspection overdue: {{ $json.annualInspectionOverdue }}\n- DOT inspection overdue: {{ $json.dotInspectionOverdue }}\n\nProvide JSON analysis:\n{\n  \"overallStatus\": {\n    \"condition\": \"excellent|good|fair|poor|critical\",\n    \"driveable\": true|false,\n    \"requiresImmediateAction\": true|false,\n    \"safetyRating\": 0-100,\n    \"summary\": \"brief assessment\"\n  },\n  \"criticalIssues\": [{\"component\": \"\", \"severity\": \"\", \"description\": \"\", \"action_required\": \"\", \"estimated_cost\": \"\", \"safety_concern\": true|false}],\n  \"maintenanceRequired\": {\n    \"immediate\": [{\"service\": \"\", \"reason\": \"\", \"urgency\": \"\", \"estimated_hours\": 0, \"estimated_cost\": \"\"}],\n    \"scheduled\": [{\"service\": \"\", \"due_in_miles\": 0, \"reason\": \"\"}]\n  },\n  \"complianceStatus\": {\"dotCompliant\": true|false, \"roadworthy\": true|false, \"complianceIssues\": []},\n  \"costAnalysis\": {\"totalEstimatedCost\": \"\", \"potentialDowntime\": \"\"},\n  \"workOrderGeneration\": {\"createWorkOrder\": true|false, \"workOrderType\": \"\", \"assignTo\": \"\", \"instructions\": []}\n}",
        "options": {
          "systemMessage": "You are an expert fleet maintenance analyst with DOT compliance expertise."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.6
    },
    {
      "id": "fd9848b3-1f60-459f-9abd-ace76e907b6d",
      "name": "Extract AI Analysis",
      "type": "n8n-nodes-base.set",
      "position": [
        1024,
        256
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "aiAnalysis",
              "name": "aiAnalysis",
              "type": "string",
              "value": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "ec1bfb09-a6b4-4981-97d1-0664f114f77c",
      "name": "Merge Fleet Analysis",
      "type": "n8n-nodes-base.code",
      "position": [
        1200,
        160
      ],
      "parameters": {
        "jsCode": "const inspectionData = $input.first().json;\nconst aiAnalysisRaw = inspectionData.aiAnalysis;\n\nlet aiAnalysis;\ntry {\n  aiAnalysis = JSON.parse(aiAnalysisRaw);\n} catch (e) {\n  aiAnalysis = {\n    overallStatus: {condition: 'good', driveable: true, requiresImmediateAction: false, safetyRating: 85, summary: 'Vehicle in acceptable condition'},\n    criticalIssues: [],\n    maintenanceRequired: {immediate: [], scheduled: []},\n    complianceStatus: {dotCompliant: true, roadworthy: true, complianceIssues: []},\n    costAnalysis: {totalEstimatedCost: '$0-500', potentialDowntime: '0 hours'},\n    workOrderGeneration: {createWorkOrder: false, workOrderType: 'routine', assignTo: 'general_maintenance', instructions: []}\n  };\n}\n\nlet vehicleStatus = 'operational';\nif (!aiAnalysis.overallStatus.driveable) {\n  vehicleStatus = 'out_of_service';\n} else if (aiAnalysis.overallStatus.requiresImmediateAction) {\n  vehicleStatus = 'requires_attention';\n}\n\nconst workOrderNumber = aiAnalysis.workOrderGeneration.createWorkOrder ? 'WO-' + inspectionData.vehicleId + '-' + Date.now() : null;\n\nreturn {\n  json: {\n    ...inspectionData,\n    overallCondition: aiAnalysis.overallStatus.condition,\n    driveable: aiAnalysis.overallStatus.driveable,\n    requiresImmediateAction: aiAnalysis.overallStatus.requiresImmediateAction,\n    safetyRating: aiAnalysis.overallStatus.safetyRating,\n    statusSummary: aiAnalysis.overallStatus.summary,\n    vehicleStatus: vehicleStatus,\n    criticalIssues: aiAnalysis.criticalIssues,\n    criticalIssueCount: aiAnalysis.criticalIssues.length,\n    immediateMaintenanceNeeded: aiAnalysis.maintenanceRequired.immediate,\n    scheduledMaintenanceNeeded: aiAnalysis.maintenanceRequired.scheduled,\n    dotCompliant: aiAnalysis.complianceStatus.dotCompliant,\n    roadworthy: aiAnalysis.complianceStatus.roadworthy,\n    complianceIssues: aiAnalysis.complianceStatus.complianceIssues,\n    totalEstimatedCost: aiAnalysis.costAnalysis.totalEstimatedCost,\n    potentialDowntime: aiAnalysis.costAnalysis.potentialDowntime,\n    createWorkOrder: aiAnalysis.workOrderGeneration.createWorkOrder,\n    workOrderNumber: workOrderNumber,\n    workOrderType: aiAnalysis.workOrderGeneration.workOrderType,\n    assignTo: aiAnalysis.workOrderGeneration.assignTo,\n    workOrderInstructions: aiAnalysis.workOrderGeneration.instructions\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "3b340f0c-7a07-4397-b442-67bdbc6c917b",
      "name": "Critical Issue?",
      "type": "n8n-nodes-base.if",
      "position": [
        1408,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "condition1",
              "operator": {
                "type": "boolean",
                "operation": "true"
              },
              "leftValue": "={{ $json.requiresImmediateAction }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "27cbd1d5-53ad-4a1c-b258-d9a710bcf150",
      "name": "Critical Alert Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1616,
        64
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=\ud83d\udea8 CRITICAL VEHICLE ISSUE\n\nVehicle: {{ $('Jotform Trigger').item.json['vehicle Year'] }} {{ $('Jotform Trigger').item.json['vehicle Make'] }} {{ $('Jotform Trigger').item.json['vehicle Model'] }}\nID: {{ $('Jotform Trigger').item.json['vehicle Id'] }}\nPlate: {{ $('Jotform Trigger').item.json['license Plate'] }}\nMileage: {{ $('Jotform Trigger').item.json['current Mileage'] }}\n\nStatus: {{ $('Merge Fleet Analysis').item.json.statusSummary }}\nDriveable: {{ $('Merge Fleet Analysis').item.json.driveable }}\nSafety Rating: {{ $('Merge Fleet Analysis').item.json.safetyRating }}/100\n\n{{ $('Merge Fleet Analysis').item.json.statusSummary }}\n\nCritical Issues: {{ $json.criticalIssueCount }}\n{{ $json.criticalIssues.map((i, idx) => `${idx + 1}. ${i.component}: ${i.description}\\n   Action: ${i.action_required}\\n   Cost: ${i.estimated_cost}`).join('\\n\\n') }}\n\nWork Order: {{ $json.workOrderNumber }}\nAssign To: {{ $json.assignTo }}\n\nDriver: {{ $json.driverName }}\nEmail: {{ $json.driverEmail }}",
        "options": {},
        "subject": "=\ud83d\udea8 CRITICAL: Vehicle {{ $('Jotform Trigger').item.json['vehicle Id'] }} Requires Immediate Action"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "2380918c-b8b4-4ccc-b5bb-c79fe921c439",
      "name": "Routine Report Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1616,
        304
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=Vehicle Inspection Report\n\nVehicle: {{ $('Jotform Trigger').item.json['vehicle Year'] }} {{ $('Jotform Trigger').item.json['vehicle Make'] }} {{ $('Jotform Trigger').item.json['vehicle Model'] }}\nID: {{ $('Jotform Trigger').item.json['vehicle Id'] }}\nMileage: {{ $('Jotform Trigger').item.json['current Mileage'] }}\n\nCondition: {{ $json.overallCondition.toUpperCase() }}\nSafety Rating: {{ $json.safetyRating }}/100\nStatus: {{ $json.vehicleStatus }}\n\n{{ $json.statusSummary }}\n\nMaintenance Due:\n- Oil Change: {{ $json.oilChangeDue ? 'YES' : 'NO' }}\n- Tire Rotation: {{ $json.tireRotationDue ? 'YES' : 'NO' }}\n- Brake Inspection: {{ $json.brakeInspectionDue ? 'YES' : 'NO' }}\n\n{{ $json.createWorkOrder ? 'Work Order: ' + $json.workOrderNumber : 'No work order needed' }}\n\nDriver:{{ $('Jotform Trigger').item.json['driver Name'] }} \nInspection Date: {{ $('Parse Inspection Data').item.json.inspectionDate }}",
        "options": {},
        "subject": "=Vehicle Inspection: {{ $('Jotform Trigger').item.json['vehicle Id'] }} - {{ $json.overallCondition }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "783860df-163c-45c3-9102-105069dc1f21",
      "name": "Driver Confirmation",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1840,
        160
      ],
      "parameters": {
        "sendTo": "={{ $('Jotform Trigger').item.json['driver Email'] }}",
        "message": "=Hi {{ $('Jotform Trigger').item.json['driver Name'] }},\n\nThank you for your vehicle inspection.\n\nVehicle: {{ $('Jotform Trigger').item.json['vehicle Id'] }}\nCondition: {{ $('Merge Fleet Analysis').item.json.overallCondition }}\nSafety Rating: {{ $('Merge Fleet Analysis').item.json.safetyRating }}/100\n\n{{ $json.requiresImmediateAction ? '\u26a0\ufe0f IMMEDIATE ACTION REQUIRED - Contact maintenance immediately.' : 'Vehicle is operational.' }}\n\n{{ !$json.driveable ? '\ud83d\udeab VEHICLE OUT OF SERVICE - Do not operate.' : '' }}\n\n{{ $json.createWorkOrder ? 'Maintenance scheduled. Work Order: ' + $json.workOrderNumber : 'No immediate maintenance needed.' }}\n\nThank you!\nFleet Management",
        "options": {},
        "subject": "=Vehicle Inspection Received - {{ $('Jotform Trigger').item.json['vehicle Id'] }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "be1876cf-fcde-4d45-a2b7-b970e6c3a5ca",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2080,
        160
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "driver Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "driver Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "vehicle Id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "vehicle Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "driver Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "driver Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "vehicle Make",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "vehicle Make",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "vehicle Make",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "vehicle Make",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "vehicle Model",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "vehicle Model",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "license Plate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "license Plate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current Mileage",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current Mileage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "fuel Level",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "fuel Level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tires Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tires Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "brakes Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "brakes Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "lights Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "lights Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "fluid Levels",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "fluid Levels",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "engine Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "engine Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "transmission Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "transmission Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "interior Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "interior Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "exterior Condition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "exterior Condition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "has Issues",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "has Issues",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "issue Description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "issue Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cleanliness Rating",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "cleanliness Rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "notes",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "vehicle Id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1K0lqkb-z0fbdb_pEUDtUfl5N2jQ_nT-YEQtylwB4968/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1K0lqkb-z0fbdb_pEUDtUfl5N2jQ_nT-YEQtylwB4968",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1K0lqkb-z0fbdb_pEUDtUfl5N2jQ_nT-YEQtylwB4968/edit?usp=drivesdk",
          "cachedResultName": "Fleet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "aa9d87fe-0ee3-46d2-aabd-3565f4fab995",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        0
      ],
      "parameters": {
        "height": 240,
        "content": "\ud83d\udce9 **TRIGGER**\nCaptures vehicle inspections\nvia Jotform with photos\nCreate your form for free on [Jotform using this link](https://www.jotform.com/?partner=mediajade)"
      },
      "typeVersion": 1
    },
    {
      "id": "e90fe0d1-e13e-494c-8661-280ac2fb2f73",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        -64
      ],
      "parameters": {
        "height": 240,
        "content": "\ud83e\uddfe **PARSE DATA**\nNormalizes form fields"
      },
      "typeVersion": 1
    },
    {
      "id": "d53d3939-3026-40c4-b616-f044250b4c15",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -32
      ],
      "parameters": {
        "height": 240,
        "content": "\ud83d\udcca **VEHICLE HISTORY**\nRetrieves maintenance records\nand calculates due dates"
      },
      "typeVersion": 1
    },
    {
      "id": "aa85e72a-c131-4a80-9978-39476ee0edbb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        -32
      ],
      "parameters": {
        "height": 240,
        "content": "\ud83e\udd16 **AI ANALYSIS**\nAnalyzes condition, compliance,\nand generates recommendations"
      },
      "typeVersion": 1
    },
    {
      "id": "b808706d-27fb-429e-91d8-83fa0f4a81d1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -32
      ],
      "parameters": {
        "width": 320,
        "height": 448,
        "content": "\ud83d\udd17 **MERGE**\nCombines AI insights\nwith inspection data"
      },
      "typeVersion": 1
    },
    {
      "id": "7007da02-c58e-48e4-96b8-c782dc5fbc28",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        -32
      ],
      "parameters": {
        "width": 352,
        "height": 528,
        "content": "\u26a1 **ROUTE**\nCritical vs Routine"
      },
      "typeVersion": 1
    },
    {
      "id": "f0308e9e-2544-4f86-bba8-e1d28ec3da4c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        48
      ],
      "parameters": {
        "height": 240,
        "content": "\ud83d\udce7 **NOTIFICATIONS**\nMaintenance alerts\nand driver confirmation"
      },
      "typeVersion": 1
    },
    {
      "id": "c5a7463b-b685-4541-8f88-983e73569cc8",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        0
      ],
      "parameters": {
        "height": 336,
        "content": "\ud83d\udcca **LOGGING**\nTracks all inspections,\nmaintenance, and compliance"
      },
      "typeVersion": 1
    },
    {
      "id": "cdfb30d5-2b65-4d3b-a07b-9b9c03abe993",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        752,
        336
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b61be557-a538-4239-a5ab-666c4b30554f",
      "name": "Jotform Trigger",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        0,
        128
      ],
      "parameters": {
        "form": "252866368275067"
      },
      "credentials": {
        "jotFormApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Critical Issue?": {
      "main": [
        [
          {
            "node": "Critical Alert Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Routine Report Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Jotform Trigger": {
      "main": [
        [
          {
            "node": "Parse Inspection Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Fleet Analysis": {
      "main": [
        [
          {
            "node": "Extract AI Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Fleet Analysis",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Driver Confirmation": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract AI Analysis": {
      "main": [
        [
          {
            "node": "Merge Fleet Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Vehicle History": {
      "main": [
        [
          {
            "node": "AI Fleet Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Critical Alert Email": {
      "main": [
        [
          {
            "node": "Driver Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Fleet Analysis": {
      "main": [
        [
          {
            "node": "Critical Issue?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Routine Report Email": {
      "main": [
        [
          {
            "node": "Driver Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Inspection Data": {
      "main": [
        [
          {
            "node": "Get Vehicle History",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Transform your fleet operations from paper-based chaos to intelligent automation - achieving 40% reduction in breakdowns, 100% inspection compliance, and predictive maintenance that saves thousands in repair costs.

Source: https://n8n.io/workflows/9659/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Transform guest complaints into loyalty opportunities - achieving 60% reduction in negative reviews, 85% faster service recovery, and turning dissatisfied guests into brand advocates through AI-powere

Agent, Gmail, HTTP Request +3
AI & RAG

Transform patient intake from paperwork chaos into intelligent, automated triage that detects emergencies, prepares providers with comprehensive briefs, and streamlines scheduling—improving patient sa

Agent, OpenAI Chat, Output Parser Structured +4
AI & RAG

Transform accounts payable from a manual bottleneck into an intelligent, automated system that reads invoices, detects fraud, and processes payments automatically—saving 20+ hours per week while preve

OpenAI, Agent, OpenAI Chat +6
AI & RAG

Transform college admissions from an overwhelming manual process into an intelligent, efficient, and equitable system that analyzes essays, scores applicants holistically, and identifies top candidate

OpenAI, Agent, OpenAI Chat +5
AI & RAG

Streamline client onboarding and project setup from hours to minutes with AI-driven automation. This intelligent workflow eliminates manual coordination, builds proposals, creates projects in Asana, w

Agent, Asana, Slack +5