{"workflow":{"id":14138,"name":"Screen job applications from Google Forms with Google Gemini and email results","views":2,"recentViews":0,"totalViews":2,"createdAt":"2026-03-18T09:39:08.073Z","description":"# 🤖 AI Resume Screener — Google Forms to Automated Shortlisting & Email\n\n### Automatically score every job application with AI, update your tracking sheet, and send personalised emails to candidates — all without human review.\n\n---\n\n## 📖 Description\n\nThis workflow automates your entire first-round resume screening process. When a candidate submits your Google Form application, the workflow triggers, extracts their details, scores them against the job description using AI, writes the results back to your Google Sheet, and sends the right email — a congratulations to shortlisted candidates, a polite rejection to others.\n\n**Your HR team only reviews candidates the AI has already scored 7 or above.**\n\nBuilt for companies hiring across multiple roles simultaneously, HR teams wanting to reduce screening time, and startups with no dedicated recruiting staff.\n\n---\n\n## ✨ Key Features\n\n- **Google Sheets Trigger** — fires automatically when a new application row is added\n- **Duplicate prevention** — tracks processed rows with a `Processed` column, never scores the same application twice\n- **Multi-role support** — built-in Job Description map for 5 roles, easily extendable\n- **AI scoring 1–10** — Google Gemini scores each candidate against the JD with strengths, weaknesses, recommendation\n- **Direct sheet write via API** — writes score + grade + status to exact row using Google Sheets API\n- **Smart email routing** — score ≥ 7 → shortlisted (HR alert + candidate email), score &lt; 7 → rejection email\n- **Rate limit protection** — Wait node between HR alert and candidate email prevents SMTP throttling\n- **Robust AI parsing** — 3-layer fallback ensures AI output always produces a usable result\n\n---\n\n## 🔄 How It Works\n\n```\nNew Google Form submission\n          ↓\nGoogle Sheets Trigger (rowAdded, polls every minute)\n          ↓\nRead All Rows → Filter Unprocessed Rows (col_18 / Processed ≠ 1)\n          ↓\nExtract Fields + Load Job Description\n  → name, email, phone, position, experience, skills, cover note\n  → loads matching JD from built-in map\n          ↓\nAI Resume Scorer (Google Gemini)\n  → score: 1–10\n  → grade: Strong Yes / Maybe / No\n  → strengths, weaknesses, recommendation, summary\n          ↓\nParse AI Output (3-layer fallback)\n          ↓\nBuild Sheet Request → Write to Sheet via API\n  → writes score, grade, strengths, weaknesses,\n    recommendation, summary, status, timestamp, Processed=1\n          ↓\nScore ≥ 7?\n  ✅ YES → Alert Email to HR + Wait 10s → Shortlist Email to Candidate\n  ❌ NO  → Rejection Email to Candidate\n```\n\n---\n\n## 🤖 AI Scoring System\n\nThe AI scores each candidate from **1 to 10** against the job description:\n\n| Score | Grade | Action |\n| :---: | :--- | :--- |\n| 8–10 | Strong Yes | Shortlisted ✅ |\n| 7 | Strong Yes / Maybe | Shortlisted ✅ |\n| 5–6 | Maybe | Rejected ❌ |\n| 1–4 | No | Rejected ❌ |\n\nFor each application the AI also provides:\n- **Strengths** — what the candidate does well vs the JD\n- **Weaknesses** — gaps or concerns\n- **Recommendation** — e.g. \"Invite for technical interview\"\n- **Summary** — 2–3 sentence overall assessment\n\n---\n\n## 📋 Built-in Job Descriptions\n\nFive roles are pre-configured and auto-matched by position name:\n\n| Role | Key Requirements |\n| :--- | :--- |\n| Frontend Developer | 2+ yrs React/Vue, HTML/CSS/JS, REST APIs, Git |\n| Backend Developer | 2+ yrs Node.js/Python/Java, PostgreSQL/MongoDB, Docker |\n| UI/UX Designer | 2+ yrs UI/UX, Figma or Adobe XD, portfolio |\n| Project Manager | 3+ yrs PM, PMP/Scrum preferred, Jira/Asana |\n| Digital Marketing Executive | 2+ yrs digital marketing, Google Ads, Meta Ads, GA4 |\n\nAdd more roles by editing the `JD_MAP` object in the **Extract Fields + Load JD** node.\n\n---\n\n## 📧 Email Templates\n\n### Shortlist Email (to candidate)\n- Subject: `Congratulations [Name] - You have been shortlisted!`\n- Navy blue header\n- Score table (score/10, grade, position, experience, skills)\n- Strengths highlighted in green\n- AI assessment in blue\n- Promise: HR contacts within 2 business days\n\n### HR Alert Email (internal)\n- Subject: `Strong Candidate - [Name] for [Position]`\n- Amber header — urgent feel\n- Full candidate details + complete AI breakdown\n- Strengths, weaknesses, recommendation, summary all included\n\n### Rejection Email (to candidate)\n- Subject: `Your application for [Position] - Update`\n- Grey header — professional and neutral\n- Polite decline with encouragement\n- No score or feedback shared\n\n---\n\n## 🛠 Setup Requirements\n\n### 1. Google Form\n\nCreate a Google Form with these fields:\n\n| Field | Type |\n| :--- | :--- |\n| Full Name | Short answer |\n| Email Address | Short answer |\n| Phone Number | Short answer |\n| Select the Position You Are Applying For | Dropdown |\n| Years of Experience | Short answer |\n| Relevant Skills | Long answer |\n| Cover Note | Long answer |\n\nLink the form to a Google Sheet (Responses tab).\n\n### 2. Google Sheet — Response Sheet Columns\n\nThe form creates columns A–H automatically. Add these columns manually for AI results:\n\n| Col | Header | Filled by |\n| :---: | :--- | :--- |\n| A | Timestamp | Google Forms |\n| B | Select the Position... | Google Forms |\n| C | Full Name | Google Forms |\n| D | Email Address | Google Forms |\n| E | Phone Number | Google Forms |\n| F | Years of Experience | Google Forms |\n| G | Relevant Skills | Google Forms |\n| H | Upload CV | Google Forms |\n| I | Cover Note | Google Forms |\n| J | AI Score | This workflow |\n| K | Grade | This workflow |\n| L | Strengths | This workflow |\n| M | Weaknesses | This workflow |\n| N | Recommendation | This workflow |\n| O | Summary | This workflow |\n| P | Status | This workflow |\n| Q | Processed At | This workflow |\n| R | Processed | This workflow (1 = done) |\n\n&gt; **Important:** The workflow uses column R (`Processed`) to track which rows have been scored. Rows where R = 1 are skipped on subsequent triggers.\n\n### 3. Credentials Required\n\n| Credential | Used for | Free? |\n| :--- | :--- | :--- |\n| **Google Sheets Trigger OAuth2** | Detects new rows | Free |\n| **Google Sheets OAuth2** | Read rows + write results | Free |\n| **Google Gemini (PaLM) API** | AI resume scoring | Free tier available |\n| **SMTP** | Sending emails | Depends on provider |\n\n### 4. Update Sheet ID\n\nIn the **Read All Rows** and **Write to Sheet via API** nodes, replace the Sheet ID with your own:\n```\nhttps://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/...\n```\n\n### 5. Update Email Addresses\n\nIn all three email nodes, update:\n- `fromEmail` — your HR sending address\n- HR alert `toEmail` — your internal HR inbox\n- SMTP credential — your email provider\n\n---\n\n## ⚙️ Workflow Nodes\n\n| Node | Type | Purpose |\n| :--- | :--- | :--- |\n| Google Sheets Trigger | Trigger | Fires on new row (polls every minute) |\n| Read All Rows | Google Sheets | Reads all form responses |\n| Filter Unprocessed Rows | Code | Skips rows where Processed = 1 |\n| Extract Fields + Load JD | Code | Extracts candidate data + matches JD |\n| AI Resume Scorer | AI Agent | Scores candidate vs JD using Gemini |\n| Google Gemini Chat Model | LLM | AI model for scoring |\n| Parse AI Output | Code | Parses JSON with 3-layer fallback |\n| Build Sheet Request | Code | Prepares API write request for exact row |\n| Write to Sheet via API | HTTP Request | Writes results to columns J–R |\n| Score ≥ 7? | IF | Routes by score |\n| Alert Email - HR Team | Email Send | Notifies HR of strong candidates |\n| Wait 10s | Wait | Prevents SMTP rate limiting |\n| Shortlist Email - Candidate | Email Send | Congratulations to shortlisted |\n| Rejection Email - Candidate | Email Send | Polite rejection to others |\n\n---\n\n## 🔑 Key Technical Details\n\n**Why HTTP Request for sheet write instead of Google Sheets node?**\nThe standard Google Sheets node cannot reliably write to a specific row by row number. Using the Sheets API `PUT values/{range}` endpoint writes to the exact cell range `Form responses 1!J{rowNum}:R{rowNum}` — always the correct row regardless of concurrent submissions.\n\n**Why Read All Rows then Filter instead of reading one row?**\nThe Google Sheets Trigger fires on rowAdded but may not pass the exact new row data reliably. Reading all rows and filtering by `Processed ≠ 1` is more reliable and handles backlog processing too.\n\n**The `Processed` column (R)**\nSet to `1` after scoring completes. This prevents re-processing if the trigger fires again before the workflow finishes, or if old unprocessed rows exist.\n\n**3-layer AI output fallback:**\n1. Direct JSON parse\n2. Strip markdown fences then parse\n3. Regex extract JSON block\n4. Default values if all fail (score: 5, grade: Maybe)\n\n---\n\n## 📊 Sample Sheet Output After Scoring\n\n```\nCol J  (AI Score):      8\nCol K  (Grade):         Strong Yes\nCol L  (Strengths):     3+ yrs React experience; Strong TypeScript skills; Relevant API work\nCol M  (Weaknesses):    No Docker experience mentioned; No TypeScript explicitly listed\nCol N  (Recommendation): Invite for technical interview\nCol O  (Summary):       Strong frontend candidate with solid React/Vue background. Experience aligns well with role requirements. Minor gaps in DevOps knowledge.\nCol P  (Status):        Shortlisted\nCol Q  (Processed At):  2026-03-18T10:30:00.000Z\nCol R  (Processed):     1\n```\n\n---\n\n## 🔧 Customisation\n\n**Add more roles:**\nEdit the `JD_MAP` object in **Extract Fields + Load JD**:\n```javascript\nconst JD_MAP = {\n  'Your New Role': 'ROLE: ... REQUIREMENTS: ...',\n  // add as many as needed\n};\n```\n\n**Change the score threshold:**\nIn the **Score ≥ 7?** IF node, change `rightValue: 5` to any number. Setting to `8` makes the bar higher (only Strong Yes candidates shortlisted).\n\n**Add a second HR alert channel:**\nAfter the HR Alert Email, add a Slack or Telegram node to ping your team instantly for high-scoring candidates.\n\n**Add calendar booking link:**\nInclude a Calendly link in the shortlist email so candidates can self-schedule interviews immediately.\n\n**Extend with CV parsing:**\nAdd a Google Drive node before the AI scorer to download the CV attachment, extract text, and include it in the AI prompt for more accurate scoring.\n\n---\n\n## ⚠️ Important Notes\n\n- The Google Sheets Trigger polls every minute — there may be up to a 1-minute delay after form submission before scoring begins\n- The `Processed` column must exist in your sheet (column R) before activating the workflow\n- Trailing spaces in Google Forms column headers are common — the `key.trim()` normalization in the code handles this automatically\n- The Wait node between HR alert and shortlist email is intentional — prevents hitting SMTP rate limits when processing multiple candidates\n\n---\n\n## 💡 Enhancement Ideas\n\n- **CV download + parse** — download Google Drive CV attachment and include content in AI scoring\n- **Calendly integration** — auto-create interview slot and include booking link in shortlist email\n- **Slack alert** — instant Slack message to hiring manager for score ≥ 9 candidates\n- **Airtable sync** — mirror all candidate data to an Airtable CRM for pipeline tracking\n- **Telegram bot** — let HR check candidate status by texting a bot with the candidate email\n- **Multi-stage pipeline** — add a second workflow that triggers when HR marks a candidate for second round\n\n---\n\n## 📦 Requirements Summary\n\n- n8n (cloud or self-hosted)\n- Google Workspace account (Forms + Sheets)\n- Google AI Studio account for Gemini API key (free tier available)\n- SMTP email account (Gmail, SendGrid, Mailtrap etc.)\n\n---\n\n*Built with n8n · Google Gemini AI · Google Forms · Google Sheets · SMTP*","workflow":{"meta":{"instanceId":"18dd7b5b2a819da255b0592c0c20c9327ca21e0c36c31033c172c57edf46fb54","templateCredsSetupCompleted":true},"nodes":[{"id":"433bbc96-565d-47da-811f-4936022a9861","name":"Overview","type":"n8n-nodes-base.stickyNote","position":[304,1216],"parameters":{"color":5,"width":1400,"height":280,"content":"## 🤖 AI Resume Screener & Automated HR Notifier\n\nAutomatically scores job applicants using Google Gemini and routes personalised emails to HR and candidates.\n\n**How it works:** Polls a Google Sheet every minute → skips already-processed rows → maps the applied role to a Job Description → asks Gemini to score the candidate 1–10 → writes the analysis back to the sheet → sends an HR alert and candidate email based on the score.\n\n**Setup checklist:**\n- Google Sheets OAuth2 credential → connect to Trigger and HTTP Request nodes\n- Google Gemini API key → connect to the Gemini Chat Model node\n- Replace Sheet ID `1iv-8fToAzxBm8ht5vg-UP_p_hQzK4-....` in all Google Sheet nodes\n- Update `fromEmail` / `toEmail` in the three Send Email nodes\n- Extend `JD_MAP` in the Code node with your own open roles"},"typeVersion":1},{"id":"e6176f2d-8b14-4512-9189-d28c6049a258","name":"Step 1 — Trigger & Filter","type":"n8n-nodes-base.stickyNote","position":[304,1504],"parameters":{"color":7,"width":640,"height":524,"content":"### 📥 Step 1 — Trigger & Filter\n\n**Google Sheets Trigger** polls every minute and fires when a new row is added.\n\n**Read All Rows** re-fetches the full sheet so the filter has the latest state of every row.\n\n**Filter Unprocessed Rows** skips any row where column R (`col_18`) is already `'1'`, preventing duplicate processing."},"typeVersion":1},{"id":"027c71cd-96ce-4291-a11c-971d4023d1f5","name":"Step 2 — AI Assessment","type":"n8n-nodes-base.stickyNote","position":[976,1504],"parameters":{"color":7,"width":640,"height":528,"content":"### 🧠 Step 2 — AI Assessment\n\n**Extract Fields & Load JD** pulls the candidate's name, email, position, experience, and skills. It then looks up the matching Job Description from the built-in `JD_MAP`.\n\n**AI Resume Scorer** sends a structured prompt to Gemini requesting a raw JSON response containing: `score` (1–10), `grade`, `strengths`, `weaknesses`, `recommendation`, and `summary`.\n\n**Google Gemini Chat Model** is the sub-node that powers the AI agent above.\n\n**Parse AI Output** safely parses Gemini's JSON string and adds a `status` field: `'Shortlisted'` if score ≥ 7, otherwise `'Rejected'`."},"typeVersion":1},{"id":"158a24a4-956f-4120-a7e1-29fda0123fb6","name":"Step 3 — Sheet Update","type":"n8n-nodes-base.stickyNote","position":[1648,1520],"parameters":{"color":3,"width":420,"height":508,"content":"### 📊 Step 3 — Sheet Update\n\n**Build Sheet Request** constructs the Sheets API PUT URL and body, targeting columns J–R on the exact row number of the applicant.\n\n**Update Sheet Row** calls the Google Sheets API directly via HTTP Request (using OAuth2) to write all 9 fields in a single operation — including setting column R to `'1'` as the processed flag."},"typeVersion":1},{"id":"4701a168-c9fd-40c1-a366-2cf87dbdf604","name":"Step 4 — Routing & Emails","type":"n8n-nodes-base.stickyNote","position":[2096,1392],"parameters":{"color":3,"width":720,"height":736,"content":"### 📧 Step 4 — Score Routing & Emails\n\n**Check Score ≥ 7** branches the flow:\n\n**✅ True (shortlist path)**\n- **Alert HR Team** — notifies the HR inbox with the candidate's score and strengths.\n- **Wait 5s** — small delay before the candidate email goes out.\n- **Notify Shortlisted Candidate** — sends the applicant a congratulations and interview invitation.\n\n**❌ False (rejection path)**\n- **Notify Rejected Candidate** — sends a polite, professional decline email."},"typeVersion":1},{"id":"2e51960c-5ff0-4211-979a-5f19ac271124","name":"Filter Unprocessed Rows","type":"n8n-nodes-base.code","position":[800,1760],"parameters":{"mode":"runOnceForEachItem","jsCode":"\nconst row = $input.item.json;\n\n// Normalize keys\nconst r = {};\nfor (const key of Object.keys(row)) {\n  r[key.trim()] = (row[key] ?? '').toString().trim();\n}\n\nconst email = r['Email Address'] || '';\nif (!email) return null; // skip rows with no email\n\n// col_18 = column R = Processed\nconst processedByCol = (row['col_18'] ?? '').toString().trim();\nconst processedByName = r['Processed'] || '';\nconst processed = processedByCol || processedByName;\n\nif (processed === '1') {\n  return null; // skip\n}\n\nreturn { json: row };\n"},"typeVersion":2},{"id":"3eaf0b93-cb68-4513-b495-e78fb4e1685d","name":"Wait 5s","type":"n8n-nodes-base.wait","position":[2368,1760],"webhookId":"63948a7e-caff-44cc-98e0-5eba3aafe313","parameters":{},"typeVersion":1.1},{"id":"4f3b8291-cc37-4ec0-893c-0792c0462c25","name":"Google Sheets Trigger","type":"n8n-nodes-base.googleSheetsTrigger","position":[352,1760],"parameters":{"event":"rowAdded","options":{},"pollTimes":{"item":[{"mode":"everyMinute"}]},"sheetName":{"__rl":true,"mode":"list","value":525556004},"documentId":{"__rl":true,"mode":"id","value":"1iv-8fToAzxBm8ht5vg-UP_p_hQzK4-uqs2KWu06im4o"}},"typeVersion":1},{"id":"091927be-bdd9-426a-97f6-16029726c5fd","name":"Read All Rows","type":"n8n-nodes-base.googleSheets","position":[576,1760],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":525556004},"documentId":{"__rl":true,"mode":"id","value":"1iv-8fToAzxBm8ht5vg-UP_p_hQzK4-uqs2KWu06im4o"}},"typeVersion":4.5},{"id":"255e4cc8-2c04-4e80-aadc-99337b04420a","name":"Extract Fields & Load JD","type":"n8n-nodes-base.code","position":[1024,1760],"parameters":{"jsCode":"\nconst row = $input.first().json;\nconst r = {};\nfor (const key of Object.keys(row)) { r[key.trim()] = (row[key] ?? '').toString().trim(); }\n\nconst position   = r['Select the Position You Are Applying For'] || '';\nconst name       = r['Full Name'] || '';\nconst email      = r['Email Address'] || '';\nconst experience = r['Years of Experience'] || '';\nconst skills     = r['Relevant Skills'] || '';\nconst rowNum      = parseInt(row['row_number']) || 0;\n\nconst JD_MAP = {\n  'Frontend Developer': 'ROLE: Frontend Developer. REQUIREMENTS: 2+ years React/Vue, HTML/CSS/JavaScript.',\n  'Backend Developer': 'ROLE: Backend Developer. REQUIREMENTS: 2+ years Node.js/Python, SQL/NoSQL.',\n  'UI/UX Designer': 'ROLE: UI/UX Designer. REQUIREMENTS: Figma, Portfolio.',\n  'Project Manager': 'ROLE: Project Manager. REQUIREMENTS: 3+ years PM experience.',\n  'Digital Marketing Executive': 'ROLE: Digital Marketing Executive. REQUIREMENTS: SEO/SEM, Google Ads.'\n};\nconst jd = JD_MAP[position] || 'General professional evaluation.';\n\nreturn [{ json: { ...r, row_number: rowNum, jd } }];\n"},"typeVersion":2},{"id":"e5b40133-c73c-4f69-b178-198c10514287","name":"AI Resume Scorer","type":"@n8n/n8n-nodes-langchain.agent","position":[1248,1760],"parameters":{"text":"=You are an expert HR recruiter. Score this candidate based on JD: {{ $json.jd }}. Return JSON with score (1-10), grade, strengths, weaknesses, recommendation, and summary.","options":{"systemMessage":"HR recruiter AI. Return raw JSON only. Single line."},"promptType":"define"},"typeVersion":3.1},{"id":"e829e12d-c659-40ed-85dc-179b0f1b55c6","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[1168,1952],"parameters":{"options":{}},"typeVersion":1},{"id":"4d8ab33b-160d-42bb-88fb-243b0b284168","name":"Parse AI Output","type":"n8n-nodes-base.code","position":[1472,1760],"parameters":{"jsCode":"const aiRaw = $input.first().json.output || '';\nconst fd = $('Extract Fields & Load JD').first().json;\nlet p = { score: 5, grade: 'Maybe' };\ntry { p = JSON.parse(aiRaw); } catch(e) {}\nconst status = p.score >= 7 ? 'Shortlisted' : 'Rejected';\nreturn [{ json: { ...fd, ...p, status, processed_at: new Date().toISOString() } }];"},"typeVersion":2},{"id":"6270c4e8-eb44-4407-9b74-e760e8ddb88c","name":"Build Sheet Request","type":"n8n-nodes-base.code","position":[1696,1760],"parameters":{"jsCode":"const d = $input.first().json;\nconst rowNum = d.row_number;\nconst range = `Form responses 1!J${rowNum}:R${rowNum}`;\nconst values = [String(d.score), d.grade, d.strengths, d.weaknesses, d.recommendation, d.summary, d.status, d.processed_at, '1'];\nreturn [{ json: { ...d, _requestBody: { range, values: [values] }, _url: `https://sheets.googleapis.com/v4/spreadsheets/1iv-8fToAzxBm8ht5vg-UP_p_hQzK4-uqs2KWu06im4o/values/${encodeURIComponent(range)}?valueInputOption=RAW` } }];"},"typeVersion":2},{"id":"aebf1e28-2ea8-4fcc-b153-9be1bcbc32d5","name":"Update Sheet Row","type":"n8n-nodes-base.httpRequest","position":[1920,1760],"parameters":{"url":"={{ $json._url }}","method":"PUT","options":{},"jsonBody":"={{ JSON.stringify($json._requestBody) }}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"googleSheetsOAuth2Api"},"typeVersion":4.2},{"id":"99f3237d-7403-47d5-9c2c-21358c9fc6eb","name":"Check Score ≥ 7","type":"n8n-nodes-base.if","position":[2144,1760],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"c1","operator":{"type":"number","operation":"gte"},"leftValue":"={{ $json.score }}","rightValue":7}]}},"typeVersion":2.1},{"id":"7dafc992-096f-4a77-932c-e2d24e465ada","name":"Alert HR Team","type":"n8n-nodes-base.emailSend","position":[2368,1584],"webhookId":"b3bf1ff7-6d4e-4747-a113-39de11044eae","parameters":{"html":"Candidate scored {{ $json.score }}. Strengths: {{ $json.strengths }}","options":{},"subject":"=Shortlist Alert: {{ $json.name }} ({{ $json.score }}/10)","toEmail":"user@example.com","fromEmail":"user@example.com"},"typeVersion":2.1},{"id":"b66f1229-c0ee-4a5f-ad5a-aa99138e012d","name":"Notify Shortlisted Candidate","type":"n8n-nodes-base.emailSend","position":[2592,1760],"webhookId":"8b5df264-b432-4cdc-ae23-02ec23547df6","parameters":{"html":"Congrats! You were shortlisted with a score of {{ $json.score }}.","options":{},"subject":"=Interview Invitation - {{ $json.name }}","toEmail":"={{ $json.email }}","fromEmail":"user@example.com"},"typeVersion":2.1},{"id":"eded8fe9-3fc2-4e85-98b7-7d4688c31da5","name":"Notify Rejected Candidate","type":"n8n-nodes-base.emailSend","position":[2368,1952],"webhookId":"431618b0-0e13-4ba9-9f35-5819f487e905","parameters":{"html":"Thank you for applying. We won't be moving forward at this time.","options":{},"subject":"Application Update","toEmail":"={{ $json.email }}","fromEmail":"user@example.com"},"typeVersion":2.1}],"pinData":{},"connections":{"Wait 5s":{"main":[[{"node":"Notify Shortlisted Candidate","type":"main","index":0}]]},"Read All Rows":{"main":[[{"node":"Filter Unprocessed Rows","type":"main","index":0}]]},"Parse AI Output":{"main":[[{"node":"Build Sheet Request","type":"main","index":0}]]},"AI Resume Scorer":{"main":[[{"node":"Parse AI Output","type":"main","index":0}]]},"Update Sheet Row":{"main":[[{"node":"Check Score ≥ 7","type":"main","index":0}]]},"Check Score ≥ 7":{"main":[[{"node":"Alert HR Team","type":"main","index":0},{"node":"Wait 5s","type":"main","index":0}],[{"node":"Notify Rejected Candidate","type":"main","index":0}]]},"Build Sheet Request":{"main":[[{"node":"Update Sheet Row","type":"main","index":0}]]},"Google Sheets Trigger":{"main":[[{"node":"Read All Rows","type":"main","index":0}]]},"Filter Unprocessed Rows":{"main":[[{"node":"Extract Fields & Load JD","type":"main","index":0}]]},"Extract Fields & Load JD":{"main":[[{"node":"AI Resume Scorer","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"AI Resume Scorer","type":"ai_languageModel","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":19,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.emailSend":{"count":3},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.googleSheets":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.googleSheetsTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Nirav Gajera","username":"niravgajera","bio":"Full-stack Developer | PHP | Laravel | Vue.js | CodeIgniter | Nova | AWS | AI Automation ","verified":true,"links":["https://www.linkedin.com/in/nirav-gajera1/"],"avatar":"https://gravatar.com/avatar/7157fd8f0a74088248a6780d0536d9062ebdfb7cf7ed879b5ccee0b23403095d?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":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":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":841,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheetsTrigger","codex":{"data":{"alias":["CSV","Spreadsheet","GS"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.googlesheetstrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Google Sheets Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets Trigger","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":17,"name":"HR"},{"id":49,"name":"AI Summarization"}],"image":[]}}