{"workflow":{"id":13589,"name":"Automate medical claims processing with GPT-4 multi-agent orchestration","views":127,"recentViews":1,"totalViews":127,"createdAt":"2026-02-22T14:52:02.971Z","description":"## How It Works\nThis workflow automates end-to-end medical claims processing using a multi-agent AI orchestration system built on OpenAI GPT-4. It targets healthcare revenue cycle teams, billing departments, and hospital administrators burdened by manual claims adjudication, coding errors, and payer denials. The workflow triggers on a schedule, loads billing data, and routes it through an Orchestrator Agent that coordinates four specialist sub-agents: Coding Validation, Claims Submission, Denial Detection, and Payer Follow-up. Each agent independently validates, submits, or flags claims. Results are parsed, merged, and routed by risk level. Final metrics and a formatted report close the cycle, giving teams real-time visibility into claim status, denial patterns, and revenue recovery.\n\n## Setup Steps\n1. Import workflow JSON into your n8n instance.\n2. Add OpenAI API credentials.\n3. Configure Schedule Trigger with desired processing frequency. \n4. Update Workflow Configuration node with your billing system endpoint or sample data path.\n5. Set Gmail/SMTP credentials for the Escalate to Revenue Specialist email node.\n6. Connect Google Sheets or database nodes with appropriate credentials and sheet IDs.\n7. Test with simulated billing data before enabling live data sources.\n\n## Prerequisites\nn8n, OpenAI API key (GPT-4) and Gmail or SMTP account \n## Use Cases\nHospital billing departments automating claims submission and denial follow-up\n## Customization\nSwap OpenAI for NVIDIA NIM or Anthropic models in any agent node and add Slack alerts alongside email escalation\n## Benefits\nReduces manual claims review by 80%+ through parallel AI agent processing","workflow":{"id":"pPJz9tI4oK3sqvf6w-EYw","meta":{"instanceId":"b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502"},"name":"AI-powered medical claims processing with multi-agent orchestration","tags":[],"nodes":[{"id":"b56efdda-7050-4140-af52-e7c445e38458","name":"Schedule Trigger - Process Claims","type":"n8n-nodes-base.scheduleTrigger","position":[-2624,352],"parameters":{"rule":{"interval":[{"triggerAtHour":2}]}},"typeVersion":1.3},{"id":"9958a281-8536-4e51-b8b0-abfe07cf353d","name":"Workflow Configuration","type":"n8n-nodes-base.set","position":[-2400,352],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"revenueSpecialistEmail","type":"string","value":"<__PLACEHOLDER_VALUE__Revenue specialist email address__>"},{"id":"id-2","name":"complianceThreshold","type":"number","value":0.85},{"id":"id-3","name":"highRiskThreshold","type":"number","value":0.75},{"id":"id-4","name":"denialRetryLimit","type":"number","value":3}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"37cbe18b-fcfe-4809-974b-3d1433dcc1c8","name":"Simulate EHR/Billing Data","type":"n8n-nodes-base.code","position":[-2176,352],"parameters":{"jsCode":"// Generate simulated EHR and billing data\nconst claims = [];\n\n// Sample data pools\nconst firstNames = ['John', 'Mary', 'Robert', 'Patricia', 'Michael', 'Jennifer', 'William', 'Linda', 'David', 'Barbara'];\nconst lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez'];\nconst diagnosisCodes = [\n  { code: 'E11.9', description: 'Type 2 diabetes mellitus without complications' },\n  { code: 'I10', description: 'Essential (primary) hypertension' },\n  { code: 'J44.9', description: 'Chronic obstructive pulmonary disease, unspecified' },\n  { code: 'M79.3', description: 'Panniculitis, unspecified' },\n  { code: 'K21.9', description: 'Gastro-esophageal reflux disease without esophagitis' },\n  { code: 'F41.9', description: 'Anxiety disorder, unspecified' },\n  { code: 'M25.561', description: 'Pain in right knee' },\n  { code: 'R51', description: 'Headache' }\n];\nconst procedureCodes = [\n  { code: '99213', description: 'Office visit, established patient, level 3', amount: 150 },\n  { code: '99214', description: 'Office visit, established patient, level 4', amount: 200 },\n  { code: '99203', description: 'Office visit, new patient, level 3', amount: 180 },\n  { code: '80053', description: 'Comprehensive metabolic panel', amount: 75 },\n  { code: '85025', description: 'Complete blood count', amount: 45 },\n  { code: '93000', description: 'Electrocardiogram', amount: 120 },\n  { code: '71045', description: 'Chest X-ray', amount: 95 },\n  { code: '36415', description: 'Venipuncture', amount: 25 }\n];\nconst insuranceProviders = [\n  { name: 'Blue Cross Blue Shield', payerId: 'BCBS001' },\n  { name: 'UnitedHealthcare', payerId: 'UHC002' },\n  { name: 'Aetna', payerId: 'AET003' },\n  { name: 'Cigna', payerId: 'CIG004' },\n  { name: 'Humana', payerId: 'HUM005' },\n  { name: 'Medicare', payerId: 'MED006' },\n  { name: 'Medicaid', payerId: 'MCAID007' }\n];\nconst claimStatuses = ['pending', 'submitted', 'approved', 'denied', 'appealed'];\n\n// Generate 10 sample claims\nfor (let i = 1; i <= 10; i++) {\n  const firstName = firstNames[Math.floor(Math.random() * firstNames.length)];\n  const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];\n  const diagnosis = diagnosisCodes[Math.floor(Math.random() * diagnosisCodes.length)];\n  const procedure = procedureCodes[Math.floor(Math.random() * procedureCodes.length)];\n  const insurance = insuranceProviders[Math.floor(Math.random() * insuranceProviders.length)];\n  const status = claimStatuses[Math.floor(Math.random() * claimStatuses.length)];\n  \n  // Generate random dates\n  const serviceDate = new Date(2024, Math.floor(Math.random() * 12), Math.floor(Math.random() * 28) + 1);\n  const submissionDate = new Date(serviceDate.getTime() + (Math.random() * 14 * 24 * 60 * 60 * 1000)); // 0-14 days after service\n  \n  // Calculate amounts\n  const billedAmount = procedure.amount;\n  const allowedAmount = billedAmount * (0.7 + Math.random() * 0.2); // 70-90% of billed\n  const patientResponsibility = allowedAmount * (0.1 + Math.random() * 0.2); // 10-30% patient responsibility\n  const insurancePayment = allowedAmount - patientResponsibility;\n  \n  claims.push({\n    claimId: `CLM-2024-${String(i).padStart(6, '0')}`,\n    patientDemographics: {\n      patientId: `PAT-${String(1000 + i).padStart(6, '0')}`,\n      firstName: firstName,\n      lastName: lastName,\n      dateOfBirth: new Date(1940 + Math.floor(Math.random() * 60), Math.floor(Math.random() * 12), Math.floor(Math.random() * 28) + 1).toISOString().split('T')[0],\n      gender: Math.random() > 0.5 ? 'M' : 'F',\n      address: `${Math.floor(Math.random() * 9999) + 1} Main St`,\n      city: 'Springfield',\n      state: 'IL',\n      zipCode: String(60000 + Math.floor(Math.random() * 1000))\n    },\n    diagnosisInfo: {\n      primaryDiagnosisCode: diagnosis.code,\n      diagnosisDescription: diagnosis.description,\n      diagnosisDate: serviceDate.toISOString().split('T')[0]\n    },\n    procedureInfo: {\n      procedureCode: procedure.code,\n      procedureDescription: procedure.description,\n      serviceDate: serviceDate.toISOString().split('T')[0],\n      providerId: `PRV-${String(100 + Math.floor(Math.random() * 50)).padStart(5, '0')}`,\n      providerName: 'Springfield Medical Center'\n    },\n    billingInfo: {\n      billedAmount: Math.round(billedAmount * 100) / 100,\n      allowedAmount: Math.round(allowedAmount * 100) / 100,\n      insurancePayment: Math.round(insurancePayment * 100) / 100,\n      patientResponsibility: Math.round(patientResponsibility * 100) / 100,\n      currency: 'USD'\n    },\n    insuranceInfo: {\n      insuranceProvider: insurance.name,\n      payerId: insurance.payerId,\n      policyNumber: `POL-${String(Math.floor(Math.random() * 1000000)).padStart(8, '0')}`,\n      groupNumber: `GRP-${String(Math.floor(Math.random() * 10000)).padStart(6, '0')}`,\n      coverageType: Math.random() > 0.3 ? 'primary' : 'secondary'\n    },\n    claimStatus: {\n      status: status,\n      submissionDate: submissionDate.toISOString().split('T')[0],\n      lastUpdated: new Date().toISOString().split('T')[0],\n      denialReason: status === 'denied' ? ['Invalid diagnosis code', 'Missing documentation', 'Non-covered service', 'Authorization required'][Math.floor(Math.random() * 4)] : null,\n      riskLevel: ['low', 'medium', 'high'][Math.floor(Math.random() * 3)],\n      complianceFlag: Math.random() > 0.8 ? true : false\n    }\n  });\n}\n\nreturn claims.map(claim => ({ json: claim }));"},"typeVersion":2},{"id":"84799e9d-c6b5-4e2b-a0a6-81530828b298","name":"Orchestrator Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[-1392,352],"parameters":{"text":"={{ $json }}","options":{"systemMessage":"You are the Revenue Cycle Orchestrator Agent responsible for coordinating end-to-end billing, coding validation, claims submission, denial detection, and payer follow-ups.\n\nYour task is to:\n1. Analyze incoming EHR and billing data for completeness and accuracy\n2. Call the Coding Validation Agent Tool to validate ICD-10, CPT, and HCPCS codes\n3. Call the Claims Submission Agent Tool to prepare and submit claims to payers\n4. Call the Denial Detection Agent Tool to identify potential denials and recommend corrections\n5. Call the Payer Follow-up Agent Tool for unresolved claims requiring escalation\n6. Coordinate retries and corrections based on agent feedback\n7. Flag compliance risks and anomalies\n8. Return structured orchestration results\n\nCRITICAL RULES:\n- Do NOT alter clinical data or infer diagnoses\n- Maintain full audit trails for all actions\n- Ensure regulatory compliance (HIPAA, CMS guidelines)\n- Escalate high-risk cases immediately\n- Document all agent interactions and decisions"},"promptType":"define","hasOutputParser":true},"typeVersion":3.1},{"id":"b54c3ce7-b2d7-4323-99f7-6cb8b9fbc646","name":"Coding Validation Agent Tool","type":"@n8n/n8n-nodes-langchain.agentTool","position":[-1824,576],"parameters":{"text":"={{ $fromAI(\"claimData\", \"Claim data requiring coding validation\", \"json\") }}","options":{"systemMessage":"You are a Coding Validation Specialist Agent responsible for validating medical codes for billing accuracy and compliance.\n\nYour task is to:\n1. Validate ICD-10 diagnosis codes for accuracy and specificity\n2. Validate CPT and HCPCS procedure codes against documentation\n3. Check for code compatibility and bundling rules\n4. Identify missing modifiers or required documentation\n5. Flag compliance risks (upcoding, unbundling, medical necessity)\n6. Recommend corrections for invalid or incomplete codes\n7. Return structured validation results\n\nCRITICAL RULES:\n- Do NOT alter or infer clinical diagnoses\n- Follow CMS coding guidelines and LCD/NCD policies\n- Flag all compliance violations immediately\n- Document validation reasoning for audit trails"},"hasOutputParser":true,"toolDescription":"Validates medical coding (ICD-10, CPT, HCPCS) for billing accuracy and compliance, identifies errors and recommends corrections"},"typeVersion":3},{"id":"1f01c98c-bb9f-49bd-82a9-b8598443bb69","name":"Claims Submission Agent Tool","type":"@n8n/n8n-nodes-langchain.agentTool","position":[-1536,576],"parameters":{"text":"={{ $fromAI(\"validatedClaim\", \"Validated claim data ready for submission\", \"json\") }}","options":{"systemMessage":"You are a Claims Submission Specialist Agent responsible for preparing and submitting claims to payers.\n\nYour task is to:\n1. Prepare claim forms (CMS-1500, UB-04) with validated codes\n2. Verify payer-specific requirements and formatting\n3. Check for prior authorization and referral requirements\n4. Submit claims via appropriate channels (EDI, portal, paper)\n5. Track submission status and confirmation numbers\n6. Identify submission errors and recommend corrections\n7. Return structured submission results\n\nCRITICAL RULES:\n- Ensure all required fields are complete before submission\n- Follow payer-specific submission guidelines\n- Maintain submission audit trails with timestamps\n- Flag rejected submissions immediately for correction"},"hasOutputParser":true,"toolDescription":"Prepares and submits insurance claims to payers, tracks submission status, and identifies submission errors"},"typeVersion":3},{"id":"5653ede8-4243-48b1-9b5f-882b457551c2","name":"Denial Detection Agent Tool","type":"@n8n/n8n-nodes-langchain.agentTool","position":[-1248,576],"parameters":{"text":"={{ $fromAI(\"submittedClaim\", \"Submitted claim data for denial analysis\", \"json\") }}","options":{"systemMessage":"You are a Denial Detection Specialist Agent responsible for identifying claim denials and recommending corrective actions.\n\nYour task is to:\n1. Analyze payer responses and remittance advice (835 EDI, EOB)\n2. Identify denial reasons and denial codes\n3. Categorize denials (coding errors, medical necessity, authorization, timely filing)\n4. Assess appeal viability and success probability\n5. Recommend correction strategies and retry approaches\n6. Calculate financial impact of denials\n7. Return structured denial analysis results\n\nCRITICAL RULES:\n- Accurately identify root causes of denials\n- Prioritize high-value claims for immediate action\n- Document denial patterns for trend analysis\n- Flag systemic issues requiring process improvements"},"hasOutputParser":true,"toolDescription":"Analyzes claim denials, identifies root causes, recommends corrections, and assesses appeal viability"},"typeVersion":3},{"id":"feddb7dc-0893-4c21-a5d1-190361540fa9","name":"Payer Follow-up Agent Tool","type":"@n8n/n8n-nodes-langchain.agentTool","position":[-960,576],"parameters":{"text":"={{ $fromAI(\"denialData\", \"Denial data requiring payer follow-up\", \"json\") }}","options":{"systemMessage":"You are a Payer Follow-up Specialist Agent responsible for managing unresolved claims and payer communications.\n\nYour task is to:\n1. Identify claims requiring payer follow-up (pending, denied, underpaid)\n2. Determine appropriate follow-up channels (phone, portal, email)\n3. Prepare follow-up documentation and supporting evidence\n4. Track follow-up attempts and payer responses\n5. Escalate unresolved claims to revenue specialists\n6. Calculate aging and prioritize by financial impact\n7. Return structured follow-up action plan\n\nCRITICAL RULES:\n- Follow timely filing deadlines strictly\n- Document all payer communications for audit trails\n- Escalate high-value or aged claims immediately\n- Maintain professional payer relationships"},"hasOutputParser":true,"toolDescription":"Manages payer follow-ups for unresolved claims, tracks communications, and escalates high-priority cases"},"typeVersion":3},{"id":"f897c624-ed2a-47c9-8ca2-f75f8664b8a9","name":"Orchestrator Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-672,576],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"orchestrationSummary\": {\n      \"type\": \"string\",\n      \"description\": \"Summary of orchestration actions taken\"\n    },\n    \"agentsCalled\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"List of agent tools invoked\"\n    },\n    \"riskLevel\": {\n      \"type\": \"string\",\n      \"enum\": [\"LOW\", \"MEDIUM\", \"HIGH\", \"CRITICAL\"],\n      \"description\": \"Overall risk assessment\"\n    },\n    \"complianceFlags\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"Compliance issues identified\"\n    },\n    \"requiresEscalation\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether case requires human review\"\n    },\n    \"nextActions\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"Recommended next steps\"\n    },\n    \"financialImpact\": {\n      \"type\": \"number\",\n      \"description\": \"Estimated financial impact in dollars\"\n    }\n  },\n  \"required\": [\"orchestrationSummary\", \"agentsCalled\", \"riskLevel\", \"complianceFlags\", \"requiresEscalation\", \"nextActions\", \"financialImpact\"]\n}"},"typeVersion":1.3},{"id":"459895d4-b572-4f35-a0c9-8402592c92f8","name":"Coding Validation Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-1696,784],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"validationStatus\": {\n      \"type\": \"string\",\n      \"enum\": [\"VALID\", \"INVALID\", \"NEEDS_REVIEW\"],\n      \"description\": \"Overall validation status\"\n    },\n    \"icd10Codes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"code\": {\"type\": \"string\"},\n          \"description\": {\"type\": \"string\"},\n          \"valid\": {\"type\": \"boolean\"},\n          \"issues\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}\n        }\n      }\n    },\n    \"cptCodes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"code\": {\"type\": \"string\"},\n          \"description\": {\"type\": \"string\"},\n          \"valid\": {\"type\": \"boolean\"},\n          \"issues\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}\n        }\n      }\n    },\n    \"complianceRisks\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"Identified compliance violations\"\n    },\n    \"recommendations\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"Recommended corrections\"\n    }\n  },\n  \"required\": [\"validationStatus\", \"icd10Codes\", \"cptCodes\", \"complianceRisks\", \"recommendations\"]\n}"},"typeVersion":1.3},{"id":"97352772-152b-4e3b-a246-1bf45c77e013","name":"Claims Submission Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-1392,848],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"submissionStatus\": {\n      \"type\": \"string\",\n      \"enum\": [\"SUBMITTED\", \"REJECTED\", \"PENDING\", \"ERROR\"],\n      \"description\": \"Submission outcome\"\n    },\n    \"confirmationNumber\": {\n      \"type\": \"string\",\n      \"description\": \"Payer confirmation or tracking ID\"\n    },\n    \"payerName\": {\n      \"type\": \"string\",\n      \"description\": \"Insurance payer name\"\n    },\n    \"submissionDate\": {\n      \"type\": \"string\",\n      \"description\": \"Date and time of submission\"\n    },\n    \"errors\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"Submission errors if any\"\n    },\n    \"correctionNeeded\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether claim needs correction\"\n    },\n    \"estimatedPayment\": {\n      \"type\": \"number\",\n      \"description\": \"Expected reimbursement amount\"\n    }\n  },\n  \"required\": [\"submissionStatus\", \"confirmationNumber\", \"payerName\", \"submissionDate\", \"errors\", \"correctionNeeded\", \"estimatedPayment\"]\n}"},"typeVersion":1.3},{"id":"22f8e05f-11bb-470d-8dab-ffc7e5f51ff2","name":"Denial Detection Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-1088,784],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"denialDetected\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether denial was detected\"\n    },\n    \"denialReason\": {\n      \"type\": \"string\",\n      \"description\": \"Primary reason for denial\"\n    },\n    \"denialCode\": {\n      \"type\": \"string\",\n      \"description\": \"Payer denial code\"\n    },\n    \"denialCategory\": {\n      \"type\": \"string\",\n      \"enum\": [\"CODING_ERROR\", \"MEDICAL_NECESSITY\", \"AUTHORIZATION\", \"TIMELY_FILING\", \"ELIGIBILITY\", \"OTHER\"],\n      \"description\": \"Denial category\"\n    },\n    \"appealViable\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether appeal is recommended\"\n    },\n    \"correctionStrategy\": {\n      \"type\": \"string\",\n      \"description\": \"Recommended correction approach\"\n    },\n    \"financialImpact\": {\n      \"type\": \"number\",\n      \"description\": \"Dollar amount at risk\"\n    },\n    \"retryRecommended\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether claim should be resubmitted\"\n    }\n  },\n  \"required\": [\"denialDetected\", \"denialReason\", \"denialCode\", \"denialCategory\", \"appealViable\", \"correctionStrategy\", \"financialImpact\", \"retryRecommended\"]\n}"},"typeVersion":1.3},{"id":"34980791-136b-4f5c-b102-aff74f9456c5","name":"Payer Follow-up Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[-768,800],"parameters":{"schemaType":"manual","inputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"followUpRequired\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether follow-up is needed\"\n    },\n    \"followUpChannel\": {\n      \"type\": \"string\",\n      \"enum\": [\"PHONE\", \"PORTAL\", \"EMAIL\", \"FAX\"],\n      \"description\": \"Recommended communication channel\"\n    },\n    \"payerContactInfo\": {\n      \"type\": \"string\",\n      \"description\": \"Payer contact details\"\n    },\n    \"claimAge\": {\n      \"type\": \"number\",\n      \"description\": \"Days since claim submission\"\n    },\n    \"priority\": {\n      \"type\": \"string\",\n      \"enum\": [\"LOW\", \"MEDIUM\", \"HIGH\", \"URGENT\"],\n      \"description\": \"Follow-up priority level\"\n    },\n    \"escalationNeeded\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether escalation to specialist is required\"\n    },\n    \"actionPlan\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"description\": \"Step-by-step follow-up actions\"\n    }\n  },\n  \"required\": [\"followUpRequired\", \"followUpChannel\", \"payerContactInfo\", \"claimAge\", \"priority\", \"escalationNeeded\", \"actionPlan\"]\n}"},"typeVersion":1.3},{"id":"7ed45553-9b19-40f3-97f5-c87ddadeaf40","name":"OpenAI Model - Orchestrator","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1952,576],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini"},"options":{},"builtInTools":{}},"credentials":{"openAiApi":{"id":"mv2ECvRtbAK63G2g","name":"OpenAi account"}},"typeVersion":1.3},{"id":"22a5c861-07fb-4879-9711-798994c7ac41","name":"OpenAI Model - Coding Validation","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1872,784],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini"},"options":{},"builtInTools":{}},"credentials":{"openAiApi":{"id":"mv2ECvRtbAK63G2g","name":"OpenAi account"}},"typeVersion":1.3},{"id":"2fb10ed8-66e8-4105-9ef4-a048850c292e","name":"OpenAI Model - Claims Submission","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1536,784],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini"},"options":{},"builtInTools":{}},"credentials":{"openAiApi":{"id":"mv2ECvRtbAK63G2g","name":"OpenAi account"}},"typeVersion":1.3},{"id":"8ea1f293-a484-42fc-aa4d-aba582694908","name":"OpenAI Model - Denial Detection","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1232,848],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini"},"options":{},"builtInTools":{}},"credentials":{"openAiApi":{"id":"mv2ECvRtbAK63G2g","name":"OpenAi account"}},"typeVersion":1.3},{"id":"2ae98fa2-590e-4e61-9a7c-0b96b997d221","name":"OpenAI Model - Payer Follow-up","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-928,784],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini"},"options":{},"builtInTools":{}},"credentials":{"openAiApi":{"id":"mv2ECvRtbAK63G2g","name":"OpenAi account"}},"typeVersion":1.3},{"id":"40e58e6f-cd48-44ba-b494-b25e028fc82d","name":"Route by Risk Level","type":"n8n-nodes-base.switch","position":[-464,384],"parameters":{"rules":{"values":[{"outputKey":"High Risk","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.riskLevel }}","rightValue":"HIGH"},{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.riskLevel }}","rightValue":"CRITICAL"}]},"renameOutput":true},{"outputKey":"Standard Claims","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.riskLevel }}","rightValue":"MEDIUM"}]},"renameOutput":true},{"outputKey":"Denials","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.riskLevel }}","rightValue":"LOW"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra","renameFallbackOutput":"Unclassified"}},"typeVersion":3.4},{"id":"11593528-0d32-4f54-84cd-dcb3dc670982","name":"Check Compliance Flags","type":"n8n-nodes-base.if","position":[-160,416],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"or","conditions":[{"id":"id-1","operator":{"type":"array","operation":"lengthGt"},"leftValue":"={{ $('Route by Risk Level').item.json.complianceFlags }}","rightValue":"0"},{"id":"id-2","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $('Route by Risk Level').item.json.requiresEscalation }}","rightValue":"true"}]}},"typeVersion":2.3},{"id":"2a5e8833-a156-4166-8142-0c1f2ca1d8c3","name":"Store Audit Trail","type":"n8n-nodes-base.dataTable","position":[64,320],"parameters":{"columns":{"value":{"status":"={{ $json.status }}","claim_id":"={{ $json.claim_id }}","timestamp":"={{ $now.toISO() }}","patient_id":"={{ $json.patient_id }}","risk_level":"={{ $json.risk_level }}","total_amount":"={{ $json.total_amount }}","actions_taken":"={{ $json.actions_taken }}","agents_called":"={{ $json.agents_called }}","compliance_flags":"={{ $json.compliance_flags }}"},"mappingMode":"defineBelow"},"options":{},"dataTableId":{"__rl":true,"mode":"name","value":"RevenueCycleAuditTrail"}},"typeVersion":1.1},{"id":"2bb2b46a-0e2c-491d-bf19-6d5f2f857c3e","name":"Store Claims Records","type":"n8n-nodes-base.dataTable","position":[64,704],"parameters":{"columns":{"value":{"payer":"={{ $json.payer }}","claim_id":"={{ $json.claim_id }}","patient_id":"={{ $json.patient_id }}","patient_name":"={{ $json.patient_name }}","submission_date":"={{ $json.submission_date }}","estimated_payment":"={{ $json.estimated_payment }}","submission_status":"={{ $json.submission_status }}","confirmation_number":"={{ $json.confirmation_number }}"},"mappingMode":"defineBelow"},"options":{},"dataTableId":{"__rl":true,"mode":"name","value":"ClaimsRecords"}},"typeVersion":1.1},{"id":"c0f29359-20dc-4592-9aa7-b84a53526c91","name":"Store Denial Records","type":"n8n-nodes-base.dataTable","position":[64,896],"parameters":{"columns":{"value":{"claim_id":"={{ $json.claim_id }}","denial_code":"={{ $json.denial_code }}","denial_reason":"={{ $json.denial_reason }}","denial_category":"={{ $json.denial_category }}","appeal_viability":"={{ $json.appeal_viability }}","financial_impact":"={{ $json.financial_impact }}","correction_strategy":"={{ $json.correction_strategy }}"},"mappingMode":"defineBelow"},"options":{},"dataTableId":{"__rl":true,"mode":"name","value":"DenialRecords"}},"typeVersion":1.1},{"id":"a3a5dc62-1a26-4aa9-b28e-030c9a1ba68d","name":"Merge Results","type":"n8n-nodes-base.merge","position":[288,608],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"7649abc8-9ec3-4dab-8b9a-7c014f403b5c","name":"Escalate to Revenue Specialist","type":"n8n-nodes-base.emailSend","position":[64,512],"webhookId":"49e3d4ca-4c06-4407-befa-792bb50c8153","parameters":{"html":"=<!DOCTYPE html>\n<html>\n<head>\n  <style>\n    body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n    .header { background-color: #d32f2f; color: white; padding: 20px; text-align: center; }\n    .content { padding: 20px; }\n    .section { margin-bottom: 25px; }\n    .section-title { font-size: 18px; font-weight: bold; color: #d32f2f; margin-bottom: 10px; border-bottom: 2px solid #d32f2f; padding-bottom: 5px; }\n    .info-grid { display: grid; grid-template-columns: 150px 1fr; gap: 10px; margin-bottom: 15px; }\n    .info-label { font-weight: bold; color: #555; }\n    .info-value { color: #333; }\n    .risk-high { background-color: #ffebee; padding: 15px; border-left: 4px solid #d32f2f; margin: 15px 0; }\n    .flags-list { background-color: #fff3e0; padding: 15px; border-radius: 5px; }\n    .flags-list ul { margin: 10px 0; padding-left: 20px; }\n    .agent-actions { background-color: #f5f5f5; padding: 15px; border-radius: 5px; margin: 10px 0; }\n    .next-steps { background-color: #e3f2fd; padding: 15px; border-radius: 5px; border-left: 4px solid #2196f3; }\n    .next-steps ol { margin: 10px 0; padding-left: 20px; }\n    .footer { background-color: #f5f5f5; padding: 15px; text-align: center; font-size: 12px; color: #666; margin-top: 30px; }\n  </style>\n</head>\n<body>\n  <div class=\"header\">\n    <h1>🚨 REVENUE CYCLE COMPLIANCE ESCALATION</h1>\n    <p>Immediate Action Required</p>\n  </div>\n  \n  <div class=\"content\">\n    <div class=\"section\">\n      <div class=\"section-title\">Orchestration Summary</div>\n      <div class=\"info-grid\">\n        <div class=\"info-label\">Claim ID:</div>\n        <div class=\"info-value\">{{ $json.claimId || 'N/A' }}</div>\n        <div class=\"info-label\">Patient:</div>\n        <div class=\"info-value\">{{ $json.patientName || 'N/A' }}</div>\n        <div class=\"info-label\">Encounter Date:</div>\n        <div class=\"info-value\">{{ $json.encounterDate || 'N/A' }}</div>\n        <div class=\"info-label\">Payer:</div>\n        <div class=\"info-value\">{{ $json.payer || 'N/A' }}</div>\n        <div class=\"info-label\">Claim Amount:</div>\n        <div class=\"info-value\">${{ $json.claimAmount || '0.00' }}</div>\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <div class=\"section-title\">Risk Assessment</div>\n      <div class=\"risk-high\">\n        <strong>Risk Level:</strong> {{ $json.output.riskLevel || 'HIGH' }}<br>\n        <strong>Risk Score:</strong> {{ $json.output.riskScore || 'N/A' }}/100<br>\n        <strong>Confidence:</strong> {{ $json.output.confidence || 'N/A' }}%\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <div class=\"section-title\">Compliance Flags Detected</div>\n      <div class=\"flags-list\">\n        <ul>\n          {{ $json.output.complianceFlags ? $json.output.complianceFlags.map(flag => '<li><strong>' + flag.type + ':</strong> ' + flag.description + ' (Severity: ' + flag.severity + ')</li>').join('') : '<li>No specific flags available</li>' }}\n        </ul>\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <div class=\"section-title\">Financial Impact</div>\n      <div class=\"info-grid\">\n        <div class=\"info-label\">Potential Loss:</div>\n        <div class=\"info-value\">${{ $json.output.potentialLoss || '0.00' }}</div>\n        <div class=\"info-label\">Recovery Probability:</div>\n        <div class=\"info-value\">{{ $json.output.recoveryProbability || 'N/A' }}%</div>\n        <div class=\"info-label\">Days in AR:</div>\n        <div class=\"info-value\">{{ $json.output.daysInAR || 'N/A' }}</div>\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <div class=\"section-title\">Agent Actions Taken</div>\n      <div class=\"agent-actions\">\n        <strong>Coding Validation:</strong> {{ $json.output.codingValidation || 'Completed with issues detected' }}<br><br>\n        <strong>Claims Submission:</strong> {{ $json.output.claimsSubmission || 'Held pending review' }}<br><br>\n        <strong>Denial Detection:</strong> {{ $json.output.denialDetection || 'High probability of denial identified' }}<br><br>\n        <strong>Payer Follow-up:</strong> {{ $json.output.payerFollowup || 'Escalation recommended' }}\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <div class=\"section-title\">Next Steps Required</div>\n      <div class=\"next-steps\">\n        <ol>\n          <li>Review compliance flags and validate coding accuracy</li>\n          <li>Assess financial impact and recovery strategy</li>\n          <li>Determine if claim should be corrected and resubmitted or appealed</li>\n          <li>Document all actions taken in the audit trail</li>\n          <li>Coordinate with clinical team if documentation is needed</li>\n          <li>Update payer communication log with resolution plan</li>\n        </ol>\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <div class=\"section-title\">Additional Details</div>\n      <div class=\"info-value\">\n        {{ $json.output.additionalNotes || 'This claim requires immediate attention from a revenue cycle specialist due to compliance concerns and high financial risk.' }}\n      </div>\n    </div>\n  </div>\n\n  <div class=\"footer\">\n    <p>This escalation was generated automatically by the AI-Powered Revenue Cycle Orchestration System</p>\n    <p>Timestamp: {{ $now.toISO() }}</p>\n    <p>For questions, contact the Revenue Cycle Management team</p>\n  </div>\n</body>\n</html>","options":{},"subject":"=ESCALATION: Revenue Cycle Compliance Issue - {{ $json.output.riskLevel }} Risk","toEmail":"={{ $('Workflow Configuration').first().json.revenueSpecialistEmail }}","fromEmail":"<__PLACEHOLDER_VALUE__Sender email address__>"},"typeVersion":2.1},{"id":"fc909bcd-f61c-4c50-b907-796f1c2961b8","name":"Format Final Report","type":"n8n-nodes-base.set","position":[736,608],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"reportTitle","type":"string","value":"Revenue Cycle Processing Report"},{"id":"id-2","name":"reportDate","type":"string","value":"={{ $now.toISO() }}"},{"id":"id-3","name":"summary","type":"string","value":"={{ 'Metrics: ' + JSON.stringify($('Calculate Metrics').item.json) + ' | Orchestration: ' + JSON.stringify($('Orchestrator Agent').item.json) }}"},{"id":"id-4","name":"status","type":"string","value":"COMPLETED"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"bc4b078c-b07b-4e5b-adc9-e54c51476b2d","name":"Calculate Metrics","type":"n8n-nodes-base.code","position":[512,608],"parameters":{"jsCode":"// Calculate Revenue Cycle Metrics\nconst items = $input.all();\n\n// Initialize counters\nlet totalClaims = 0;\nlet deniedClaims = 0;\nlet totalClaimValue = 0;\nlet complianceIssues = 0;\nlet escalations = 0;\nlet processingTimes = [];\n\n// Process each item\nfor (const item of items) {\n  const data = item.json;\n  \n  // Count total claims\n  if (data.claimId || data.claim_id) {\n    totalClaims++;\n  }\n  \n  // Count denials\n  if (data.status === 'denied' || data.denial_detected === true || data.isDenied === true) {\n    deniedClaims++;\n  }\n  \n  // Sum claim values\n  if (data.claimAmount || data.claim_amount || data.amount) {\n    totalClaimValue += parseFloat(data.claimAmount || data.claim_amount || data.amount || 0);\n  }\n  \n  // Count compliance issues\n  if (data.complianceFlag === true || data.compliance_flag === true || data.hasComplianceIssue === true) {\n    complianceIssues++;\n  }\n  \n  // Count escalations\n  if (data.escalated === true || data.requiresEscalation === true) {\n    escalations++;\n  }\n  \n  // Collect processing times\n  if (data.processingTime || data.processing_time) {\n    processingTimes.push(parseFloat(data.processingTime || data.processing_time));\n  }\n}\n\n// Calculate metrics\nconst denialRate = totalClaims > 0 ? (deniedClaims / totalClaims * 100).toFixed(2) : 0;\nconst averageClaimValue = totalClaims > 0 ? (totalClaimValue / totalClaims).toFixed(2) : 0;\nconst complianceScore = totalClaims > 0 ? ((totalClaims - complianceIssues) / totalClaims * 100).toFixed(2) : 100;\nconst escalationRate = totalClaims > 0 ? (escalations / totalClaims * 100).toFixed(2) : 0;\nconst averageProcessingTime = processingTimes.length > 0 \n  ? (processingTimes.reduce((a, b) => a + b, 0) / processingTimes.length).toFixed(2) \n  : 0;\n\n// Return metrics\nreturn [\n  {\n    json: {\n      metrics: {\n        totalClaimsProcessed: totalClaims,\n        deniedClaims: deniedClaims,\n        denialRate: parseFloat(denialRate),\n        totalClaimValue: parseFloat(totalClaimValue.toFixed(2)),\n        averageClaimValue: parseFloat(averageClaimValue),\n        complianceScore: parseFloat(complianceScore),\n        complianceIssues: complianceIssues,\n        escalations: escalations,\n        escalationRate: parseFloat(escalationRate),\n        averageProcessingTime: parseFloat(averageProcessingTime),\n        timestamp: new Date().toISOString()\n      },\n      summary: {\n        message: `Processed ${totalClaims} claims with ${denialRate}% denial rate and ${complianceScore}% compliance score`,\n        totalRevenue: parseFloat(totalClaimValue.toFixed(2)),\n        performanceStatus: denialRate < 5 ? 'Excellent' : denialRate < 10 ? 'Good' : denialRate < 15 ? 'Fair' : 'Needs Improvement'\n      }\n    }\n  }\n];"},"typeVersion":2},{"id":"e038b99b-d46c-4a90-bed2-f9fff64dc0bf","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1456,-224],"parameters":{"color":6,"width":640,"height":336,"content":"## Prerequisites\nn8n, OpenAI API key (GPT-4) and Gmail or SMTP account \n## Use Cases\nHospital billing departments automating claims submission and denial follow-up\n## Customization\nSwap OpenAI for NVIDIA NIM or Anthropic models in any agent node and add Slack alerts alongside email escalation\n## Benefits\nReduces manual claims review by 80%+ through parallel AI agent processing\n"},"typeVersion":1},{"id":"8c2b5738-bce1-405f-925b-26a25b8c63b1","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-2016,-144],"parameters":{"width":480,"height":272,"content":"## Setup Steps\n1. Import workflow JSON into your n8n instance.\n2. Add OpenAI API credentials.\n3. Configure Schedule Trigger with desired processing frequency. \n4. Update Workflow Configuration node with your billing system endpoint or sample data path.\n5. Set Gmail/SMTP credentials for the Escalate to Revenue Specialist email node.\n6. Connect Google Sheets or database nodes with appropriate credentials and sheet IDs.\n7. Test with simulated billing data before enabling live data sources."},"typeVersion":1},{"id":"c3fa2cd3-51bc-4eae-a771-42af7673068a","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-2656,-144],"parameters":{"width":608,"height":304,"content":"## How It Works\nThis workflow automates end-to-end medical claims processing using a multi-agent AI orchestration system built on OpenAI GPT-4. It targets healthcare revenue cycle teams, billing departments, and hospital administrators burdened by manual claims adjudication, coding errors, and payer denials. The workflow triggers on a schedule, loads billing data, and routes it through an Orchestrator Agent that coordinates four specialist sub-agents: Coding Validation, Claims Submission, Denial Detection, and Payer Follow-up. Each agent independently validates, submits, or flags claims. Results are parsed, merged, and routed by risk level. Final metrics and a formatted report close the cycle, giving teams real-time visibility into claim status, denial patterns, and revenue recovery.\n"},"typeVersion":1},{"id":"e8f51f8f-a695-45f3-966e-d066fc3ec2b7","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[0,192],"parameters":{"color":7,"width":976,"height":864,"content":"## Escalation & Reporting\n**What:** High-risk claims email Revenue Specialist; metrics calculated; final report generated.\n**Why:** Ensures human oversight on complex cases while automating routine outcomes."},"typeVersion":1},{"id":"23bd3e95-8ba6-46a2-bd6e-1e6af9162be0","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-1968,208],"parameters":{"color":7,"width":1424,"height":864,"content":"## Orchestrator Agent\n**What:** Central AI agent delegates tasks to four specialist sub-agents.\n**Why:** Enables parallel, specialized processing—improving accuracy and speed."},"typeVersion":1},{"id":"bbff7e5e-d869-453f-922c-d9c79d754b46","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-2672,224],"parameters":{"color":7,"width":672,"height":672,"content":"\n## Simulate Billing Data\n**What:** Generates or loads EHR/billing records for processing.\n**Why:** Provides structured claim input for downstream AI agents."},"typeVersion":1},{"id":"ba4b2fe5-3c2f-49d5-8598-dcae535a0126","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-512,192],"parameters":{"color":7,"width":480,"height":848,"content":"## Risk Routing & Storage\n**What:** Claims are routed by risk level; stored in Claims, Denial, or Audit records.\n**Why:** Prioritizes high-risk cases and maintains full compliance audit trails."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"8308a3bc-094d-4c12-9a9c-0520c5c351e5","connections":{"Merge Results":{"main":[[{"node":"Calculate Metrics","type":"main","index":0}]]},"Calculate Metrics":{"main":[[{"node":"Format Final Report","type":"main","index":0}]]},"Store Audit Trail":{"main":[[{"node":"Merge Results","type":"main","index":0}]]},"Orchestrator Agent":{"main":[[{"node":"Route by Risk Level","type":"main","index":0}]]},"Route by Risk Level":{"main":[[{"node":"Check Compliance Flags","type":"main","index":0}],[{"node":"Store Claims Records","type":"main","index":0}],[{"node":"Store Denial Records","type":"main","index":0}]]},"Store Claims Records":{"main":[[{"node":"Merge Results","type":"main","index":0}]]},"Store Denial Records":{"main":[[{"node":"Merge Results","type":"main","index":1}]]},"Check Compliance Flags":{"main":[[{"node":"Escalate to Revenue Specialist","type":"main","index":0}],[{"node":"Store Audit Trail","type":"main","index":0}]]},"Workflow Configuration":{"main":[[{"node":"Simulate EHR/Billing Data","type":"main","index":0}]]},"Simulate EHR/Billing Data":{"main":[[{"node":"Orchestrator Agent","type":"main","index":0}]]},"Orchestrator Output Parser":{"ai_outputParser":[[{"node":"Orchestrator Agent","type":"ai_outputParser","index":0}]]},"Payer Follow-up Agent Tool":{"ai_tool":[[{"node":"Orchestrator Agent","type":"ai_tool","index":0}]]},"Denial Detection Agent Tool":{"ai_tool":[[{"node":"Orchestrator Agent","type":"ai_tool","index":0}]]},"OpenAI Model - Orchestrator":{"ai_languageModel":[[{"node":"Orchestrator Agent","type":"ai_languageModel","index":0}]]},"Claims Submission Agent Tool":{"ai_tool":[[{"node":"Orchestrator Agent","type":"ai_tool","index":0}]]},"Coding Validation Agent Tool":{"ai_tool":[[{"node":"Orchestrator Agent","type":"ai_tool","index":0}]]},"Payer Follow-up Output Parser":{"ai_outputParser":[[{"node":"Payer Follow-up Agent Tool","type":"ai_outputParser","index":0}]]},"Denial Detection Output Parser":{"ai_outputParser":[[{"node":"Denial Detection Agent Tool","type":"ai_outputParser","index":0}]]},"Escalate to Revenue Specialist":{"main":[[{"node":"Merge Results","type":"main","index":1}]]},"OpenAI Model - Payer Follow-up":{"ai_languageModel":[[{"node":"Payer Follow-up Agent Tool","type":"ai_languageModel","index":0}]]},"Claims Submission Output Parser":{"ai_outputParser":[[{"node":"Claims Submission Agent Tool","type":"ai_outputParser","index":0}]]},"Coding Validation Output Parser":{"ai_outputParser":[[{"node":"Coding Validation Agent Tool","type":"ai_outputParser","index":0}]]},"OpenAI Model - Denial Detection":{"ai_languageModel":[[{"node":"Denial Detection Agent Tool","type":"ai_languageModel","index":0}]]},"OpenAI Model - Claims Submission":{"ai_languageModel":[[{"node":"Claims Submission Agent Tool","type":"ai_languageModel","index":0}]]},"OpenAI Model - Coding Validation":{"ai_languageModel":[[{"node":"Coding Validation Agent Tool","type":"ai_languageModel","index":0}]]},"Schedule Trigger - Process Claims":{"main":[[{"node":"Workflow Configuration","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":34,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.dataTable":{"count":3},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"@n8n/n8n-nodes-langchain.agentTool":{"count":4},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":5},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":5}}},"status":"published","readyToDemo":null,"user":{"name":"Cheng Siong Chin","username":"cschin","bio":"Dr. Cheng Siong CHIN is an n8n workflow creator specializing in AI-powered automation, agent orchestration, and intelligent system integrations. He designs and builds end-to-end workflows that combine LLMs, APIs, and data pipelines to streamline complex processes and deliver production-ready automation solutions. Contact me to discuss custom AI workflows and agent architectures.\n","verified":true,"links":["https://gravatar.com/mysticluminary9fa255f7f5"],"avatar":"https://gravatar.com/avatar/54544f98e839bb9dd9a764ad1e6823eeddb6db5138d201e42f291a7b0a73303f?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1310,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agentTool","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Recommended Tools"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent Tool","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent Tool","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1315,"icon":"fa:table","name":"n8n-nodes-base.dataTable","codex":{"data":{"alias":["data","table","knowledge","data table","table","sheet","database","data base","mysql","postgres","postgresql","airtable","supabase","noco","notion"],"details":"Data table","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.datatable/"}]},"categories":["Core Nodes","Development"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\",\"transform\"]","defaults":{"name":"Data table"},"iconData":{"icon":"table","type":"icon"},"displayName":"Data table","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":47,"name":"AI Chatbot"}],"image":[]}}