{"workflow":{"id":13688,"name":"Validate property documents with Claude (Anthropic), Google Drive and Slack","views":40,"recentViews":0,"totalViews":40,"createdAt":"2026-02-25T07:56:40.289Z","description":"This workflow ingests property document packages submitted via webhook or monitored cloud storage, extracts text from each file, runs Claude AI to verify legal compliance, detect missing or expired documents, flag invalid clauses, and produces a structured validation report with remediation guidance.\n\n### How it works\n\n1. **Trigger** — Webhook submission or Google Drive folder watch\n2. **Intake & Register** — Logs submission, assigns case ID, normalises metadata\n3. **Download Documents** — Fetches each file from Drive / S3 / URL\n4. **Extract Text** — Reads PDF/DOCX content via parser node\n5. **Classify Document Type** — Identifies contract, title, disclosure, certificate, etc.\n6. **AI Legal Compliance Check** — Claude AI validates each document against jurisdiction rules\n7. **Aggregate Validation Results** — Merges per-document findings into a case report\n8. **Check Required Doc Checklist** — Detects missing mandatory documents\n9. **Route by Compliance Status** — Branches on PASS / FAIL / REQUIRES_REVIEW\n10. **Notify Submitter** — Email with full validation report and remediation steps\n11. **Alert Legal Team on Slack** — Flags FAIL or critical issues to legal channel\n12. **Create Audit Record** — Writes full report to Google Sheets compliance log\n13. **Generate PDF Report** — Stores formatted report back to Drive\n14. **Return Validation Response** — Sends structured JSON result to caller\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** — Claude AI for legal document analysis\n   - **Google Drive OAuth** — Document intake and report storage\n   - **Google Sheets OAuth** — Compliance audit log\n   - **Slack OAuth** — Legal team alerts\n   - **SendGrid / SMTP** — Submitter notification emails\n3. Set your Google Drive folder IDs for intake and output\n4. Configure jurisdiction rules in the AI prompt node\n5. Set mandatory document checklist in the Checklist node\n6. Activate the workflow\n\n### Sample Webhook Payload\n```json\n{\n  \"caseId\": \"CASE-2025-0871\",\n  \"submitterEmail\": \"agent@realty.com\",\n  \"propertyAddress\": \"42 Oak Street, Sydney NSW 2000\",\n  \"transactionType\": \"sale\",\n  \"jurisdiction\": \"NSW\",\n  \"documents\": [\n    {\n      \"name\": \"Contract of Sale\",\n      \"type\": \"contract\",\n      \"driveFileId\": \"1aBcDeFgHiJkL\"\n    },\n    {\n      \"name\": \"Title Search\",\n      \"type\": \"title\",\n      \"driveFileId\": \"2mNoPqRsTuVwX\"\n    }\n  ]\n}\n```\n\n### Document Types Supported\n- Contract of Sale / Purchase Agreement\n- Certificate of Title / Title Search\n- Vendor Disclosure Statement\n- Section 32 / Vendor Statement\n- Building & Pest Inspection Report\n- Strata Report / Body Corporate Docs\n- Zoning Certificate / Planning Certificate\n- Land Tax Certificate\n- Mortgage / Discharge of Mortgage\n- Lease Agreement / Tenancy Documents\n- Council Rates Notice\n- Smoke Alarm / Safety Certificates\n\n### Features\n- Multi-document batch validation per submission\n- Jurisdiction-aware compliance rules (AU/UK/US configurable)\n- Missing document detection against mandatory checklist\n- Expiry date validation for time-sensitive certificates\n- Critical clause and red-flag detection\n- Automated remediation guidance per issue\n- Full audit trail in Google Sheets\n- PDF validation report stored to Drive\n\n---\n\n**Explore More Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to design AI-powered lead nurturing, content engagement, and multi-platform reply workflows tailored to your growth strategy.","workflow":{"id":"VODrQQcFjW901hiH","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"Automated Property Document Validator","tags":[],"nodes":[{"id":"a65a3d4f-cc2b-487c-99f4-dd01491ac8d5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[16,-336],"parameters":{"width":960,"height":1932,"content":"## Automated Property Document Validator\n\nThis workflow ingests property document packages submitted via webhook or monitored cloud storage, extracts text from each file, runs Claude AI to verify legal compliance, detect missing or expired documents, flag invalid clauses, and produces a structured validation report with remediation guidance.\n\n### How it works\n\n1. **Trigger** — Webhook submission or Google Drive folder watch\n2. **Intake & Register** — Logs submission, assigns case ID, normalises metadata\n3. **Download Documents** — Fetches each file from Drive / S3 / URL\n4. **Extract Text** — Reads PDF/DOCX content via parser node\n5. **Classify Document Type** — Identifies contract, title, disclosure, certificate, etc.\n6. **AI Legal Compliance Check** — Claude AI validates each document against jurisdiction rules\n7. **Aggregate Validation Results** — Merges per-document findings into a case report\n8. **Check Required Doc Checklist** — Detects missing mandatory documents\n9. **Route by Compliance Status** — Branches on PASS / FAIL / REQUIRES_REVIEW\n10. **Notify Submitter** — Email with full validation report and remediation steps\n11. **Alert Legal Team on Slack** — Flags FAIL or critical issues to legal channel\n12. **Create Audit Record** — Writes full report to Google Sheets compliance log\n13. **Generate PDF Report** — Stores formatted report back to Drive\n14. **Return Validation Response** — Sends structured JSON result to caller\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** — Claude AI for legal document analysis\n   - **Google Drive OAuth** — Document intake and report storage\n   - **Google Sheets OAuth** — Compliance audit log\n   - **Slack OAuth** — Legal team alerts\n   - **SendGrid / SMTP** — Submitter notification emails\n3. Set your Google Drive folder IDs for intake and output\n4. Configure jurisdiction rules in the AI prompt node\n5. Set mandatory document checklist in the Checklist node\n6. Activate the workflow\n\n### Sample Webhook Payload\n```json\n{\n  \"caseId\": \"CASE-2025-0871\",\n  \"submitterEmail\": \"agent@realty.com\",\n  \"propertyAddress\": \"42 Oak Street, Sydney NSW 2000\",\n  \"transactionType\": \"sale\",\n  \"jurisdiction\": \"NSW\",\n  \"documents\": [\n    {\n      \"name\": \"Contract of Sale\",\n      \"type\": \"contract\",\n      \"driveFileId\": \"1aBcDeFgHiJkL\"\n    },\n    {\n      \"name\": \"Title Search\",\n      \"type\": \"title\",\n      \"driveFileId\": \"2mNoPqRsTuVwX\"\n    }\n  ]\n}\n```\n\n### Document Types Supported\n- Contract of Sale / Purchase Agreement\n- Certificate of Title / Title Search\n- Vendor Disclosure Statement\n- Section 32 / Vendor Statement\n- Building & Pest Inspection Report\n- Strata Report / Body Corporate Docs\n- Zoning Certificate / Planning Certificate\n- Land Tax Certificate\n- Mortgage / Discharge of Mortgage\n- Lease Agreement / Tenancy Documents\n- Council Rates Notice\n- Smoke Alarm / Safety Certificates\n\n### Features\n- Multi-document batch validation per submission\n- Jurisdiction-aware compliance rules (AU/UK/US configurable)\n- Missing document detection against mandatory checklist\n- Expiry date validation for time-sensitive certificates\n- Critical clause and red-flag detection\n- Automated remediation guidance per issue\n- Full audit trail in Google Sheets\n- PDF validation report stored to Drive\n\n---\n\n**Explore More Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to design AI-powered lead nurturing, content engagement, and multi-platform reply workflows tailored to your growth strategy."},"typeVersion":1},{"id":"5d335b19-7bda-4f94-b31e-b1fc5d097e63","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1024,512],"parameters":{"color":4,"width":456,"height":524,"content":"## 1. Intake, Registration & File Retrieval"},"typeVersion":1},{"id":"4eeefba1-7996-4235-8ead-bd68df044e62","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1536,336],"parameters":{"color":4,"width":572,"height":740,"content":"## 2. Document Extraction & Type Classification\n### PDF Text · DOCX Parse · Document Identification"},"typeVersion":1},{"id":"0d49b4ed-2361-46fa-8a48-39d3cbd302dc","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2160,556],"parameters":{"color":4,"width":800,"height":564,"content":"## 3. Claude AI Legal Compliance Analysis"},"typeVersion":1},{"id":"4bef9d01-0ae6-41e4-8b81-71dd13e4acfa","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2992,272],"parameters":{"color":4,"width":920,"height":920,"content":"## 4. Aggregation · Compliance Routing · Notifications · Audit Log"},"typeVersion":1},{"id":"030a3b75-e7e5-44d8-9088-cd3b9ddba482","name":"Receive Document Submission","type":"n8n-nodes-base.webhook","position":[1104,640],"webhookId":"property-document-validator-webhook","parameters":{"path":"validate-property-documents","options":{"allowedOrigins":"*"},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"0d750afe-8f0a-42fc-ade8-f4d5805d5950","name":"Watch Drive Intake Folder","type":"n8n-nodes-base.googleDriveTrigger","position":[1104,832],"parameters":{"event":"fileCreated","options":{},"pollTimes":{"item":[{"mode":"everyMinute"}]},"triggerOn":"specificFolder","folderToWatch":{"__rl":true,"mode":"id","value":"YOUR_INTAKE_FOLDER_ID"}},"credentials":{"googleDriveOAuth2Api":{"id":"credential-id","name":"Google Drive account - test"}},"typeVersion":1,"continueOnFail":true},{"id":"82566bc9-c9e8-472b-9f65-17b516197af0","name":"Register Validation Case","type":"n8n-nodes-base.code","position":[1328,736],"parameters":{"jsCode":"// Support both webhook payload and Drive trigger\nconst webhookData = $input.first()?.json?.body || $input.first()?.json || {};\n\n// Build case record\nconst caseId = webhookData.caseId\n  || `CASE-${new Date().getFullYear()}-${Math.random().toString(36).substr(2,6).toUpperCase()}`;\n\nconst documents = webhookData.documents || [];\n\n// If triggered from Drive (no documents array), build a single-doc list\nconst finalDocs = documents.length > 0 ? documents : [{\n  name: webhookData.name || 'Unknown Document',\n  type: 'unknown',\n  driveFileId: webhookData.id || webhookData.driveFileId || null,\n  url: webhookData.webViewLink || null\n}];\n\nconst caseRecord = {\n  caseId,\n  submitterEmail: webhookData.submitterEmail || webhookData.owners?.[0]?.emailAddress || 'user@example.com',\n  propertyAddress: webhookData.propertyAddress || webhookData.property_address || 'Address not provided',\n  transactionType: (webhookData.transactionType || 'sale').toUpperCase(),\n  jurisdiction: (webhookData.jurisdiction || 'NSW').toUpperCase(),\n  submittedAt: new Date().toISOString(),\n  totalDocuments: finalDocs.length,\n  runId: `RUN-${Date.now()}`\n};\n\n// Emit one item per document so next nodes process in parallel\nreturn finalDocs.map(doc => ({\n  json: {\n    case: caseRecord,\n    document: {\n      docId: `DOC-${Math.random().toString(36).substr(2,8).toUpperCase()}`,\n      name: doc.name || 'Unnamed',\n      declaredType: (doc.type || 'unknown').toLowerCase(),\n      driveFileId: doc.driveFileId || doc.id || null,\n      url: doc.url || null,\n      fileExtension: (doc.name || '').split('.').pop()?.toLowerCase() || 'pdf'\n    }\n  }\n}));"},"typeVersion":2},{"id":"0f0e001b-193b-4e2d-9667-3269faf3e0de","name":"Download Document from Drive","type":"n8n-nodes-base.googleDrive","position":[1552,736],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $json.document.driveFileId }}"},"options":{},"operation":"download"},"credentials":{"googleDriveOAuth2Api":{"id":"credential-id","name":"Google Drive account - test"}},"typeVersion":3,"continueOnFail":true},{"id":"572371fd-4ec1-4c9b-a0d6-2bd6e8e43891","name":"Extract Document Text","type":"n8n-nodes-base.extractFromFile","position":[1776,736],"parameters":{"options":{},"operation":"pdf"},"typeVersion":1,"continueOnFail":true},{"id":"59071362-d097-4c23-841f-1d7abfebb135","name":"Classify & Prepare Document","type":"n8n-nodes-base.code","position":[2000,736],"parameters":{"mode":"runOnceForEachItem","jsCode":"const docMeta = $('Register Validation Case').item.json;\nconst rawText = $('Extract Document Text').item?.json?.text\n  || $('Download Document from Drive').item?.json?.error\n  || 'TEXT_EXTRACTION_FAILED';\n\n// Simple keyword-based classifier as fallback to declared type\nconst text = (rawText || '').toLowerCase().substring(0, 3000);\nconst detectedType = (() => {\n  if (text.includes('contract of sale') || text.includes('agreement for sale') || text.includes('purchase price')) return 'CONTRACT_OF_SALE';\n  if (text.includes('certificate of title') || text.includes('folio identifier') || text.includes('torrens title')) return 'CERTIFICATE_OF_TITLE';\n  if (text.includes('section 32') || text.includes('vendor statement') || text.includes('vendor disclosure')) return 'VENDOR_DISCLOSURE';\n  if (text.includes('strata') || text.includes('body corporate') || text.includes('owners corporation')) return 'STRATA_REPORT';\n  if (text.includes('building inspection') || text.includes('pest inspection') || text.includes('structural')) return 'BUILDING_PEST_REPORT';\n  if (text.includes('zoning') || text.includes('planning certificate') || text.includes('10.7')) return 'PLANNING_CERTIFICATE';\n  if (text.includes('land tax') || text.includes('revenue nsw') || text.includes('state revenue')) return 'LAND_TAX_CERTIFICATE';\n  if (text.includes('mortgage') || text.includes('discharge') || text.includes('encumbrance')) return 'MORTGAGE_DOCUMENT';\n  if (text.includes('lease') || text.includes('tenancy') || text.includes('residential tenancies')) return 'LEASE_AGREEMENT';\n  if (text.includes('council rates') || text.includes('local government') || text.includes('municipal')) return 'RATES_NOTICE';\n  if (text.includes('smoke alarm') || text.includes('safety switch') || text.includes('pool safety')) return 'SAFETY_CERTIFICATE';\n  return docMeta.document.declaredType?.toUpperCase().replace(/ /g,'_') || 'UNKNOWN';\n})();\n\n// Check for potential expiry dates\nconst expiryPatterns = [\n  /expir(?:y|es|ed)\\s*:?\\s*([\\d]{1,2}[\\/-][\\d]{1,2}[\\/-][\\d]{2,4})/gi,\n  /valid until\\s*:?\\s*([\\d]{1,2}[\\/-][\\d]{1,2}[\\/-][\\d]{2,4})/gi,\n  /valid to\\s*:?\\s*([\\d]{1,2}[\\/-][\\d]{1,2}[\\/-][\\d]{2,4})/gi\n];\nconst expiryMatches = [];\nfor (const pattern of expiryPatterns) {\n  const match = rawText.match(pattern);\n  if (match) expiryMatches.push(...match.slice(0,2));\n}\n\nreturn {\n  json: {\n    case: docMeta.case,\n    document: {\n      ...docMeta.document,\n      detectedType,\n      textLength: rawText.length,\n      textPreview: rawText.substring(0, 4000),\n      fullText: rawText.substring(0, 12000),\n      extractionStatus: rawText === 'TEXT_EXTRACTION_FAILED' ? 'FAILED' : 'SUCCESS',\n      expiryDatesFound: expiryMatches\n    }\n  }\n};"},"typeVersion":2},{"id":"a0e09fa8-26a4-4e77-8893-b2d05d14e636","name":"AI Legal Compliance Check","type":"@n8n/n8n-nodes-langchain.agent","position":[2224,736],"parameters":{"text":"=You are a senior property law compliance analyst specialising in Australian real estate transactions (NSW, VIC, QLD, SA, WA). Conduct a thorough legal compliance review of the following property document.\n\n**Case Information:**\n- Case ID: {{ $json.case.caseId }}\n- Property: {{ $json.case.propertyAddress }}\n- Transaction Type: {{ $json.case.transactionType }}\n- Jurisdiction: {{ $json.case.jurisdiction }}\n- Submission Date: {{ $json.case.submittedAt }}\n\n**Document Details:**\n- Document ID: {{ $json.document.docId }}\n- Document Name: {{ $json.document.name }}\n- Declared Type: {{ $json.document.declaredType }}\n- AI Detected Type: {{ $json.document.detectedType }}\n- Extraction Status: {{ $json.document.extractionStatus }}\n- Expiry Dates Found: {{ JSON.stringify($json.document.expiryDatesFound) }}\n- Text Length: {{ $json.document.textLength }} characters\n\n**Document Content (first 12,000 chars):**\n{{ $json.document.fullText }}\n\n---\n\n**Validation Requirements by Document Type:**\n\nCONTRACT_OF_SALE: Check — parties named and signed, property description complete, purchase price stated, deposit terms, settlement date, special conditions, cooling-off rights disclosure, GST clause, subject-to-finance clause if applicable, vendor warranty clauses.\n\nCERTIFICATE_OF_TITLE: Check — folio identifier, registered proprietor matches vendor, encumbrances listed, easements noted, no adverse possession claims, issue date within 3 months.\n\nVENDOR_DISCLOSURE / SECTION_32: Check — all prescribed matters disclosed (Section 32 Conveyancing Act), zoning, outgoings, services, owners corporation, building permits, title details, vendor statement signature.\n\nSTRATA_REPORT: Check — financial status, outstanding levies, pending special levies, building defects, insurance currency, AGM minutes last 2 years, by-laws current.\n\nBUILDING_PEST_REPORT: Check — inspector licence number, inspection date (within 90 days), findings summary, structural defects listed, active pest activity noted, reinspection recommendations.\n\nPLANNING_CERTIFICATE: Check — zoning classification, development restrictions, flood/bushfire overlays, issue date (within 3 months for NSW 10.7).\n\nLAND_TAX_CERTIFICATE: Check — no outstanding land tax, certificate date (within 6 months), property address matches.\n\nSAFETY_CERTIFICATE: Check — smoke alarm compliance, safety switch compliance, pool safety if applicable, compliance date, licensed certifier.\n\nLEASE_AGREEMENT: Check — parties named, term dates, rent amount, bond details, permitted use, maintenance obligations, termination clauses.\n\n**Response Format (JSON only, no markdown):**\n{\n  \"docId\": \"{{ $json.document.docId }}\",\n  \"documentName\": \"{{ $json.document.name }}\",\n  \"confirmedType\": \"DOCUMENT_TYPE_ENUM\",\n  \"typeMismatch\": false,\n  \"complianceStatus\": \"PASS | FAIL | REQUIRES_REVIEW | INCOMPLETE_DATA\",\n  \"overallRiskLevel\": \"CRITICAL | HIGH | MEDIUM | LOW\",\n  \"confidenceScore\": 88,\n  \"isExpired\": false,\n  \"expiryDate\": null,\n  \"daysUntilExpiry\": null,\n  \"passedChecks\": [\"list of checks that passed\"],\n  \"failedChecks\": [\"list of checks that failed with specific reason\"],\n  \"missingInformation\": [\"list of required info not found in document\"],\n  \"criticalFlags\": [\"serious legal issues or red flags found\"],\n  \"warnings\": [\"non-critical issues or cautions\"],\n  \"clauseIssues\": [\n    { \"clause\": \"clause description\", \"issue\": \"problem found\", \"severity\": \"CRITICAL|HIGH|MEDIUM|LOW\" }\n  ],\n  \"remediationSteps\": [\"specific actions required to resolve each issue\"],\n  \"legalReferences\": [\"relevant act/regulation references e.g. Conveyancing Act 1919 s32\"],\n  \"documentSummary\": \"2-3 sentence plain-English summary of this document's compliance status\",\n  \"requiresLegalReview\": false,\n  \"autoApprovable\": false\n}","options":{"systemMessage":"You are a property law compliance specialist. Return JSON only — no markdown, no code blocks, no preamble. Be precise and cite specific legal requirements. Flag any issue that could delay settlement or create legal liability. If document text is empty or extraction failed, set complianceStatus to INCOMPLETE_DATA and explain in missingInformation."},"promptType":"define"},"typeVersion":1.6},{"id":"f30d3121-3ba9-48ca-9148-150865251772","name":"Claude AI Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[2296,960],"parameters":{"model":"=claude-sonnet-4-20250514","options":{"temperature":0.05}},"credentials":{"anthropicApi":{"id":"credential-id","name":"Anthropic account - test"}},"typeVersion":1},{"id":"43a3ef9e-10f3-4ec2-9228-6871e95b6fde","name":"Parse AI Validation Result","type":"n8n-nodes-base.code","position":[2576,736],"parameters":{"mode":"runOnceForEachItem","jsCode":"const aiResponse = $input.item.json;\nlet aiText = aiResponse.response || aiResponse.output || aiResponse.text || '';\n\nif (aiResponse.content && Array.isArray(aiResponse.content)) {\n  aiText = aiResponse.content[0]?.text || '';\n}\n\nconst cleanText = aiText\n  .replace(/```json\\s*/g, '')\n  .replace(/```\\s*/g, '')\n  .trim();\n\nlet validation;\ntry {\n  validation = JSON.parse(cleanText);\n} catch (err) {\n  const match = cleanText.match(/\\{[\\s\\S]*\\}/);\n  if (match) {\n    try { validation = JSON.parse(match[0]); }\n    catch (e2) {\n      validation = {\n        docId: 'PARSE_ERROR',\n        complianceStatus: 'INCOMPLETE_DATA',\n        overallRiskLevel: 'HIGH',\n        confidenceScore: 0,\n        criticalFlags: ['AI response parse failed — manual review required'],\n        remediationSteps: ['Resubmit document for validation'],\n        documentSummary: 'Validation could not be completed due to a processing error.',\n        requiresLegalReview: true,\n        autoApprovable: false\n      };\n    }\n  }\n}\n\nconst upstream = $('Classify & Prepare Document').item.json;\n\nreturn {\n  json: {\n    case: upstream.case,\n    document: upstream.document,\n    validation,\n    validatedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"0892aaee-9b19-4a4e-a8a4-a892bbe9780a","name":"Aggregate All Document Results","type":"n8n-nodes-base.code","position":[2800,736],"parameters":{"jsCode":"const items = $input.all();\nif (items.length === 0) return [{ json: { error: 'No validation results to aggregate' } }];\n\nconst caseInfo = items[0].json.case;\n\n// Mandatory document checklist per transaction type + jurisdiction\nconst MANDATORY_DOCS = {\n  SALE: {\n    NSW: ['CONTRACT_OF_SALE', 'CERTIFICATE_OF_TITLE', 'VENDOR_DISCLOSURE', 'PLANNING_CERTIFICATE'],\n    VIC: ['CONTRACT_OF_SALE', 'CERTIFICATE_OF_TITLE', 'VENDOR_DISCLOSURE', 'BUILDING_PEST_REPORT'],\n    QLD: ['CONTRACT_OF_SALE', 'CERTIFICATE_OF_TITLE', 'BUILDING_PEST_REPORT'],\n    DEFAULT: ['CONTRACT_OF_SALE', 'CERTIFICATE_OF_TITLE']\n  },\n  PURCHASE: {\n    NSW: ['CONTRACT_OF_SALE', 'BUILDING_PEST_REPORT'],\n    DEFAULT: ['CONTRACT_OF_SALE']\n  },\n  LEASE: {\n    DEFAULT: ['LEASE_AGREEMENT', 'SAFETY_CERTIFICATE']\n  }\n};\n\nconst txType = caseInfo.transactionType || 'SALE';\nconst jurisdiction = caseInfo.jurisdiction || 'NSW';\nconst mandatoryList = MANDATORY_DOCS[txType]?.[jurisdiction]\n  || MANDATORY_DOCS[txType]?.DEFAULT\n  || MANDATORY_DOCS.SALE.DEFAULT;\n\n// Collect all confirmed/detected doc types submitted\nconst submittedTypes = items.map(i =>\n  i.json.validation?.confirmedType || i.json.document?.detectedType || 'UNKNOWN'\n);\n\n// Check for missing mandatory docs\nconst missingMandatory = mandatoryList.filter(req => !submittedTypes.includes(req));\n\n// Build per-document summaries\nconst documentResults = items.map(item => ({\n  docId: item.json.document?.docId,\n  name: item.json.document?.name,\n  confirmedType: item.json.validation?.confirmedType || item.json.document?.detectedType,\n  complianceStatus: item.json.validation?.complianceStatus || 'INCOMPLETE_DATA',\n  overallRiskLevel: item.json.validation?.overallRiskLevel || 'HIGH',\n  isExpired: item.json.validation?.isExpired || false,\n  criticalFlags: item.json.validation?.criticalFlags || [],\n  failedChecks: item.json.validation?.failedChecks || [],\n  warnings: item.json.validation?.warnings || [],\n  remediationSteps: item.json.validation?.remediationSteps || [],\n  requiresLegalReview: item.json.validation?.requiresLegalReview || false,\n  autoApprovable: item.json.validation?.autoApprovable || false,\n  documentSummary: item.json.validation?.documentSummary || ''\n}));\n\n// Compute overall case status\nconst hasCritical = documentResults.some(d => d.overallRiskLevel === 'CRITICAL' || d.criticalFlags?.length > 0);\nconst hasFailed = documentResults.some(d => d.complianceStatus === 'FAIL');\nconst hasExpired = documentResults.some(d => d.isExpired);\nconst allPassed = documentResults.every(d => d.complianceStatus === 'PASS');\nconst hasIncomplete = documentResults.some(d => d.complianceStatus === 'INCOMPLETE_DATA');\nconst missingMandatoryExists = missingMandatory.length > 0;\n\nconst overallStatus = hasCritical || missingMandatoryExists\n  ? 'FAIL'\n  : hasFailed || hasExpired\n    ? 'FAIL'\n    : hasIncomplete\n      ? 'REQUIRES_REVIEW'\n      : allPassed\n        ? 'PASS'\n        : 'REQUIRES_REVIEW';\n\nconst criticalCount = documentResults.filter(d => d.overallRiskLevel === 'CRITICAL').length;\nconst highCount = documentResults.filter(d => d.overallRiskLevel === 'HIGH').length;\nconst passCount = documentResults.filter(d => d.complianceStatus === 'PASS').length;\nconst failCount = documentResults.filter(d => d.complianceStatus === 'FAIL').length;\n\n// Build flat remediation list across all docs\nconst allRemediations = [];\nif (missingMandatory.length > 0) {\n  allRemediations.push(`MISSING DOCUMENTS: Submit the following mandatory documents — ${missingMandatory.join(', ')}`);\n}\nfor (const doc of documentResults) {\n  for (const step of (doc.remediationSteps || [])) {\n    allRemediations.push(`[${doc.name}] ${step}`);\n  }\n}\n\nreturn [{\n  json: {\n    case: caseInfo,\n    overallStatus,\n    summary: {\n      totalDocuments: documentResults.length,\n      passed: passCount,\n      failed: failCount,\n      requiresReview: documentResults.filter(d => d.complianceStatus === 'REQUIRES_REVIEW').length,\n      expired: documentResults.filter(d => d.isExpired).length,\n      criticalIssues: criticalCount,\n      highRiskDocs: highCount\n    },\n    missingMandatoryDocuments: missingMandatory,\n    documentResults,\n    allRemediationSteps: allRemediations,\n    requiresLegalReview: documentResults.some(d => d.requiresLegalReview) || hasCritical,\n    canAutoApprove: overallStatus === 'PASS' && documentResults.every(d => d.autoApprovable),\n    aggregatedAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"3963903b-49c7-4594-8f47-2d2793e5b9ef","name":"Route by Compliance Status","type":"n8n-nodes-base.switch","position":[3024,704],"parameters":{"mode":"expression","output":"={{ $json.overallStatus }}"},"typeVersion":3.1},{"id":"eacaba37-bc71-4487-8c4a-bf2e5435be0f","name":"Email Validation Report to Submitter","type":"n8n-nodes-base.emailSend","position":[3248,448],"webhookId":"87e5f806-213a-4437-a4c3-e1c23d62c385","parameters":{"html":"=<html><body style=\"font-family:Arial,sans-serif;max-width:680px;margin:0 auto;padding:24px;color:#222;\">\n<div style=\"background:#1a1a2e;padding:20px 28px;border-radius:8px 8px 0 0;\">\n  <h1 style=\"color:white;margin:0;font-size:1.4em;\">🏠 Property Document Validation Report</h1>\n  <p style=\"color:#aaa;margin:6px 0 0;\">{{ $json.case.caseId }} &bull; {{ new Date($json.aggregatedAt).toLocaleDateString('en-AU') }}</p>\n</div>\n<div style=\"background:#f8f9fa;padding:20px 28px;border:1px solid #ddd;\">\n  <p><strong>Property:</strong> {{ $json.case.propertyAddress }}</p>\n  <p><strong>Transaction:</strong> {{ $json.case.transactionType }} &bull; <strong>Jurisdiction:</strong> {{ $json.case.jurisdiction }}</p>\n  <div style=\"background:{{ $json.overallStatus === 'PASS' ? '#d4edda' : $json.overallStatus === 'FAIL' ? '#f8d7da' : '#fff3cd' }};border:1px solid {{ $json.overallStatus === 'PASS' ? '#c3e6cb' : $json.overallStatus === 'FAIL' ? '#f5c6cb' : '#ffeeba' }};border-radius:6px;padding:14px 18px;margin:16px 0;\">\n    <h2 style=\"margin:0;color:{{ $json.overallStatus === 'PASS' ? '#155724' : $json.overallStatus === 'FAIL' ? '#721c24' : '#856404' }};\">Overall Status: {{ $json.overallStatus }}</h2>\n    <p style=\"margin:6px 0 0;color:#555;\">{{ $json.summary.totalDocuments }} documents reviewed &bull; {{ $json.summary.passed }} passed &bull; {{ $json.summary.failed }} failed &bull; {{ $json.summary.expired }} expired</p>\n  </div>\n  {{ $json.missingMandatoryDocuments.length > 0 ? '<div style=\"background:#f8d7da;border:1px solid #f5c6cb;border-radius:6px;padding:14px 18px;margin:12px 0;\"><strong style=\"color:#721c24;\">⚠️ Missing Mandatory Documents:</strong><ul style=\"margin:8px 0 0;\">' + $json.missingMandatoryDocuments.map(d => '<li>' + d + '</li>').join('') + '</ul></div>' : '' }}\n  <h3 style=\"color:#1a1a2e;border-bottom:2px solid #e94560;padding-bottom:6px;\">Document Results</h3>\n  {{ $json.documentResults.map(doc => '<div style=\"border:1px solid #ddd;border-left:4px solid ' + (doc.complianceStatus === 'PASS' ? '#28a745' : doc.overallRiskLevel === 'CRITICAL' ? '#e94560' : '#ff6b35') + ';border-radius:4px;padding:12px;margin:10px 0;\"><strong>' + doc.name + '</strong> &nbsp;<span style=\"background:' + (doc.complianceStatus === 'PASS' ? '#28a745' : '#e94560') + ';color:white;padding:2px 8px;border-radius:3px;font-size:0.8em;\">' + doc.complianceStatus + '</span><p style=\"margin:6px 0 0;font-size:0.9em;color:#555;\">' + doc.documentSummary + '</p>' + (doc.criticalFlags.length > 0 ? '<p style=\"color:#e94560;margin:4px 0;\"><strong>Critical:</strong> ' + doc.criticalFlags.join('; ') + '</p>' : '') + '</div>').join('') }}\n  {{ $json.allRemediationSteps.length > 0 ? '<h3 style=\"color:#1a1a2e;\">Required Actions</h3><ol style=\"color:#333;\">' + $json.allRemediationSteps.map(s => '<li style=\"margin:6px 0;\">' + s + '</li>').join('') + '</ol>' : '<p style=\"color:#28a745;\">✅ No remediation required. Documents are compliant.</p>' }}\n</div>\n<div style=\"background:#1a1a2e;padding:14px 28px;border-radius:0 0 8px 8px;text-align:center;\">\n  <p style=\"color:#aaa;font-size:0.8em;margin:0;\">Automated validation by AI Property Document Validator &bull; This report does not constitute legal advice. Consult a solicitor for final review.</p>\n</div>\n</body></html>","options":{"appendAttribution":false},"subject":"=🏠 Property Document Validation — {{ $json.overallStatus }} | {{ $json.case.caseId }}","toEmail":"={{ $json.case.submitterEmail }}","fromEmail":"="},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1,"continueOnFail":true},{"id":"760cc9a4-b6e1-4a42-82a2-5ab51c509591","name":"Alert Legal Team on Slack","type":"n8n-nodes-base.httpRequest","position":[3248,640],"parameters":{"url":"https://slack.com/api/chat.postMessage","method":"POST","options":{"timeout":10000},"jsonBody":"={\n  \"channel\": \"{{ $json.overallStatus === 'FAIL' ? '#legal-critical' : '#legal-review' }}\",\n  \"text\": \"🏠 Property Document Validation — {{ $json.overallStatus }}: {{ $json.case.caseId }}\",\n  \"blocks\": [\n    {\n      \"type\": \"header\",\n      \"text\": { \"type\": \"plain_text\", \"text\": \"📋 {{ $json.overallStatus }} — {{ $json.case.caseId }}\" }\n    },\n    {\n      \"type\": \"section\",\n      \"fields\": [\n        { \"type\": \"mrkdwn\", \"text\": \"*Property:*\\n{{ $json.case.propertyAddress }}\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Transaction:*\\n{{ $json.case.transactionType }} ({{ $json.case.jurisdiction }})\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Submitter:*\\n{{ $json.case.submitterEmail }}\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Docs Reviewed:*\\n{{ $json.summary.totalDocuments }} ({{ $json.summary.passed }} passed, {{ $json.summary.failed }} failed)\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Critical Issues:*\\n{{ $json.summary.criticalIssues }}\" },\n        { \"type\": \"mrkdwn\", \"text\": \"*Missing Mandatory:*\\n{{ $json.missingMandatoryDocuments.length > 0 ? $json.missingMandatoryDocuments.join(', ') : 'None' }}\" }\n      ]\n    },\n    {\n      \"type\": \"section\",\n      \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Top Remediation Actions:*\\n{{ $json.allRemediationSteps.slice(0,3).map((s,i) => (i+1)+'. '+s).join('\\\\n') || 'No actions required' }}\" }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Legal Review Required:* {{ $json.requiresLegalReview ? '🔴 YES — Assign solicitor immediately' : '🟢 No' }}\" }\n    }\n  ]\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"slackApi"},"credentials":{"slackApi":{"id":"credential-id","name":"Slack account - test "}},"typeVersion":4.2,"continueOnFail":true},{"id":"68960595-0d5e-4806-81e6-3a0e78b6737f","name":"Write Compliance Audit Record","type":"n8n-nodes-base.googleSheets","position":[3248,832],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":true},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"=YOUR_SHEET_TAB_ID"},"documentId":{"__rl":true,"mode":"id","value":"=YOUR_GOOGLE_SHEET_ID"},"authentication":"serviceAccount"},"credentials":{"googleApi":{"id":"credential-id","name":"Google Sheets- test"}},"typeVersion":4.5,"continueOnFail":true},{"id":"462620c8-b4aa-4706-bcd5-163a5fabdd75","name":"Build Final Validation Response","type":"n8n-nodes-base.code","position":[3472,640],"parameters":{"mode":"runOnceForEachItem","jsCode":"const d = $input.item.json;\nreturn {\n  json: {\n    success: true,\n    caseId: d.case.caseId,\n    propertyAddress: d.case.propertyAddress,\n    transactionType: d.case.transactionType,\n    jurisdiction: d.case.jurisdiction,\n    overallStatus: d.overallStatus,\n    summary: d.summary,\n    missingMandatoryDocuments: d.missingMandatoryDocuments,\n    requiresLegalReview: d.requiresLegalReview,\n    canAutoApprove: d.canAutoApprove,\n    documentResults: d.documentResults.map(doc => ({\n      docId: doc.docId,\n      name: doc.name,\n      type: doc.confirmedType,\n      status: doc.complianceStatus,\n      riskLevel: doc.overallRiskLevel,\n      isExpired: doc.isExpired,\n      criticalFlags: doc.criticalFlags,\n      remediationSteps: doc.remediationSteps,\n      summary: doc.documentSummary\n    })),\n    allRemediationSteps: d.allRemediationSteps,\n    processedAt: d.aggregatedAt\n  }\n};"},"typeVersion":2},{"id":"89b547ec-2b6d-474d-a9c0-d0e9c7e24b20","name":"Return Validation Result to Caller","type":"n8n-nodes-base.respondToWebhook","position":[3696,640],"parameters":{"options":{"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"}]}},"respondWith":"json","responseBody":"={{ JSON.stringify($json, null, 2) }}"},"typeVersion":1},{"id":"c05f97cd-a900-4b7f-9dde-3aaf216d3c83","name":"Mark Case Auto-Approved","type":"n8n-nodes-base.set","position":[3248,1024],"parameters":{"options":{},"assignments":{"assignments":[{"id":"status","name":"status","type":"string","value":"AUTO_APPROVED"},{"id":"caseId","name":"caseId","type":"string","value":"={{ $json.case.caseId }}"},{"id":"property","name":"propertyAddress","type":"string","value":"={{ $json.case.propertyAddress }}"},{"id":"ts","name":"approvedAt","type":"string","value":"={{ new Date().toISOString() }}"},{"id":"msg","name":"message","type":"string","value":"All documents passed automated compliance checks and are approved for settlement processing."}]}},"typeVersion":3.4}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"c57ed76e-fcb9-4ec8-abb9-e7cffaaf1e54","connections":{"Claude AI Model":{"ai_languageModel":[[{"node":"AI Legal Compliance Check","type":"ai_languageModel","index":0}]]},"Extract Document Text":{"main":[[{"node":"Classify & Prepare Document","type":"main","index":0}]]},"Register Validation Case":{"main":[[{"node":"Download Document from Drive","type":"main","index":0}]]},"AI Legal Compliance Check":{"main":[[{"node":"Parse AI Validation Result","type":"main","index":0}]]},"Alert Legal Team on Slack":{"main":[[{"node":"Build Final Validation Response","type":"main","index":0}]]},"Watch Drive Intake Folder":{"main":[[{"node":"Register Validation Case","type":"main","index":0}]]},"Parse AI Validation Result":{"main":[[{"node":"Aggregate All Document Results","type":"main","index":0}]]},"Route by Compliance Status":{"main":[[{"node":"Email Validation Report to Submitter","type":"main","index":0},{"node":"Write Compliance Audit Record","type":"main","index":0},{"node":"Mark Case Auto-Approved","type":"main","index":0}],[{"node":"Email Validation Report to Submitter","type":"main","index":0},{"node":"Alert Legal Team on Slack","type":"main","index":0},{"node":"Write Compliance Audit Record","type":"main","index":0}],[{"node":"Email Validation Report to Submitter","type":"main","index":0},{"node":"Alert Legal Team on Slack","type":"main","index":0},{"node":"Write Compliance Audit Record","type":"main","index":0}]]},"Classify & Prepare Document":{"main":[[{"node":"AI Legal Compliance Check","type":"main","index":0}]]},"Receive Document Submission":{"main":[[{"node":"Register Validation Case","type":"main","index":0}]]},"Download Document from Drive":{"main":[[{"node":"Extract Document Text","type":"main","index":0}]]},"Write Compliance Audit Record":{"main":[[{"node":"Build Final Validation Response","type":"main","index":0}]]},"Aggregate All Document Results":{"main":[[{"node":"Route by Compliance Status","type":"main","index":0}]]},"Build Final Validation Response":{"main":[[{"node":"Return Validation Result to Caller","type":"main","index":0}]]},"Email Validation Report to Submitter":{"main":[[{"node":"Build Final Validation Response","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.googleDrive":{"count":1},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.googleSheets":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.extractFromFile":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"n8n-nodes-base.googleDriveTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?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":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"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/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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"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-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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"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/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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content 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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"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/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"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/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"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/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/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"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.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"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":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"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/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"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/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, 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/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/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"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/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":58,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDrive","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Drive"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"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":531,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDriveTrigger","codex":{"data":{"resources":{"generic":[{"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/trigger-nodes/n8n-nodes-base.googledrivetrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Google Drive Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive Trigger","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"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":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":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}