{"workflow":{"id":13034,"name":"Screen and score resumes from Gmail with PDF parsing, HubSpot, Slack and PostgreSQL","views":56,"recentViews":0,"totalViews":56,"createdAt":"2026-01-27T12:31:02.512Z","description":"# Talent Sovereign: AI-Powered Resume Screener & Recruitment Hub\n\n## 🎯 Description\nThis is an elite enterprise-grade solution for **Talent Acquisition** and **HR Ops** teams. It automates the high-volume task of resume screening by transforming unstructured PDF applications into structured candidate profiles. Leveraging an advanced **PDF-to-JSON** parsing engine and a multi-factor scoring algorithm, it ensures only the highest-quality candidates reach your CRM while maintaining a professional feedback loop for all applicants.\n\n\n\n### ✨ The Sovereign Lifecycle\n1. **Intelligent Intake & Validation** - Monitors **Gmail** for new submissions. A pre-validation layer ensures only healthy PDF binaries under 10MB enter the stream, filtering out noise and irrelevant attachments.\n2. **Atomic Data Extraction** - Utilizes the **HTML to PDF (Parse PDF to JSON)** node to decompose resumes into structured text data.\n3. **Advanced AI Resume Parser** - A sophisticated Code Node acts as a virtual Recruiter. It extracts contact info, LinkedIn URLs, and maps 45+ specific skills across 7 categories (Programming, Cloud, Data, etc.). It even calculates \"Total Years of Experience\" by analyzing date ranges within the text.\n4. **Multi-Factor Scoring & Tiering** - Candidates are automatically ranked on a 100-point scale:\n    - **A+ Tier (90+):** Exceptional talent; priority alerts.\n    - **Qualified (70+):** Standard qualified candidates.\n    - **Below Threshold:** Automatically prepared for the rejection track.\n5. **Smart Routing Matrix** - \n    - **Green Track:** Qualified leads are created in **HubSpot CRM**, archived in a \"Qualified\" **Google Drive** folder, and announced via **Slack**.\n    - **Red Track:** Unqualified candidates receive a personalized **Gmail** rejection including constructive feedback on skills they could improve.\n6. **Closed-Loop Analytics** - Logs every data point to **PostgreSQL**, calculating funnel metrics such as skill-match percentages and processing latency for continuous hiring strategy optimization.\n\n### 💡 Key Technical Features\n- **Heuristic Skill Detection:** Uses NLP pattern matching to identify technical competencies even if they are phrased differently.\n- **Personalized Rejection Engine:** Automatically suggests specific skill areas (e.g., Cloud or Certifications) for candidates to work on based on what was missing from their resume.\n- **Forensic Archival:** Maintains a clean, searchable archive of all applicants in a hierarchical cloud structure.\n\n### 🚀 Benefits\n✅ **90% Faster Screening** - Moves from manual reading to high-level candidate oversight instantly.\n✅ **Professional Employer Brand** - Ensures every applicant receives a timely, personalized response.\n✅ **Data-Driven Hiring** - Track exactly which sources and skill sets are performing best in your funnel.\n\n---\n**Tags:** #recruitment #hr-tech #resume-parser #ai #hubspot #automation #pdf-to-json\n\n**Category:** Human Resources | **Difficulty:** Advanced","workflow":{"meta":{"instanceId":"277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8","templateCredsSetupCompleted":true},"nodes":[{"id":"4b7a5274-552f-4b62-bc0b-ec1e58cb9b32","name":"Sticky Note - Intake","type":"n8n-nodes-base.stickyNote","position":[-544,1376],"parameters":{"color":7,"width":420,"height":492,"content":"## 📧 PHASE 1: Intelligent Intake & Validation\nMonitors Gmail for resume submissions. Validates PDF attachments and extracts raw text content for AI processing. Handles multiple attachment formats and sizes."},"typeVersion":1},{"id":"5018eb75-07bc-48ec-b7eb-8e3936e85cca","name":"Sticky Note - Analysis","type":"n8n-nodes-base.stickyNote","position":[-96,1376],"parameters":{"color":7,"width":480,"height":540,"content":"## 🧠 PHASE 2: AI-Powered Resume Analysis\nExtracts structured data: contact info, skills, experience, education. Uses NLP pattern matching and scoring algorithms to calculate qualification metrics. Assigns candidate tier (A/B/C/D)."},"typeVersion":1},{"id":"bf6b3e63-6361-4ce7-a672-b0d9923f3937","name":"Sticky Note - Routing","type":"n8n-nodes-base.stickyNote","position":[416,1376],"parameters":{"color":7,"width":500,"height":588,"content":"## 🎯 PHASE 3: Smart Routing & Integration\nQualified candidates (70+ score) → HubSpot CRM + Slack alert + Drive archive. Unqualified candidates → Automated rejection email with personalized feedback. All actions logged to analytics."},"typeVersion":1},{"id":"7dd69637-b8c1-4419-98d5-91e220ba2efd","name":"Sticky Note - Analytics","type":"n8n-nodes-base.stickyNote","position":[976,1376],"parameters":{"color":7,"width":740,"height":572,"content":"## 📊 PHASE 4: Analytics & Feedback Loop\nTracks hiring funnel metrics, candidate quality trends, and time-to-hire. Feeds data back to scoring model for continuous improvement."},"typeVersion":1},{"id":"d53b1abf-f411-4d4d-a20f-ca94b27f723a","name":"IF: Valid PDF Attachment?","type":"n8n-nodes-base.if","position":[-256,1568],"parameters":{"options":{},"conditions":{"options":{"caseSensitive":false},"conditions":[{"id":"attachment-check","operator":{"type":"array","operation":"notEmpty"},"leftValue":"={{ $json.attachments }}","rightValue":""},{"id":"pdf-check","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.attachments[0].mimeType }}","rightValue":"application/pdf"}]}},"typeVersion":2},{"id":"4e4e9256-0a2b-48e3-8afe-1c6de2787533","name":"Code: Pre-Validation","type":"n8n-nodes-base.code","position":[-384,1712],"parameters":{"jsCode":"// Pre-Processing: Attachment Validation & Metadata Extraction\nconst items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const attachments = item.json.attachments || [];\n  \n  if (attachments.length === 0) {\n    results.push({\n      json: {\n        ...item.json,\n        validationError: 'No attachments found',\n        skipProcessing: true\n      }\n    });\n    continue;\n  }\n  \n  // Find PDF attachment\n  const pdfAttachment = attachments.find(att => \n    att.mimeType === 'application/pdf' || \n    att.fileName?.toLowerCase().endsWith('.pdf')\n  );\n  \n  if (!pdfAttachment) {\n    results.push({\n      json: {\n        ...item.json,\n        validationError: 'No PDF resume found',\n        skipProcessing: true\n      }\n    });\n    continue;\n  }\n  \n  // Extract metadata\n  const fileSizeKB = (pdfAttachment.size || 0) / 1024;\n  const applicantEmail = item.json.from?.address || 'user@example.com';\n  const applicantName = item.json.from?.name || 'Unknown Applicant';\n  const receivedDate = item.json.date || new Date().toISOString();\n  const emailSubject = item.json.subject || 'No Subject';\n  \n  // Validate file size (reject if > 10MB)\n  if (fileSizeKB > 10240) {\n    results.push({\n      json: {\n        ...item.json,\n        validationError: 'File size exceeds 10MB limit',\n        skipProcessing: true,\n        fileSizeKB: fileSizeKB.toFixed(2)\n      }\n    });\n    continue;\n  }\n  \n  results.push({\n    json: {\n      ...item.json,\n      pdfAttachment: pdfAttachment,\n      applicantEmail: applicantEmail,\n      applicantName: applicantName,\n      receivedDate: receivedDate,\n      emailSubject: emailSubject,\n      fileSizeKB: fileSizeKB.toFixed(2),\n      skipProcessing: false,\n      processingTimestamp: new Date().toISOString()\n    },\n    binary: item.binary\n  });\n}\n\nreturn results;"},"typeVersion":2},{"id":"f9c391fd-a9b9-4213-940e-94b439bb6106","name":"PDF to Text: Extract Content","type":"n8n-nodes-htmlcsstopdf.htmlcsstopdf","position":[-32,1568],"parameters":{"resource":"pdfManipulation","operation":"parsePdfToJson"},"credentials":{"htmlcsstopdfApi":{"id":"credential-id","name":"pdf munk - deepanshi"}},"typeVersion":1},{"id":"8b37d04a-0ebf-46fd-8819-8ee9bb01401f","name":"Code: AI Resume Parser","type":"n8n-nodes-base.code","position":[176,1568],"parameters":{"jsCode":"// Advanced Resume Parser with Enhanced Extraction\nconst item = $input.first();\nconst text = item.json.text || '';\nconst fullText = text.toLowerCase();\n\n// ==================== CONTACT INFORMATION ====================\n// Extract Email (prioritize from PDF content)\nconst emailMatches = text.match(/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})/gi) || [];\nconst email = emailMatches[0] || item.json.applicantEmail || 'user@example.com';\n\n// Extract Phone (multiple formats)\nconst phonePatterns = [\n  /\\+?1?[-.]?\\(?([0-9]{3})\\)?[-.]?([0-9]{3})[-.]?([0-9]{4})/,\n  /\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})/,\n  /([0-9]{3})[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})/\n];\nlet phone = 'Not Found';\nfor (const pattern of phonePatterns) {\n  const match = text.match(pattern);\n  if (match) {\n    phone = match[0];\n    break;\n  }\n}\n\n// Extract LinkedIn\nconst linkedInMatch = text.match(/linkedin\\.com\\/in\\/([a-zA-Z0-9-]+)/i);\nconst linkedIn = linkedInMatch ? linkedInMatch[0] : 'Not Found';\n\n// Extract Location (City, State)\nconst locationMatch = text.match(/([A-Z][a-z]+(?:\\s[A-Z][a-z]+)*),\\s*([A-Z]{2})/i);\nconst location = locationMatch ? `${locationMatch[1]}, ${locationMatch[2]}` : 'Not Found';\n\n// ==================== SKILLS EXTRACTION ====================\nconst skillCategories = {\n  programming: ['Python', 'JavaScript', 'Java', 'C\\\\+\\\\+', 'C#', 'Ruby', 'PHP', 'Swift', 'Kotlin', 'Go', 'Rust', 'TypeScript'],\n  frontend: ['React', 'Angular', 'Vue', 'HTML', 'CSS', 'jQuery', 'Bootstrap', 'Tailwind'],\n  backend: ['Node.js', 'Express', 'Django', 'Flask', 'Spring', 'Laravel', '.NET', 'FastAPI'],\n  database: ['SQL', 'MySQL', 'PostgreSQL', 'MongoDB', 'Redis', 'Oracle', 'DynamoDB', 'Cassandra'],\n  cloud: ['AWS', 'Azure', 'GCP', 'Heroku', 'DigitalOcean', 'Kubernetes', 'Docker'],\n  tools: ['Git', 'Jenkins', 'JIRA', 'Postman', 'Selenium', 'Terraform', 'Ansible'],\n  data: ['Machine Learning', 'Data Science', 'Pandas', 'NumPy', 'TensorFlow', 'PyTorch', 'Tableau', 'Power BI']\n};\n\nconst foundSkills = {\n  programming: [],\n  frontend: [],\n  backend: [],\n  database: [],\n  cloud: [],\n  tools: [],\n  data: [],\n  all: []\n};\n\nfor (const [category, skills] of Object.entries(skillCategories)) {\n  for (const skill of skills) {\n    const regex = new RegExp(`\\\\b${skill}\\\\b`, 'i');\n    if (regex.test(text)) {\n      foundSkills[category].push(skill);\n      foundSkills.all.push(skill);\n    }\n  }\n}\n\n// ==================== EXPERIENCE EXTRACTION ====================\n// Extract year ranges (e.g., 2018-2022, 2020-Present)\nconst yearRanges = text.match(/\\b(20\\d{2}|19\\d{2})\\s*[-–—]\\s*(?:(20\\d{2}|19\\d{2})|present|current)/gi) || [];\nlet totalYears = 0;\n\nfor (const range of yearRanges) {\n  const match = range.match(/\\b(20\\d{2}|19\\d{2})\\s*[-–—]\\s*(?:(20\\d{2}|19\\d{2})|present|current)/i);\n  if (match) {\n    const startYear = parseInt(match[1]);\n    const endYear = match[2] ? parseInt(match[2]) : new Date().getFullYear();\n    totalYears += (endYear - startYear);\n  }\n}\n\n// Fallback: Look for explicit years of experience\nconst expMatch = text.match(/(\\d+)\\+?\\s*years?\\s*(?:of)?\\s*experience/i);\nif (expMatch && totalYears === 0) {\n  totalYears = parseInt(expMatch[1]);\n}\n\n// ==================== EDUCATION EXTRACTION ====================\nconst degreeKeywords = {\n  phd: /ph\\.?d|doctorate|doctoral/i,\n  masters: /master'?s?|m\\.?s\\.?|m\\.?a\\.?|mba/i,\n  bachelors: /bachelor'?s?|b\\.?s\\.?|b\\.?a\\.?|b\\.?tech|b\\.?e\\.?/i,\n  associate: /associate'?s?|a\\.?s\\.?|a\\.?a\\.?/i\n};\n\nlet highestDegree = 'None';\nlet hasDegree = false;\n\nif (degreeKeywords.phd.test(text)) {\n  highestDegree = 'PhD';\n  hasDegree = true;\n} else if (degreeKeywords.masters.test(text)) {\n  highestDegree = 'Masters';\n  hasDegree = true;\n} else if (degreeKeywords.bachelors.test(text)) {\n  highestDegree = 'Bachelors';\n  hasDegree = true;\n} else if (degreeKeywords.associate.test(text)) {\n  highestDegree = 'Associate';\n  hasDegree = true;\n}\n\n// Extract University/College names\nconst universityMatch = text.match(/(?:university|college|institute)\\s+of\\s+([A-Z][a-z]+(?:\\s[A-Z][a-z]+)*)/i);\nconst university = universityMatch ? universityMatch[0] : 'Not Found';\n\n// ==================== CERTIFICATIONS ====================\nconst certKeywords = ['AWS Certified', 'Google Certified', 'Microsoft Certified', 'PMP', 'CISSP', 'Scrum Master', 'Six Sigma'];\nconst certifications = [];\nfor (const cert of certKeywords) {\n  if (new RegExp(`\\\\b${cert}\\\\b`, 'i').test(text)) {\n    certifications.push(cert);\n  }\n}\n\n// ==================== SCORING ALGORITHM ====================\nlet score = 0;\n\n// Skills Score (max 40 points)\nscore += Math.min(foundSkills.all.length * 4, 40);\n\n// Experience Score (max 30 points)\nif (totalYears >= 10) score += 30;\nelse if (totalYears >= 7) score += 25;\nelse if (totalYears >= 5) score += 20;\nelse if (totalYears >= 3) score += 15;\nelse if (totalYears >= 1) score += 10;\nelse score += 5;\n\n// Education Score (max 20 points)\nif (highestDegree === 'PhD') score += 20;\nelse if (highestDegree === 'Masters') score += 15;\nelse if (highestDegree === 'Bachelors') score += 10;\nelse if (highestDegree === 'Associate') score += 5;\n\n// Certification Bonus (max 10 points)\nscore += Math.min(certifications.length * 5, 10);\n\n// Ensure score doesn't exceed 100\nscore = Math.min(score, 100);\n\n// ==================== QUALIFICATION TIERS ====================\nconst qualified = score >= 70;\nconst tier = score >= 90 ? 'A+' : \n             score >= 85 ? 'A' : \n             score >= 70 ? 'B' : \n             score >= 50 ? 'C' : 'D';\n\nconst tierDescription = {\n  'A+': 'Exceptional Candidate - Immediate Interview',\n  'A': 'Strong Candidate - Priority Review',\n  'B': 'Qualified Candidate - Standard Review',\n  'C': 'Marginal Candidate - Consider for Junior Roles',\n  'D': 'Unqualified - Send Rejection'\n};\n\n// ==================== KEYWORD MATCHING ====================\nconst jobKeywords = ['agile', 'scrum', 'ci/cd', 'rest api', 'microservices', 'devops', 'leadership', 'team lead'];\nconst matchedKeywords = [];\nfor (const keyword of jobKeywords) {\n  if (new RegExp(`\\\\b${keyword}\\\\b`, 'i').test(text)) {\n    matchedKeywords.push(keyword);\n  }\n}\n\n// ==================== RETURN ENRICHED DATA ====================\nitem.json.candidateEmail = email;\nitem.json.candidatePhone = phone;\nitem.json.candidateLinkedIn = linkedIn;\nitem.json.candidateLocation = location;\nitem.json.skills = foundSkills.all;\nitem.json.skillsByCategory = {\n  programming: foundSkills.programming,\n  frontend: foundSkills.frontend,\n  backend: foundSkills.backend,\n  database: foundSkills.database,\n  cloud: foundSkills.cloud,\n  tools: foundSkills.tools,\n  data: foundSkills.data\n};\nitem.json.totalSkills = foundSkills.all.length;\nitem.json.yearsExperience = totalYears;\nitem.json.highestDegree = highestDegree;\nitem.json.hasDegree = hasDegree;\nitem.json.university = university;\nitem.json.certifications = certifications;\nitem.json.matchedKeywords = matchedKeywords;\nitem.json.qualificationScore = score;\nitem.json.qualified = qualified;\nitem.json.tier = tier;\nitem.json.tierDescription = tierDescription[tier];\nitem.json.candidateName = item.json.applicantName || 'Unknown';\nitem.json.analysisTimestamp = new Date().toISOString();\n\nreturn item;"},"typeVersion":2},{"id":"610619d2-f3d6-4463-9cdc-bbd7e189f3c5","name":"PostgreSQL: Log Application","type":"n8n-nodes-base.postgres","position":[192,1760],"parameters":{"query":"=INSERT INTO candidate_applications (\n  email,\n  name,\n  phone,\n  linkedin,\n  location,\n  skills,\n  years_experience,\n  highest_degree,\n  university,\n  certifications,\n  qualification_score,\n  tier,\n  qualified,\n  received_date,\n  processed_date\n) VALUES (\n  '{{ $json.candidateEmail }}',\n  '{{ $json.candidateName }}',\n  '{{ $json.candidatePhone }}',\n  '{{ $json.candidateLinkedIn }}',\n  '{{ $json.candidateLocation }}',\n  '{{ JSON.stringify($json.skills) }}',\n  {{ $json.yearsExperience }},\n  '{{ $json.highestDegree }}',\n  '{{ $json.university }}',\n  '{{ JSON.stringify($json.certifications) }}',\n  {{ $json.qualificationScore }},\n  '{{ $json.tier }}',\n  {{ $json.qualified }},\n  '{{ $json.receivedDate }}',\n  NOW()\n) RETURNING id;","options":{},"operation":"executeQuery"},"typeVersion":2.4},{"id":"85f186c5-06fa-4f3a-af49-53a1b61f9db1","name":"IF: Qualified Candidate?","type":"n8n-nodes-base.if","position":[416,1568],"parameters":{"options":{},"conditions":{"options":{},"conditions":[{"id":"qualified-check","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.qualified }}","rightValue":true}]}},"typeVersion":2},{"id":"dd2ca3bb-9855-48ec-9ad2-e4eb766f05e0","name":"HubSpot: Create Contact","type":"n8n-nodes-base.hubspot","position":[624,1456],"parameters":{"operation":"create","authentication":"appToken"},"credentials":{"hubspotAppToken":{"id":"credential-id","name":"HubSpot App Token account"}},"typeVersion":2},{"id":"4befb2f3-3469-4f63-905c-447720df8d01","name":"Slack: Qualified Alert","type":"n8n-nodes-base.slack","position":[848,1456],"webhookId":"003a620d-339c-4039-a30a-b35568b36b82","parameters":{"text":"=🎯 *New Qualified Candidate!*\n\n*Name:* {{ $json.candidateName }}\n*Email:* {{ $json.candidateEmail }}\n*Phone:* {{ $json.candidatePhone }}\n*Location:* {{ $json.candidateLocation }}\n\n*📊 Qualification Details:*\n• *Score:* {{ $json.qualificationScore }}/100\n• *Tier:* {{ $json.tier }} - {{ $json.tierDescription }}\n• *Experience:* {{ $json.yearsExperience }} years\n• *Education:* {{ $json.highestDegree }} from {{ $json.university }}\n\n*💼 Skills ({{ $json.totalSkills }}):*\n{{ $json.skills.slice(0, 10).join(', ') }}{{ $json.totalSkills > 10 ? '...' : '' }}\n\n*🎓 Certifications:*\n{{ $json.certifications.length > 0 ? $json.certifications.join(', ') : 'None listed' }}\n\n*🔗 LinkedIn:* {{ $json.candidateLinkedIn }}\n\n*✅ Action:* Contact added to HubSpot. Resume archived to Google Drive.\n*📅 Received:* {{ $now.toFormat('MMM dd, yyyy HH:mm') }}","select":"channel","channelId":"={{ $vars.SLACK_HR_CHANNEL_ID }}","otherOptions":{"includeLinkToWorkflow":false},"authentication":"oAuth2"},"typeVersion":2.1},{"id":"0ca06d09-1ce1-4b1a-b641-d106444f4f8e","name":"Google Drive: Archive Qualified","type":"n8n-nodes-base.googleDrive","position":[624,1568],"parameters":{"name":"={{ $json.candidateName.replace(/\\s+/g, '_') }}_Resume_{{ $now.toFormat('yyyy-MM-dd') }}.pdf","driveId":{"__rl":true,"mode":"list","value":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"list","value":"qualified_resumes_folder_id"}},"credentials":{"googleDriveOAuth2Api":{"id":"credential-id","name":"PDFMunk - Jitesh"}},"typeVersion":3},{"id":"f2aed3d3-efe7-442d-b0c9-d688b4c43c0f","name":"Google Drive: Archive Rejected","type":"n8n-nodes-base.googleDrive","position":[624,1808],"parameters":{"name":"={{ $json.candidateName.replace(/\\s+/g, '_') }}_Resume_{{ $now.toFormat('yyyy-MM-dd') }}.pdf","driveId":{"__rl":true,"mode":"list","value":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"list","value":"rejected_resumes_folder_id"}},"credentials":{"googleDriveOAuth2Api":{"id":"credential-id","name":"PDFMunk - Jitesh"}},"typeVersion":3},{"id":"4e4ff844-1f01-4082-9c88-4a2d5ff85806","name":"Gmail: Send Rejection","type":"n8n-nodes-base.gmail","position":[848,1664],"webhookId":"665aa72c-15c9-497a-9150-ad6237e84ccf","parameters":{"sendTo":"={{ $json.candidateEmail }}","message":"=<!DOCTYPE html>\n<html>\n<head>\n  <style>\n    body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n    .container { max-width: 600px; margin: 0 auto; padding: 20px; }\n    .header { background: #f4f4f4; padding: 20px; text-align: center; border-bottom: 3px solid #e74c3c; }\n    .content { padding: 20px; }\n    .footer { background: #f4f4f4; padding: 15px; text-align: center; font-size: 12px; color: #888; }\n    .score-box { background: #fff3cd; border-left: 4px solid #ffc107; padding: 15px; margin: 20px 0; }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h2>Thank You for Your Application</h2>\n    </div>\n    <div class=\"content\">\n      <p>Dear {{ $json.candidateName.split(' ')[0] }},</p>\n      \n      <p>Thank you for your interest in joining our team. We have carefully reviewed your application and resume.</p>\n      \n      <div class=\"score-box\">\n        <strong>Application Assessment:</strong><br/>\n        Qualification Score: {{ $json.qualificationScore }}/100 (Tier {{ $json.tier }})<br/>\n        Experience: {{ $json.yearsExperience }} years<br/>\n        Education: {{ $json.highestDegree }}\n      </div>\n      \n      <p>After careful consideration, we have decided to move forward with other candidates whose qualifications more closely match our current requirements at this time.</p>\n      \n      <p><strong>Feedback for your professional development:</strong></p>\n      <ul>\n        <li>Your application showed {{ $json.totalSkills }} relevant skills</li>\n        <li>Consider gaining more experience in: {{ $json.skillsByCategory.cloud.length === 0 ? 'Cloud technologies (AWS, Azure)' : 'Advanced frameworks' }}</li>\n        <li>{{ $json.certifications.length === 0 ? 'Professional certifications could strengthen your profile' : 'Your certifications are a strong asset' }}</li>\n      </ul>\n      \n      <p>We encourage you to apply for future openings that may better align with your qualifications. We will keep your resume on file for 6 months.</p>\n      \n      <p>We wish you the best of luck in your job search and future career endeavors.</p>\n      \n      <p>Best regards,<br/>\n      <strong>HR Team</strong></p>\n    </div>\n    <div class=\"footer\">\n      <p>This is an automated message. Please do not reply directly to this email.</p>\n      <p>Follow us on LinkedIn for future opportunities!</p>\n    </div>\n  </div>\n</body>\n</html>","options":{"ccList":"","bccList":""},"subject":"=Thank you for your application - {{ $json.candidateName }}"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"jitesh0dugar@gmail.com"}},"typeVersion":2.1},{"id":"9d50522c-317c-4212-9878-be42c3b51332","name":"Slack: Rejection Log","type":"n8n-nodes-base.slack","position":[848,1808],"webhookId":"slack-reject-webhook","parameters":{"text":"=❌ *Application Rejected*\n\n*Name:* {{ $json.candidateName }}\n*Email:* {{ $json.candidateEmail }}\n*Score:* {{ $json.qualificationScore }}/100 (Tier {{ $json.tier }})\n*Experience:* {{ $json.yearsExperience }} years\n*Skills:* {{ $json.totalSkills }} identified\n\n*Reason:* Score below 70 threshold\n*Action:* Rejection email sent. Resume archived.","select":"channel","channelId":"={{ $vars.SLACK_HR_CHANNEL_ID }}","otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.1},{"id":"5516c15a-43fb-4387-8271-f5fd64bd1cca","name":"Merge: Qualified Path","type":"n8n-nodes-base.merge","position":[1072,1552],"parameters":{},"typeVersion":2.1},{"id":"3fbfa060-63c3-43ef-8668-59a0204b7b2d","name":"Merge: Rejected Path","type":"n8n-nodes-base.merge","position":[1088,1776],"parameters":{},"typeVersion":2.1},{"id":"fe7f00a4-4470-4b17-ab65-a681980f36de","name":"Code: Analytics Calculator","type":"n8n-nodes-base.code","position":[1296,1632],"parameters":{"jsCode":"// Analytics Aggregator: Calculate Hiring Funnel Metrics\nconst items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const data = item.json;\n  \n  // Calculate processing time\n  const received = new Date(data.receivedDate);\n  const processed = new Date(data.analysisTimestamp);\n  const processingTimeSeconds = (processed - received) / 1000;\n  \n  // Determine outcome\n  const outcome = data.qualified ? 'Accepted' : 'Rejected';\n  \n  // Calculate skill match percentage\n  const totalPossibleSkills = 45; // Sum of all skill categories\n  const skillMatchPercentage = ((data.totalSkills / totalPossibleSkills) * 100).toFixed(1);\n  \n  results.push({\n    json: {\n      ...data,\n      analytics: {\n        outcome: outcome,\n        processingTimeSeconds: processingTimeSeconds.toFixed(2),\n        skillMatchPercentage: skillMatchPercentage,\n        hasLinkedIn: data.candidateLinkedIn !== 'Not Found',\n        hasCertifications: data.certifications.length > 0,\n        degreeLevel: data.highestDegree,\n        experienceLevel: data.yearsExperience >= 7 ? 'Senior' : \n                        data.yearsExperience >= 3 ? 'Mid-Level' : 'Junior',\n        timestamp: new Date().toISOString()\n      }\n    }\n  });\n}\n\nreturn results;"},"typeVersion":2},{"id":"57e30780-87ae-487b-a7af-eb04966b429f","name":"PostgreSQL: Store Analytics","type":"n8n-nodes-base.postgres","position":[1520,1632],"parameters":{"query":"=INSERT INTO hiring_funnel_analytics (\n  outcome,\n  qualification_score,\n  tier,\n  years_experience,\n  experience_level,\n  total_skills,\n  skill_match_percentage,\n  highest_degree,\n  has_certifications,\n  has_linkedin,\n  processing_time_seconds,\n  received_date,\n  processed_date\n) VALUES (\n  '{{ $json.analytics.outcome }}',\n  {{ $json.qualificationScore }},\n  '{{ $json.tier }}',\n  {{ $json.yearsExperience }},\n  '{{ $json.analytics.experienceLevel }}',\n  {{ $json.totalSkills }},\n  {{ $json.analytics.skillMatchPercentage }},\n  '{{ $json.highestDegree }}',\n  {{ $json.analytics.hasCertifications }},\n  {{ $json.analytics.hasLinkedIn }},\n  {{ $json.analytics.processingTimeSeconds }},\n  '{{ $json.receivedDate }}',\n  '{{ $json.analysisTimestamp }}'\n);","options":{},"operation":"executeQuery"},"typeVersion":2.4},{"id":"7594e701-4305-4be0-ad52-0cbd223932fe","name":"Documentation","type":"n8n-nodes-base.stickyNote","position":[-1296,672],"parameters":{"width":692,"height":656,"content":"## ⚖️ Talent Sovereign: AI Resume Intelligence Hub\n\nIndustrial-grade recruitment pipeline: Gmail Intake → AI Parsing → Scoring → Smart Routing.\n\n### ⚙️ Core Sovereign Logic\n* **PHASE 1: Intake & Validation:** Monitors Gmail for PDF resumes; validates file integrity and metadata.\n* **PHASE 2: AI Parsing:** Uses **Parse PDF to JSON** to extract skills, experience, and contact data.\n* **PHASE 3: Tiered Scoring:** Custom algorithm calculates a 100-pt score and assigns Tiers (A+ to D).\n* **PHASE 4: Smart Routing:** - **Qualified (70+):** Syncs to HubSpot CRM, archives to 'Qualified' Drive, and alerts Slack.\n    - **Rejected (<70):** Sends personalized feedback email and archives to 'Rejected' Drive.\n* **PHASE 5: Analytics:** Logs funnel metrics (time-to-hire, skill trends) to PostgreSQL.\n\n### 📋 Setup\n1. **Drive:** Create 'Qualified' and 'Rejected' folders.\n2. **CRM:** Connect HubSpot App Token.\n3. **DB:** Prepare `candidate_applications` table in Postgres.\n\n**Metrics:** `Qualification_Score`, `Skill_Match_%`, `Funnel_Conversion`."},"typeVersion":1},{"id":"73ab0fd9-de75-4100-84bb-dfdb49025579","name":"Gmail Trigger","type":"n8n-nodes-base.gmailTrigger","position":[-528,1568],"parameters":{"filters":{},"pollTimes":{"item":[{"mode":"everyMinute"}]}},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"jitesh0dugar@gmail.com"}},"typeVersion":1.3}],"pinData":{},"connections":{"Gmail Trigger":{"main":[[{"node":"Code: Pre-Validation","type":"main","index":0}]]},"Code: Pre-Validation":{"main":[[{"node":"IF: Valid PDF Attachment?","type":"main","index":0}]]},"Slack: Rejection Log":{"main":[[{"node":"Merge: Rejected Path","type":"main","index":1}]]},"Gmail: Send Rejection":{"main":[[{"node":"Slack: Rejection Log","type":"main","index":0}]]},"Merge: Qualified Path":{"main":[[{"node":"Code: Analytics Calculator","type":"main","index":0}]]},"Code: AI Resume Parser":{"main":[[{"node":"PostgreSQL: Log Application","type":"main","index":0},{"node":"IF: Qualified Candidate?","type":"main","index":0}]]},"Slack: Qualified Alert":{"main":[[{"node":"Merge: Qualified Path","type":"main","index":0}]]},"HubSpot: Create Contact":{"main":[[{"node":"Slack: Qualified Alert","type":"main","index":0}]]},"IF: Qualified Candidate?":{"main":[[{"node":"HubSpot: Create Contact","type":"main","index":0},{"node":"Google Drive: Archive Qualified","type":"main","index":0}],[{"node":"Google Drive: Archive Rejected","type":"main","index":0},{"node":"Gmail: Send Rejection","type":"main","index":0}]]},"IF: Valid PDF Attachment?":{"main":[[{"node":"PDF to Text: Extract Content","type":"main","index":0}]]},"Code: Analytics Calculator":{"main":[[{"node":"PostgreSQL: Store Analytics","type":"main","index":0}]]},"PDF to Text: Extract Content":{"main":[[{"node":"Code: AI Resume Parser","type":"main","index":0}]]},"Google Drive: Archive Rejected":{"main":[[{"node":"Merge: Rejected Path","type":"main","index":0}]]},"Google Drive: Archive Qualified":{"main":[[{"node":"Merge: Qualified Path","type":"main","index":1}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.merge":{"count":2},"n8n-nodes-base.slack":{"count":2},"n8n-nodes-base.hubspot":{"count":1},"n8n-nodes-base.postgres":{"count":2},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.googleDrive":{"count":2},"n8n-nodes-base.gmailTrigger":{"count":1},"n8n-nodes-htmlcsstopdf.htmlcsstopdf":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Jitesh Dugar","username":"jiteshdugar","bio":"AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.","verified":true,"links":["https://www.linkedin.com/in/jiteshdugar"],"avatar":"https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?r=pg&d=retro&size=200"},"nodes":[{"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":30,"icon":"file:postgres.svg","name":"n8n-nodes-base.postgres","codex":{"data":{"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-i-chose-n8n-over-zapier-in-2020/","icon":"😍","label":"Why I chose n8n over Zapier in 2020"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting 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/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-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/postgres/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Postgres"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNzkgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTc3LjM5MSA0Ny45MjJjLS40NjYtMS40MTItMS42ODgtMi4zOTYtMy4yNjgtMi42MzItLjc0NS0uMTExLTEuNTk4LS4wNjQtMi42MDguMTQ0LTEuNzYuMzYzLTMuMDY1LjUwMS00LjAxOC41MjggMy41OTYtNi4wNzIgNi41MjEtMTIuOTk3IDguMjA0LTE5LjUxNSAyLjcyMi0xMC41NCAxLjI2OC0xNS4zNDEtLjQzMi0xNy41MTNDNzAuNzcgMy4xODUgNjQuMjA2LjA5NyA1Ni4yODcuMDAyYy00LjIyNC0uMDUyLTcuOTMzLjc4Mi05Ljg2NyAxLjM4MmEzNyAzNyAwIDAgMC01Ljc3LS41MjhjLTMuODA5LS4wNjEtNy4xNzQuNzctMTAuMDUgMi40NzZhNDYgNDYgMCAwIDAtNy4wOTgtMS43ODJDMTYuNTYxLjQxMSAxMC45NjggMS4yOTkgNi44NzYgNC4xOSAxLjkyMiA3LjY4OS0uMzc1IDEzLjc3LjA1IDIyLjI2MmMuMTM1IDIuNjk2IDEuNjQzIDEwLjkgNC4wMTggMTguNjggMS4zNjUgNC40NzIgMi44MiA4LjE4NSA0LjMyNiAxMS4wMzggMi4xMzUgNC4wNDYgNC40MTkgNi40MjggNi45ODQgNy4yODQgMS40MzguNDc5IDQuMDQ5LjgxNCA2Ljc5Ny0xLjQ3M2E2IDYgMCAwIDAgMS40MjkgMS4yM2MuNzgzLjQ5NCAxLjc0Ljg5NyAyLjY5NiAxLjEzNiAzLjQ0Ni44NjIgNi42NzQuNjQ2IDkuNDI3LS41NjFsLjA0MSAxLjM2Mi4wNiAxLjg5OWMuMTYzIDQuMDY0LjQ0IDcuMjIzIDEuMjU5IDkuNDM0LjA0NS4xMjIuMTA1LjMwNy4xNjkuNTAzLjQwOSAxLjI1MSAxLjA5MiAzLjM0NiAyLjgzIDQuOTg3IDEuOCAxLjY5OSAzLjk3OCAyLjIyIDUuOTcyIDIuMjIgMSAwIDEuOTU1LS4xMzEgMi43OTItLjMxMSAyLjk4NC0uNjM5IDYuMzczLTEuNjE0IDguODI0LTUuMTA0IDIuMzE4LTMuMyAzLjQ0NC04LjI3IDMuNjQ4LTE2LjEwMWwuMDc0LS42MzQuMDQ4LS40MTQuNTQ2LjA0OC4xNDEuMDFjMy4wMzkuMTM4IDYuNzU1LS41MDYgOS4wMzctMS41NjYgMS44MDMtLjgzNyA3LjU4Mi0zLjg4OCA2LjIyMS04LjAwNyIvPjxwYXRoIGZpbGw9IiMzMzY3OTEiIGQ9Ik03Mi4xOTUgNDguNzIzYy05LjAzNiAxLjg2NC05LjY1Ny0xLjE5NS05LjY1Ny0xLjE5NSA5LjU0MS0xNC4xNTcgMTMuNTI5LTMyLjEyNyAxMC4wODctMzYuNTI1QzYzLjIzNS0uOTk0IDQ2Ljk4MSA0LjY4IDQ2LjcxIDQuODI3bC0uMDg3LjAxNmMtMS43ODUtLjM3MS0zLjc4My0uNTkxLTYuMDI5LS42MjgtNC4wODktLjA2Ny03LjE5IDEuMDcyLTkuNTQ0IDIuODU3IDAgMC0yOC45OTUtMTEuOTQ1LTI3LjY0NyAxNS4wMjMuMjg3IDUuNzM3IDguMjIzIDQzLjQxIDE3LjY4OSAzMi4wMzEgMy40Ni00LjE2MSA2LjgwMy03LjY3OSA2LjgwMy03LjY3OSAxLjY2IDEuMTAzIDMuNjQ4IDEuNjY2IDUuNzMyIDEuNDYzbC4xNjItLjEzN2E2LjMgNi4zIDAgMCAwIC4wNjUgMS42MmMtMi40MzkgMi43MjUtMS43MjIgMy4yMDMtNi41OTcgNC4yMDYtNC45MzMgMS4wMTctMi4wMzUgMi44MjYtLjE0MyAzLjI5OSAyLjI5NC41NzQgNy42IDEuMzg2IDExLjE4NS0zLjYzM2wtLjE0My41NzNjLjk1Ni43NjUgMS42MjYgNC45NzggMS41MTQgOC43OTdzLS4xODggNi40NDEuNTY1IDguNDg5IDEuNTAzIDYuNjU2IDcuOTEyIDUuMjgyYzUuMzU1LTEuMTQ4IDguMTMtNC4xMjEgOC41MTYtOS4wODEuMjc0LTMuNTI2Ljg5NC0zLjAwNS45MzMtNi4xNThsLjQ5Ny0xLjQ5M2MuNTczLTQuNzguMDkxLTYuMzIyIDMuMzktNS42MDVsLjgwMi4wN2MyLjQyOC4xMSA1LjYwNi0uMzkxIDcuNDcxLTEuMjU3IDQuMDE2LTEuODY0IDYuMzk4LTQuOTc2IDIuNDM4LTQuMTU4Ii8+PHBhdGggZD0iTTMyLjc0NyAyNC42NmMtLjgxNC0uMTEzLTEuNTUyLS4wMDgtMS45MjUuMjc0YS43LjcgMCAwIDAtLjI5Mi40N2MtLjA0Ny4zMzYuMTg4LjcwNy4zMzMuODk4LjQwOS41NDIgMS4wMDYuOTE1IDEuNTk4Ljk5N2EyIDIgMCAwIDAgLjI1Ni4wMThjLjk4NiAwIDEuODgzLS43NjggMS45NjItMS4zMzUuMDk5LS43MS0uOTMyLTEuMTgzLTEuOTMxLTEuMzIybTI2Ljk3NS4wMjJjLS4wNzgtLjU1Ni0xLjA2OC0uNzE1LTIuMDA3LS41ODRzLTEuODQ4LjU1NC0xLjc3MiAxLjExMmMuMDYxLjQzNC44NDQgMS4xNzQgMS43NzEgMS4xNzRxLjExNyAwIC4yMzctLjAxNmMuNjE5LS4wODYgMS4wNzMtLjQ3OSAxLjI4OC0uNzA1LjMyOS0uMzQ1LjUxOC0uNzMuNDg0LS45OG0xNS40NzcgMjMuODI4Yy0uMzQ1LTEuMDQyLTEuNDUzLTEuMzc3LTMuMjk2LS45OTctNS40NzEgMS4xMjktNy40My4zNDctOC4wNzMtLjEyNyA0LjI1Mi02LjQ3OCA3Ljc1LTE0LjMwOCA5LjYzNy0yMS42MTQuODk0LTMuNDYxIDEuMzg4LTYuNjc1IDEuNDI4LTkuMjk0LjA0NS0yLjg3Ni0uNDQ1LTQuOTg4LTEuNDU1LTYuMjc5LTQuMDcyLTUuMjAzLTEwLjA0OC03Ljk5NC0xNy4yODMtOC4wNy00Ljk3My0uMDU2LTkuMTc1IDEuMjE3LTkuOTkgMS41NzVhMjUgMjUgMCAwIDAtNS42MjItLjcyMmMtMy43MzQtLjA2LTYuOTYxLjgzNC05LjYzMyAyLjY1NWE0MyA0MyAwIDAgMC03LjgyOC0yLjA1MmMtNi4zNDItMS4wMjEtMTEuMzgxLS4yNDgtMTQuOTc4IDIuMy00LjI5MSAzLjA0LTYuMjcyIDguNDc1LTUuODg4IDE2LjE1Mi4xMjkgMi41ODMgMS42MDEgMTAuNTI5IDMuOTIzIDE4LjEzOSAzLjA1NyAxMC4wMTYgNi4zOCAxNS42ODYgOS44NzcgMTYuODUyYTQuNCA0LjQgMCAwIDAgMS40MDIuMjMyYzEuMjc2IDAgMi44MzktLjU3NSA0LjQ2Ni0yLjUzMWExNjEgMTYxIDAgMCAxIDYuMTU2LTYuOTY2IDkuOSA5LjkgMCAwIDAgNC40MjkgMS4xOTFsLjAxLjEyMWMtLjMxLjM2OC0uNTY0LjY5LS43ODEuOTY1LTEuMDcgMS4zNTgtMS4yOTMgMS42NDEtNC43MzggMi4zNTEtLjk4LjIwMi0zLjU4Mi43MzgtMy42MiAyLjU2My0uMDQxIDEuOTkzIDMuMDc2IDIuODMgMy40MzEgMi45MTkgMS4yMzguMzEgMi40My40NjMgMy41NjguNDYzIDIuNzY2IDAgNS4yLS45MDkgNy4xNDUtMi42NjgtLjA2IDcuMTA2LjIzNiAxNC4xMDcgMS4wODkgMTYuMjQxLjY5OSAxLjc0NiAyLjQwNiA2LjAxNCA3Ljc5OCA2LjAxNC43OTEgMCAxLjY2Mi0uMDkyIDIuNjItLjI5NyA1LjYyNy0xLjIwNyA4LjA3MS0zLjY5NCA5LjAxNi05LjE3Ny41MDYtMi45MyAxLjM3NC05LjkyOCAxLjc4Mi0xMy42ODIuODYyLjI2OSAxLjk3MS4zOTIgMy4xNy4zOTIgMi41MDEgMCA1LjM4Ny0uNTMxIDcuMTk3LTEuMzcyIDIuMDMzLS45NDQgNS43MDItMy4yNjEgNS4wMzctNS4yNzR6TTYxLjggMjMuMTQ3Yy0uMDE5IDEuMTA4LS4xNzEgMi4xMTQtLjMzMyAzLjE2NC0uMTc0IDEuMTI5LS4zNTQgMi4yOTctLjM5OSAzLjcxNS0uMDQ1IDEuMzc5LjEyOCAyLjgxNC4yOTQgNC4yLjMzNyAyLjgwMS42ODIgNS42ODUtLjY1NSA4LjUzMWExMSAxMSAwIDAgMS0uNTkyLTEuMjE4Yy0uMTY2LS40MDMtLjUyNy0xLjA1LTEuMDI3LTEuOTQ2LTEuOTQ0LTMuNDg3LTYuNDk3LTExLjY1Mi00LjE2Ny0xNC45ODQuNjk0LS45OTIgMi40NTYtMi4wMTEgNi44NzktMS40NjN6TTU2LjQzOSA0LjM3NGM2LjQ4Mi4xNDMgMTEuNjA5IDIuNTY4IDE1LjI0IDcuMjA3IDIuNzg0IDMuNTU4LS4yODIgMTkuNzQ5LTkuMTU4IDMzLjcxNmwtLjI2OS0uMzM5LS4xMTItLjE0YzIuMjk0LTMuNzg4IDEuODQ1LTcuNTM2IDEuNDQ2LTEwLjg1OS0uMTY0LTEuMzY0LS4zMTktMi42NTItLjI4LTMuODYxLjA0MS0xLjI4My4yMS0yLjM4Mi4zNzQtMy40NDYuMjAyLTEuMzExLjQwNy0yLjY2Ny4zNS00LjI2NWExLjggMS44IDAgMCAwIC4wMzctLjYwMWMtLjE0NC0xLjUzMy0xLjg5NC02LjEyLTUuNDYyLTEwLjI3My0xLjk1MS0yLjI3MS00Ljc5Ny00LjgxMy04LjY4Mi02LjUyN2EyOS4zIDI5LjMgMCAwIDEgNi41MTUtLjYxMnpNMjAuMTY3IDUzLjI5OGMtMS43OTMgMi4xNTUtMy4wMzEgMS43NDItMy40MzggMS42MDctMi42NTMtLjg4NS01LjczLTYuNDkxLTguNDQ0LTE1LjM4Mi0yLjM0OC03LjY5My0zLjcyLTE1LjQyOC0zLjgyOS0xNy41OTctLjM0My02Ljg2IDEuMzItMTEuNjQxIDQuOTQzLTE0LjIxIDUuODk2LTQuMTgxIDE1LjU4OS0xLjY3OSAxOS40ODQtLjQwOWwtLjE3LjE2M2MtNi4zOTEgNi40NTUtNi4yNCAxNy40ODMtNi4yMjQgMTguMTU3YTIyIDIyIDAgMCAwIC4wNTEgMS4xMzVjLjExIDEuODU1LjMxNSA1LjMwNy0uMjMyIDkuMjE3LS41MDggMy42MzMuNjEyIDcuMTg5IDMuMDcyIDkuNzU2cS4zODMuMzk4Ljc5NS43NWExNjQgMTY0IDAgMCAwLTYuMDA4IDYuODE0em02LjgzLTkuMTEzYy0xLjk4My0yLjA2OS0yLjg4NC00Ljk0Ny0yLjQ3MS03Ljg5Ni41NzctNC4xMy4zNjQtNy43MjcuMjUtOS42NTlsLS4wMzktLjY5NGMuOTM0LS44MjggNS4yNjEtMy4xNDYgOC4zNDYtMi40MzkgMS40MDguMzIzIDIuMjY2IDEuMjgxIDIuNjIzIDIuOTMxIDEuODQ2IDguNTM5LjI0NCAxMi4wOTgtMS4wNDMgMTQuOTU3LS4yNjUuNTg5LS41MTYgMS4xNDYtLjczIDEuNzIybC0uMTY2LjQ0NWMtLjQyIDEuMTI2LS44MTEgMi4xNzMtMS4wNTMgMy4xNjctMi4xMDgtLjAwNi00LjE1OS0uOTA3LTUuNzE4LTIuNTM0em0uMzI0IDExLjUxNmE1IDUgMCAwIDEtMS40OTQtLjY0MmMuMjcxLS4xMjguNzU0LS4zMDEgMS41OTEtLjQ3NCA0LjA1Mi0uODM0IDQuNjc4LTEuNDIzIDYuMDQ1LTMuMTU4LjMxMy0uMzk4LjY2OS0uODQ5IDEuMTYtMS4zOTguNzMzLS44MjEgMS4wNjgtLjY4MiAxLjY3Ni0uNDMuNDkzLjIwNC45NzIuODIxIDEuMTY3IDEuNTAxLjA5Mi4zMjEuMTk1LjkzLS4xNDMgMS40MDQtMi44NTUgMy45OTctNy4wMTUgMy45NDYtMTAuMDAzIDMuMTk4em0yMS4yMDcgMTkuNzM1Yy00Ljk1NyAxLjA2Mi02LjcxMy0xLjQ2Ny03Ljg2OS00LjM1OS0uNzQ3LTEuODY3LTEuMTEzLTEwLjI4NS0uODUzLTE5LjU4MmExLjEgMS4xIDAgMCAwLS4wNDgtLjM1NiA1IDUgMCAwIDAtLjEzOS0uNjU3Yy0uMzg3LTEuMzUzLTEuMzMxLTIuNDg0LTIuNDYyLTIuOTUzLS40NS0uMTg2LTEuMjc1LS41MjgtMi4yNjctLjI3NC4yMTItLjg3MS41NzgtMS44NTUuOTc2LTIuOTIxbC4xNjctLjQ0OGMuMTg4LS41MDUuNDIzLTEuMDI5LjY3My0xLjU4MyAxLjM0Ny0yLjk5MiAzLjE5Mi03LjA5MSAxLjE5LTE2LjM1LS43NS0zLjQ2OC0zLjI1NC01LjE2MS03LjA1LTQuNzY4LTIuMjc2LjIzNS00LjM1OCAxLjE1NC01LjM5NiAxLjY4cS0uMzM0LjE2OS0uNjE4LjMyOWMuMjktMy40OTQgMS4zODUtMTAuMDI0IDUuNDgxLTE0LjE1NiAyLjU3OS0yLjYwMSA2LjAxNC0zLjg4NiAxMC4xOTktMy44MTcgOC4yNDYuMTM1IDEzLjUzNCA0LjM2NyAxNi41MTggNy44OTMgMi41NzEgMy4wMzkgMy45NjQgNi4xIDQuNTIgNy43NTEtNC4xNzktLjQyNS03LjAyMi40LTguNDYzIDIuNDYtMy4xMzUgNC40ODEgMS43MTUgMTMuMTc4IDQuMDQ2IDE3LjM1OC40MjcuNzY2Ljc5NiAxLjQyOC45MTIgMS43MDkuNzU5IDEuODM5IDEuNzQyIDMuMDY3IDIuNDU5IDMuOTY0LjIyLjI3NS40MzMuNTQxLjU5Ni43NzQtMS4yNjYuMzY1LTMuNTM5IDEuMjA4LTMuMzMyIDUuNDIyLS4xNjcgMi4xMTUtMS4zNTYgMTIuMDE2LTEuOTU5IDE1LjUxNC0uNzk3IDQuNjIxLTIuNDk3IDYuMzQzLTcuMjc5IDcuMzY4em0yMC42OTMtMjMuNjhjLTEuMjk0LjYwMS0zLjQ2IDEuMDUyLTUuNTE4IDEuMTQ4LTIuMjczLjEwNy0zLjQzLS4yNTUtMy43MDItLjQ3Ny0uMTI4LTIuNjI2Ljg1LTIuOTAxIDEuODg0LTMuMTkxLjE2My0uMDQ2LjMyMS0uMDkuNDc0LS4xNDRhNCA0IDAgMCAwIC4zMTMuMjNjMS44MjcgMS4yMDYgNS4wODUgMS4zMzYgOS42ODUuMzg2bC4wNS0uMDFjLS42Mi41OC0xLjY4MiAxLjM1OS0zLjE4NyAyLjA1OHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Postgres","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"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/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/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/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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":76,"icon":"file:hubspot.svg","name":"n8n-nodes-base.hubspot","codex":{"data":{"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/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/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.hubspot/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/hubspot/"}]},"categories":["Sales"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"HubSpot"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjIuODgzIDY5Ljg4MyI+PHVzZSB4bGluazpocmVmPSIjYSIgeD0iMi40NDIiIHk9IjIuNDQyIi8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxwYXRoIGZpbGw9IiNmODc2MWYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSJub25lIiBkPSJNNTUuNTA0IDMwLjQwMWExNi4yNiAxNi4yNiAwIDAgMC01LjkwNC01Ljg2NGMtMS44NjUtMS4wODQtMy43OTQtMS43NzMtNS45NzItMi4wN3YtNy43OThhNS43MSA1LjcxIDAgMCAwIDMuNTI1LTUuMzU3IDUuODYgNS44NiAwIDAgMC01Ljg1OS01Ljg4OSA1LjkxIDUuOTEgMCAwIDAtNS45MDggNS44ODljMCAyLjM5MyAxLjI3IDQuNDM0IDMuNDUyIDUuMzU3djcuNzU0YTE3IDE3IDAgMCAwLTUuMTk1IDEuNjMxTDEyLjc2OSA4LjI0N2MuMTQ2LS41NTIuMjczLTEuMTIzLjI3My0xLjcyNEE2LjUyIDYuNTIgMCAwIDAgNi41MTkgMCA2LjUyIDYuNTIgMCAwIDAgMCA2LjUyNGE2LjUyMyA2LjUyMyAwIDAgMCA2LjUyNCA2LjUyNCA2LjQ3IDYuNDcgMCAwIDAgMy4zNS0uOTUybDEuMzY3IDEuMDM1IDE4LjcyNiAxMy41MDFjLS45OTEuOTA4LTEuOTE0IDEuOTQzLTIuNjUxIDMuMTA1LTEuNDk0IDIuMzY4LTIuNDA3IDQuOTcxLTIuNDA3IDcuODEzdi41ODZhMTYuNCAxNi40IDAgMCAwIDEuMDI1IDUuNjQ1QzI2LjUgNDUuMzI0IDI3LjMzIDQ2LjczIDI4LjM2MSA0OGwtNi4yMjEgNi4yMzVhNS4wMSA1LjAxIDAgMCAwLTUuMjk4IDEuMTYyYy0uOTQ3Ljk0Mi0xLjQ4IDIuMjI3LTEuNDc1IDMuNTY1cy41MjcgMi42MTIgMS40NzkgMy41NjQgMi4yMjcgMS40OCAzLjU2NSAxLjQ4YTUgNSAwIDAgMCAzLjU2NS0xLjQ4IDUuMDUgNS4wNSAwIDAgMCAxLjQ3NS0zLjU2NCA1IDUgMCAwIDAtLjIzNC0xLjUxNGw2LjQyNi02LjQyNmExNiAxNiAwIDAgMCAyLjg1NiAxLjU2MyAxNi43IDE2LjcgMCAwIDAgNi42ODUgMS40MDZoLjQzOWExNS43NiAxNS43NiAwIDAgMCA3LjYyNy0xLjkyOSAxNS43NyAxNS43NyAwIDAgMCA1Ljk3Ny01LjYzYzEuNDk5LTIuMzkzIDIuMzE5LTUuMDQ0IDIuMzE5LTcuOTU5di0uMTQ2YzAtMi44NjYtLjY2NC01LjUwOC0yLjA1MS03Ljkzem0tNy44NDcgMTMuNDg3Yy0xLjc0MyAxLjkzOC0zLjc1IDMuMTM1LTYuMDE2IDMuMTM1aC0uNDNjLTEuMjk0IDAtMi41NjQtLjM1Ni0zLjc5OS0xLjAxMWE4LjggOC44IDAgMCAxLTMuMzMtMy4wMzJjLS44OTgtMS4yNy0xLjM4Ny0yLjY1Ni0xLjM4Ny00LjEyNnYtLjQzOWMwLTEuNDQ1LjI3OC0yLjgxNy45NzctNC4xMTEuNzQ3LTEuNDY1IDEuNzU4LTIuNTE1IDMuMTAxLTMuMzg5YTcuNiA3LjYgMCAwIDEgNC4yOTctMS4yOTRoLjE0N2MxLjQxNiAwIDIuNzY5LjI3OCA0LjAzOC45MjhhOC41NiA4LjU2IDAgMCAxIDMuMTc0IDIuODg2IDkuMiA5LjIgMCAwIDEgMS40MjEgNC4wNTNsLjAzNC45MTNjMCAxLjk4Ny0uNzYyIDMuODI4LTIuMjggNS40OTh6Ii8+PC9zeW1ib2w+PC9zdmc+"},"displayName":"HubSpot","typeVersion":2,"nodeCategories":[{"id":2,"name":"Sales"}]},{"id":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","human","form","wait","hitl","approval"],"resources":{"generic":[{"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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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-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/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/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":824,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmailTrigger","codex":{"data":{"resources":{"generic":[{"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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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-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/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/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gmailtrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Gmail Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail Trigger","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"}]},{"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"}]}],"categories":[{"id":17,"name":"HR"},{"id":49,"name":"AI Summarization"}],"image":[]}}