Gmail to Slack, CV screening summaries your team trusts
Your hiring inbox fills up fast. Then someone forwards “just one more CV,” attachments get lost in threads, and you’re back to guessing who reviewed what.
This Gmail Slack screening automation hits recruiters first, but hiring managers and ops leads feel the knock-on effects too. You get consistent first-pass screening summaries, a clean Google Sheets log, and a Slack message your team can act on in seconds.
Below is the exact n8n workflow. You’ll see how it routes CVs, matches them to the right job description, scores candidates, and posts decision-ready summaries to Slack.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Gmail to Slack, CV screening summaries your team trusts
flowchart LR
subgraph sg0["Receive CV via Email Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Trigger Google Docs Conversion"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Stream Doc/Docx File"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Preserve CV file"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Standardize", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Extract from File", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Information Extractor", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Web Link"]
n9@{ icon: "mdi:cog", form: "rounded", label: "Download CV - PDF", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Download CV - GDoc as PDF", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch - File Type", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Upload CV - PDF", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Extract from PDF Download", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Extract from PDF", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Download Selected JD", pos: "b", h: 48 }
n16@{ icon: "mdi:play-circle", form: "rounded", label: "Receive CV via Email", pos: "b", h: 48 }
n17@{ icon: "mdi:robot", form: "rounded", label: "JD Matching Agent", pos: "b", h: 48 }
n18@{ icon: "mdi:robot", form: "rounded", label: "Detailed JD Matching Agent", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Download Selected JD1", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Extract from File1", pos: "b", h: 48 }
n22@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Flash", pos: "b", h: 48 }
n23@{ icon: "mdi:cog", form: "rounded", label: "Access JD Files", pos: "b", h: 48 }
n24["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Transform for Multiple JDs"]
n25@{ icon: "mdi:swap-horizontal", form: "rounded", label: "JD Match w/Email?", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set as Selected JD Format", pos: "b", h: 48 }
n28["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Match Selected JD Name with .."]
n29@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Pro-1", pos: "b", h: 48 }
n30@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Flash-1", pos: "b", h: 48 }
n31@{ icon: "mdi:swap-vertical", form: "rounded", label: "Standardize Web Link and CV ..", pos: "b", h: 48 }
n32@{ icon: "mdi:swap-vertical", form: "rounded", label: "Standardize Web Link and CV ..", pos: "b", h: 48 }
n33["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send Candidate Screening Con.."]
n34@{ icon: "mdi:robot", form: "rounded", label: "Recruiter Scoring Agent", pos: "b", h: 48 }
n35@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Pro-2", pos: "b", h: 48 }
n36@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser-1", pos: "b", h: 48 }
n37@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser-3", pos: "b", h: 48 }
n38@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser-2", pos: "b", h: 48 }
n26 --> n19
n3 --> n0
n4 --> n17
n8 --> n10
n23 -.-> n17
n19 --> n18
n19 --> n20
n12 --> n9
n14 --> n31
n22 -.-> n17
n29 -.-> n18
n35 -.-> n34
n2 --> n3
n9 --> n14
n5 --> n27
n25 --> n15
n25 --> n24
n17 --> n25
n21 --> n26
n30 -.-> n6
n11 --> n1
n11 --> n2
n11 --> n12
n7 --> n33
n15 --> n5
n16 --> n11
n1 --> n3
n20 --> n21
n6 --> n7
n34 --> n6
n10 --> n13
n13 --> n32
n27 --> n34
n18 --> n28
n36 -.-> n17
n38 -.-> n18
n37 -.-> n34
n24 --> n19
n0 --> n8
n28 --> n34
n31 --> n4
n32 --> n4
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n16 trigger
class n6,n17,n18,n34,n36,n37,n38 ai
class n22,n29,n30,n35 aiModel
class n11,n25 decision
class n7 database
class n0,n1,n8 api
class n2,n24,n28 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n8,n24,n28,n33 customIcon
The Problem: CV screening turns into inbox archaeology
Manual first-round screening sounds manageable until volume kicks in. You download a PDF, open it, skim for keywords, then try to remember which job it applies to because the candidate wrote “excited to apply” and nothing else. Someone asks, “Did we already review this person?” and the answer is buried across Gmail, Drive, Slack, and a half-updated spreadsheet. Worse, decisions get made from inconsistent notes. Two people can read the same CV and come away with totally different “gut feel,” which means you spend the next meeting re-litigating basics.
The friction compounds. Here’s where it breaks down.
- Downloading, renaming, and filing CVs eats about 10 minutes per candidate when you include “where did I save that?” moments.
- Matching candidates to the right job description is messy when you’re hiring for multiple roles at once.
- Notes live in private DMs or ad-hoc comments, so the team can’t see the same summary at the same time.
- No audit trail means you can’t easily explain why someone moved forward or got rejected.
The Solution: Gmail → AI screening → Google Sheets log → Slack decisions
This n8n workflow watches Gmail for incoming applications that you label (for example, “CV-Screening”). When a new email arrives, it grabs the attachment, detects whether it’s a PDF or a Word document, and standardizes it so text can be extracted reliably. Then the AI matching logic kicks in: it tries to infer the role from the candidate’s email first, and if that’s unclear, it falls back to analyzing the CV itself. Once it identifies up to a few possible job descriptions, a second AI pass selects the single best match. Finally, the “AI recruiter” analysis generates a structured screening report, logs everything to Google Sheets, saves the CV to Google Drive with consistent naming, and posts a formatted Slack summary with Proceed/Reject buttons so the team can decide quickly.
The workflow starts with a labeled Gmail message. It turns attachments into readable text, matches that text to your job description library in Google Drive, then produces a consistent score and summary. Slack gets the “ready to decide” version, and Google Sheets becomes your source of truth.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team receives 20 CVs a week across three open roles. Manually, you might spend 10 minutes downloading and filing, another 10 minutes skimming and taking notes, plus 5 minutes posting context into Slack, which is about 25 minutes per candidate (roughly 8 hours weekly). With this workflow, your “work” is applying a Gmail label and letting it run; call it 1 minute per candidate, plus a bit of waiting while the AI analyzes. You still review the summary, but you’re no longer doing the admin, and the decision shows up where the team already works.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail to receive labeled candidate emails.
- Google Drive to store CVs and job descriptions.
- Google Sheets to keep the screening audit trail.
- Slack to deliver summaries and collect decisions.
- Google Gemini API key (get it from Google AI Studio).
Skill level: Intermediate. You’ll connect OAuth accounts, set folder IDs, and lightly edit prompts without writing code.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A labeled Gmail email arrives. The workflow monitors your inbox for a specific label (like “CV-Screening”), so only the applications you want get processed.
The CV is standardized and read. PDF and Word attachments are handled automatically, converted when needed, then turned into clean text the AI can work with.
Job description matching and screening happens. An AI agent first tries to match the candidate to a role based on what they wrote in the email. If that’s thin, it uses the CV content as backup, then selects the single best-fit JD and produces a structured report with strengths, weaknesses, and a 0–10 fit score with reasoning.
Everything is saved and shared. The CV is uploaded to Google Drive with consistent naming, the full analysis is appended to Google Sheets, and Slack gets a formatted summary with Proceed/Reject buttons for quick action.
You can easily modify the scoring criteria to focus more on culture fit, technical depth, or leadership based on your needs. See the full implementation guide below for customization options.
Common Gotchas
- Gmail credentials can expire or need specific permissions. If things break, check the n8n Gmail credential status and confirm the CV label is still selected in your “Receive CV via Email” node first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Gemini API access can fail if the key is wrong or restricted. If screening suddenly returns blank or errors, re-check your Google AI Studio key and any project-level quotas or billing settings.
Frequently Asked Questions
About an hour if your Google and Slack accounts are ready.
No. You’ll connect accounts and paste in a few folder IDs and sheet names. The only “tweaking” is editing AI prompts in plain English.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Gemini API costs (it often stays in the free tier, but check current Google AI pricing).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Update the system message in the “Recruiter Scoring Agent” to weight what matters to you (technical depth, portfolio quality, leadership, culture fit), and tweak the “JD Matching Agent” prompts to better reflect your role titles. Many teams also change the Slack message format to include the top 3 risks and a one-line interview recommendation.
Usually it’s expired OAuth credentials or the bot isn’t allowed to post in the target channel. Re-authorize Slack in n8n, then confirm the channel ID in the “Send Candidate Screening Confirmation” node matches the channel your team actually uses.
A lot for small teams.
Often, yes, because this workflow has branching logic, file handling, and multi-stage AI decisions that get clunky (and pricey) in simpler builders. n8n also lets you self-host, which matters when you start processing lots of CVs. Zapier or Make can still be fine if you only want “email arrives → send Slack message” with no job matching, no scoring, and no audit trail. The moment you want Drive storage plus Sheets logging plus AI prompts, n8n feels more stable. If you’re unsure, Talk to an automation expert and get a quick recommendation based on your volume and roles.
This workflow keeps screening consistent and visible, without turning your team into spreadsheet clerks. Set it up once, then let Slack carry the decisions.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.