Gmail to Google Sheets, scored resumes in one list
Your hiring inbox fills up, fast. A few great candidates get buried under “almost right” resumes, and your process turns into tab-switching, renaming files, and trying to remember who looked promising.
Recruiters feel this when volume spikes. A hiring manager trying to move quickly feels it too, and honestly, so does a founder doing their first serious round of hiring. This Gmail resume scoring automation turns incoming resume emails into a ranked shortlist you can actually work from.
Below, you’ll see exactly how the workflow runs, what results to expect, and what you need to set it up in n8n without turning it into an IT project.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Gmail to Google Sheets, scored resumes in one list
flowchart LR
subgraph sg0["Trigger on new Email Received Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Extract text from PDF File", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Agent to evaluate Resume", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model (GPT 4o-mi..", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Add Resume Evaluation to Goo..", pos: "b", h: 48 }
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Trigger on new Email Received", pos: "b", h: 48 }
n0 -.-> n2
n1 --> n2
n2 --> n4
n5 --> n1
n3 -.-> n2
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 n5 trigger
class n0,n2 ai
class n3 aiModel
class n4 database
The Problem: Resume Triage Turns Into Inbox Archaeology
Resume screening sounds simple until you’re doing it at speed. The resumes arrive as PDFs inside emails, sometimes with missing context, sometimes with vague subject lines, and often in bursts that blow up your afternoon. You open, download, skim, take notes, try to compare candidates fairly, then repeat. After about 20 resumes, everything blurs together. The real cost isn’t just time. It’s the mental load, the inconsistent decisions, and the good candidates you meant to revisit but never did.
The friction compounds. Small manual steps create big delays once the volume hits “dozens,” not “three.”
- You end up re-reading the same resume twice because there’s no single shortlist to work from.
- Notes live in too many places (email threads, docs, Slack messages, your memory), so decisions become inconsistent.
- It’s easy to miss key signals like a required skill or relevant industry experience when you’re scanning quickly.
- Sharing candidates with a team turns into forwarding emails and hunting down “the latest version” of the PDF.
The Solution: Gmail → AI Parsing → Scored Rows in Google Sheets
This workflow watches a Gmail inbox for unread emails that include PDF resume attachments. When a new application arrives, it pulls the PDF out of the email, converts it into text, and sends that text to an AI agent powered by an OpenAI chat model. The agent extracts structured fields (like name, email, LinkedIn, skills, education) and applies your evaluation criteria to produce a score. Finally, it appends one clean row to a Google Sheet, so every applicant lands in the same place with the same format and a comparable score. No downloading. No copy-paste. No “where did I put that one?”
The workflow starts with an Incoming Email Trigger in Gmail. Then it derives text from the PDF and passes it into the Resume Review Agent, which uses the OpenAI Chat Engine plus a structured output schema. At the end, Append Evaluation to Sheets logs the candidate details and score in Google Sheets.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you receive 30 applications over a day. Manually, even a quick routine (open email, download PDF, skim, jot notes, then log basics) is maybe 4 minutes each, which is about 2 hours. With this workflow, you spend a couple minutes setting criteria and checking the sheet, then let n8n process the batch in the background. In practice, most teams end up with about 20 minutes of review time because the sheet is already ranked and searchable.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail to receive resume emails and attachments.
- Google Sheets to store your scored candidate shortlist.
- OpenAI API key (get it from your OpenAI API dashboard)
Skill level: Intermediate. You’ll connect Google OAuth, add your scoring criteria, and test with a few real resumes.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
New resume emails trigger the run. The Gmail Trigger checks on a schedule (for example, every 6 or 24 hours) and looks for unread emails with PDF attachments in the inbox you choose.
The PDF becomes usable text. n8n pulls the resume attachment out of the email and uses a file extraction step to derive the resume text, so you’re not asking the model to “guess” from a messy format.
AI extracts fields and applies your scoring rules. The Resume Review Agent uses the OpenAI Chat Engine plus a structured output schema so you get the same columns every time (name, email, LinkedIn, skills, education, and score).
Everything lands in one Google Sheet. The workflow appends a new row per candidate, which means you can sort by score, filter by keywords, and share one link with the team instead of forwarding attachments.
You can easily modify the scoring criteria to match each role you’re hiring for based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Incoming Email Trigger
Set up the Gmail trigger to watch for unread emails with attachments so resumes can be processed automatically.
- Add the Incoming Email Trigger node as your workflow trigger.
- Credential Required: Connect your gmailOAuth2 credentials.
- Set Simple to
false. - In Filters, set q to
has:attachment. - In Filters, set labelIds to
UNREADand readStatus tounread. - In Options, enable downloadAttachments by setting it to
true. - In Poll Times, add an item with mode
everyHourand minute1.
attachment_0.Step 2: Connect Google Sheets
Prepare the destination sheet where the evaluation results will be appended.
- Add the Append Evaluation to Sheets node.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Operation to
append. - Set Document ID to
[YOUR_ID]. - Set Sheet Name to
[YOUR_ID](cached name showsResume Score). - In Options, ensure useAppend is
true.
Name, Email, Score, LinkedIn, and Resume text.Step 3: Set Up Resume Text Extraction
Extract readable text from PDF attachments so the AI agent can analyze the resume.
- Add the Derive Text from PDF node.
- Set Operation to
pdf. - Set Binary Property Name to
attachment_0. - Connect Incoming Email Trigger → Derive Text from PDF in the main flow.
Step 4: Set Up the AI Scoring Pipeline
Configure the AI agent and schema parser to extract structured fields and generate a resume score.
- Add the Resume Review Agent node and set Text to
=Here is the resume:{{ $json.text }}. - Set Prompt Type to
defineand enable hasOutputParser. - In Options → systemMessage, use:
You are an invaluable assistant. You were given a resume. You have to help me analyze the resume and give it a score based on the details available in the resume. Also, extract the name, email, and LinkedIn profile from the resume. - Add the OpenAI Chat Engine node as the language model and set Model to
gpt-4o-mini. - Credential Required: Connect your openAiApi credentials to OpenAI Chat Engine.
- Add the Parsed Output Schema node and set Schema Type to
manualwith Input Schema set to the provided JSON schema. - Connect OpenAI Chat Engine to Resume Review Agent as the ai_languageModel.
- Connect Parsed Output Schema to Resume Review Agent as the ai_outputParser.
- Connect Derive Text from PDF → Resume Review Agent in the main flow.
Step 4: Configure the Output to Google Sheets
Map the AI output into sheet columns so each evaluated resume becomes a new row.
- Open Append Evaluation to Sheets and set column mappings in Columns → Value.
- Set Name to
{{ $json.output.name }}. - Set Email to
{{ $json.output.email }}. - Set Score to
{{ $json.output.score }}. - Set LinkedIn to
{{ $json.output.linkedin }}. - Set Resume text to
{{ $('Derive Text from PDF').item.json.text }}. - Connect Resume Review Agent → Append Evaluation to Sheets in the main flow.
Step 5: Test and Activate Your Workflow
Verify the end-to-end flow and then activate it for production use.
- Click Execute Workflow and send a test email with a PDF resume attached to the Gmail account monitored by Incoming Email Trigger.
- Confirm that Derive Text from PDF outputs a
textfield. - Verify Resume Review Agent returns structured output with
name,email,linkedin, andscore. - Check your Google Sheet to ensure a new row is appended by Append Evaluation to Sheets.
- When satisfied, toggle the workflow to Active to run automatically.
Common Gotchas
- Google (Gmail/Sheets) OAuth credentials can expire or need specific permissions. If things break, check the credential status in n8n and confirm Gmail API + Google Sheets API are enabled in Google Cloud Console 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.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your Google and OpenAI credentials are ready.
No. You’ll mostly connect accounts and tweak the scoring prompt and sheet columns.
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 costs, which are usually a few cents per resume depending on the model and prompt size.
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 evaluation criteria in the Resume Review Agent prompt so it scores for that role (for example, “B2B SaaS AE,” “React developer,” or “Office manager”). You can also adjust the structured output schema to add fields like location, salary expectations, or visa status, then map those fields into new Google Sheets columns.
Most of the time it’s an OAuth issue or missing API access in Google Cloud Console. Reconnect the Gmail credential in n8n, confirm the Gmail API is enabled, and make sure the account has permission to read messages and attachments. If it still fails, check whether your trigger is filtering too narrowly (unread only, specific labels, or attachment type) and returning zero matching emails.
A typical small team can run hundreds of resumes a week without trouble, as long as you respect Google and OpenAI rate limits.
Often, yes, if you care about structured extraction and scoring quality. n8n is built for multi-step logic, so you can parse PDFs, enforce a strict output schema, and add branching rules without paying per tiny “step.” Self-hosting is also a big deal when volume grows because you’re not watching task limits every week. Zapier or Make can still be fine for lightweight routing, but resume parsing tends to get messy unless you can control the AI prompt, the output structure, and the error handling. If you want help choosing, Talk to an automation expert.
Once this is running, your inbox stops being the system. The sheet becomes the system, and you get hours back every week to spend on actual hiring 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.