Gmail + Google Sheets: CV scores sorted for you
Your inbox shouldn’t be your hiring system. But when CVs arrive in Gmail all day, it quietly becomes one: downloads, renames, “where did I save that file?”, then a rushed first-pass review that changes depending on who’s reading.
This Gmail CV scoring automation hits HR managers first, honestly. Recruiters feel it too. Founders doing hiring between meetings get the worst of it, because screening time steals from everything else.
This workflow pulls CVs from Gmail, stores the original in Google Drive, scores the candidate with GPT-4 against the right job details, then logs everything into Google Sheets so you can shortlist faster and more consistently.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Gmail + Google Sheets: CV scores sorted for you
flowchart LR
subgraph sg0["Gmail: Watch for new CV Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail: Watch for new CV", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Classify Email Type", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Model – Email Classif..", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Skip (If not a job applicati..", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Extract Resume Text (PDF)", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Save Resume to Google Drive", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Retrieve Job Offer Details (..", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "AI Agent: Score Resume", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Model – Resume Scoring", pos: "b", h: 48 }
n9@{ icon: "mdi:message-outline", form: "rounded", label: "Send Confirmation Email", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Parse Resume Evaluation Result", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Save Score to Google Sheets", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Save CV to Google Sheets", pos: "b", h: 48 }
n12 --> n5
n12 --> n4
n1 --> n3
n1 --> n12
n7 --> n11
n0 --> n1
n9 -.-> n7
n4 --> n6
n5 --> n13
n10 -.-> n7
n8 -.-> n7
n2 -.-> n1
n6 --> n7
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 n0 trigger
class n1,n7,n10 ai
class n2,n8 aiModel
class n12 decision
class n6,n11,n13 database
The Challenge: Consistent CV Screening Without Living in Your Inbox
Manual resume review feels simple until volume shows up. A candidate emails a PDF, you download it, scan it, and try to remember the job requirements from a doc you opened yesterday. Then another CV lands, and another, and suddenly you have three versions of the “shortlist” living in different places. The real pain isn’t just time. It’s inconsistency, lost context, and the nagging sense you might be missing strong candidates because you’re tired or rushed.
It adds up fast. Here’s where it breaks down in day-to-day hiring.
- CVs get reviewed with different standards because the job criteria isn’t right in front of you every time.
- Attachments get saved “somewhere,” which becomes a scavenger hunt when a hiring manager asks for the original file.
- Good candidates slip through because the first pass takes too long, so follow-ups happen late.
- Notes live in email threads or sticky docs, which makes filtering and comparing candidates a chore.
The Fix: Auto-Score CVs From Gmail and Sort Them in Sheets
This workflow turns your incoming CV emails into a clean, searchable screening pipeline. When a new email hits your CV inbox, it first checks if the message is actually an application (not a vendor pitch or a random newsletter). If it is, the workflow looks for the resume attachment, stores the original file in Google Drive, and extracts the text from the PDF so it’s usable for evaluation. Next, it pulls the relevant job details from a connected Google Sheet and asks GPT-4 to score the candidate against that role. Finally, it writes the score and key notes back into your central Google Sheet and sends a receipt email to the applicant so they know you got it.
The workflow starts with Gmail monitoring your inbox. From there, an AI classifier filters noise, PDF text extraction makes the resume readable, and Google Drive keeps the original safe. Then GPT-4 evaluates fit using job data from Sheets, and the final score lands in a single spreadsheet row you can sort and filter.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you receive 20 CVs a week for one role. Manually, you might spend about 10 minutes per email to download the file, skim it, compare it to the job description, then log notes somewhere, which is roughly 3 hours a week. With this workflow, you spend maybe 5 minutes setting it up once, then each new CV is automatically filed in Drive and scored into Sheets while you keep working. You just open the spreadsheet and sort by score.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail to detect new CV emails and reply.
- Google Sheets to store job details and candidate scores.
- Google Drive to store original resume files securely.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect Google accounts in n8n and paste an API key, then adjust a few sheet columns and prompts.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Gmail detects a new CV email. The workflow watches the inbox you use for applications, then grabs the message content and attachments as soon as it arrives.
An AI classifier filters out non-applications. Using an OpenAI chat model plus a text classification step, it separates actual candidates from everything else so your sheet doesn’t fill with junk.
The resume is stored and converted into usable text. If there’s an attachment, the PDF is uploaded to Google Drive, and the workflow extracts the resume text so GPT-4 can evaluate it reliably.
Job details are pulled from Google Sheets, then scoring happens. The workflow fetches the job offer row (or sheet) you maintain, sends the job criteria plus resume text into the AI scoring agent, and parses the structured output into a clean score and notes.
Results land in Sheets and the applicant gets a receipt. Candidate name, score, notes, and a Drive link are recorded, and Gmail sends a simple confirmation email back to the applicant.
You can easily modify the scoring criteria to match each role, or expand the sheet columns to include “Stage,” “Owner,” or “Interview date” based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Gmail Trigger
Set up the inbound email trigger so only unread emails with attachments are processed for resume intake.
- Open Gmail CV Watcher and confirm the filter query is set to
has:attachment. - Set Read status to
unreadand ensure Download attachments is enabled. - Set the polling schedule to run
everyHouratminute 1. - Credential Required: Connect your
gmailOAuth2credentials to Gmail CV Watcher.
Step 2: Connect Google Drive and Google Sheets
Store attachments in Drive and log links and scoring data into Sheets.
- In Store Resume in Drive, set Name to
{{ $('Gmail CV Watcher').item.json.from.value[0].address }}and Input Data Field Name toattachment_0. - Select the target folder for resumes in Store Resume in Drive (e.g., the folder labeled
CV - HR). - Credential Required: Connect your
googleDriveOAuth2Apicredentials to Store Resume in Drive. - In Append CV Link Sheet, keep Operation as
appendand map Email to{{ $('Gmail CV Watcher').item.json.from.value[0].address }}and Link CV to{{ $('Store Resume in Drive').item.json.webViewLink }}. - In Fetch Job Offer Sheet, select the correct Document and Sheet where job descriptions live.
- In Record Score in Sheets, keep Operation as
appendOrUpdateand Matching Columns set toEmail. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials to Append CV Link Sheet, Fetch Job Offer Sheet, and Record Score in Sheets.
Step 3: Set Up Classification and Routing
Classify the email intent and route only valid job applications with attachments.
- In Categorize Email Intent, set Input Text to
{{ $json.text }}. - Ensure OpenAI Classifier Model is connected as the language model for Categorize Email Intent.
- Credential Required: Connect your
openAiApicredentials to OpenAI Classifier Model. - In Route Attachment Presence, keep the rules that check for
attachment_0existence. - Confirm the route from Categorize Email Intent to Ignore Non-Applications handles the “Doesn't apply” category.
Step 4: Set Up Resume Extraction and AI Scoring
Extract PDF text, fetch the job description, and run the AI agent to score candidates.
- In Extract PDF Resume Text, set Operation to
pdfand Binary Property Name toattachment_0. - In AI Resume Scoring Agent, set the Text field to the full prompt including
{{ $('Extract PDF Resume Text').item.json.text }},{{ $json['Title offer'] }}, and{{ $json.Description }}. - Ensure OpenAI Scoring Model is connected as the language model for AI Resume Scoring Agent.
- Credential Required: Connect your
openAiApicredentials to OpenAI Scoring Model. - Confirm Parse Scoring Output is connected as the output parser for AI Resume Scoring Agent and uses the provided JSON schema.
Step 5: Configure Output Actions
Log the AI results and send a confirmation email to the candidate.
- In Record Score in Sheets, map fields to the AI output and resume text, including
{{ $json.output.name }},{{ $json.output.score }}, and{{ $('Extract PDF Resume Text').item.json.text }}. - In Send Receipt Email, set Send To to
{{ $('Gmail CV Watcher').item.json.from.value[0].address }}and Subject toApplication Received. - Leave the AI-generated message as
{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}so the agent can compose it. - Credential Required: Connect your
gmailOAuth2credentials to Send Receipt Email.
Step 6: Test and Activate Your Workflow
Validate the end-to-end flow before switching it on for production.
- Manually run the workflow by sending an unread email with a PDF resume attachment to the monitored inbox.
- Confirm that Store Resume in Drive creates a file and Append CV Link Sheet logs the email and Drive link.
- Verify that Record Score in Sheets writes the candidate’s extracted details and score.
- Check the inbox for the confirmation email sent by Send Receipt Email.
- Once successful, toggle the workflow to Active for continuous processing.
Watch Out For
- Google OAuth credentials can expire or need specific permissions. If things break, check the n8n credential connection status and your Google Cloud API access first (Gmail, Drive, and Sheets).
- If your resumes are large or scanned PDFs, PDF text extraction can return thin results. In that case, you may need a different extraction method, or you’ll see vague AI scoring because there’s not enough text.
- Default AI prompts are generic. Add your must-haves (years of experience, required tools, location rules) early, or you will be second-guessing scores in the sheet every day.
Common Questions
About an hour if your Google accounts and OpenAI key are ready.
Yes, but you’ll want one person comfortable with connecting OAuth credentials in n8n. No coding, just setup and a bit of testing with real emails.
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 OpenAI API usage, which is usually a few cents per CV depending on resume length and your prompt.
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.
You can change the evaluation criteria inside the AI Resume Scoring Agent prompt so the score reflects your hiring rubric, not a generic “good resume” standard. Many teams add columns like “Must-have match,” “Concerns,” and “Recommended stage,” then map those fields from Parse Scoring Output straight into Record Score in Sheets. If you hire for multiple roles, pull different job profiles in Fetch Job Offer Sheet and route to different prompts based on the role name. You can also replace the receipt message in Send Receipt Email to match your tone and include next steps.
Usually it’s expired Google OAuth credentials or a missing Gmail API permission in your Google Cloud project. Reconnect the Gmail credential in n8n, then confirm Gmail API is enabled and your consent screen is still valid. If it fails only sometimes, rate limits or inbox rules can be involved, especially when you receive many CVs at once.
It scales fine for most small teams, and the practical limit is usually your n8n plan and OpenAI usage, not the logic itself.
Often, yes, especially if you want structured parsing, branching logic, and the option to self-host. This workflow uses AI classification, file handling, and structured output parsing, which tends to get awkward (and pricey) in simpler automation tools once you add real screening rules. n8n also makes it easier to keep everything in one workflow: Gmail in, Drive storage, Sheets updates, then an email out. Zapier or Make can still be a good choice if you only need “email received → add row to sheet” and nothing more. Talk to an automation expert if you want a quick recommendation for your exact stack.
You end up with one sheet that tells the truth: who applied, where the CV is, and how strong the fit looks. The workflow handles the repetitive parts so your hiring decisions can get the attention.
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.