Gmail to Google Sheets, resumes scored and sorted
Your inbox wasn’t built to be an ATS. You get a burst of resumes, attachments are named weirdly, details are scattered across PDFs, and the “quick shortlist” turns into an afternoon of copy-paste.
This resume screening automation hits recruiters first, honestly, but founders and ops leads feel it too when hiring ramps up. Instead of reading every CV top-to-bottom, you get a consistent summary, a 1–10 score, and a clean row in Google Sheets that you can sort in seconds.
Below, you’ll see how the workflow routes resumes from Gmail into Google Drive, turns them into text, evaluates them with an AI agent, and logs everything into Sheets (and Airtable) for a tidy shortlist.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Gmail to Google Sheets, resumes scored and sorted
flowchart LR
subgraph sg0["Gmail Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Upload file", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Download file", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Extract from File", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Information Extractor", pos: "b", h: 48 }
n5@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model1", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n9["<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/>Code"]
n10["<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"]
n11@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", pos: "b", h: 48 }
n12["<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/airtable.svg' width='40' height='40' /></div><br/>Create a record"]
n13["<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/form.svg' width='40' height='40' /></div><br/>On form submission"]
n9 --> n10
n10 --> n11
n10 --> n12
n6 --> n8
n8 --> n9
n1 --> n2
n2 --> n3
n0 --> n1
n3 --> n4
n3 --> n6
n13 --> n1
n4 --> n10
n5 -.-> n4
n7 -.-> n6
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,n13 trigger
class n4,n6 ai
class n5,n7 aiModel
class n11,n12 database
class n9 code
classDef customIcon fill:none,stroke:none
class n9,n10,n12,n13 customIcon
The Challenge: Resume screening turns into inbox chaos
Manual screening sounds manageable until it isn’t. One role goes live, resumes start arriving through Gmail (and sometimes a form), and suddenly you’re opening attachments, hunting for phone numbers, and trying to remember which candidate had “that Kubernetes project.” Then you create a sheet, but the data isn’t consistent because you typed it differently each time. A few days later, you can’t confidently answer basic questions like “Who are our top 10?” or “Which resumes did we already review?” The time cost hurts, but the mental load is what really drags you down.
It adds up fast. Here’s where it breaks down.
- Opening, renaming, and filing resume attachments steals about 2 hours a week once volume picks up.
- Contact details get missed because they’re buried in headers, footers, or non-standard layouts.
- Scoring is inconsistent when five people “just skim” and everyone uses different criteria.
- Without a centralized log in Google Sheets (or Airtable), follow-ups and shortlists become guesswork.
The Fix: Gmail-to-Sheets screening with AI summaries and scoring
This workflow builds a simple, dependable resume screening pipeline using n8n. New resumes arrive through Gmail (or a form submission), and the attachments are immediately stored in a Google Drive folder so you always have a source of truth. The workflow then downloads the stored file and extracts the text from the PDF/DOC so it can be analyzed reliably. From there, it splits into two parallel checks: one pulls structured contact info (name, email, phone) and the other uses an AI agent to summarize education, job history, and skills, then assigns a suitability score from 1–10 with a short justification. Finally, it cleans and normalizes the AI output, merges everything into one candidate record, and logs that record into Google Sheets and Airtable.
The workflow starts when a resume hits Gmail or your form endpoint. Google Drive handles storage and retrieval, then the extracted text feeds both the information extractor and the AI agent. At the end, Google Sheets becomes your sortable shortlist, while Airtable can power dashboards and a lightweight ATS-style view.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you’re hiring for one role and you receive 30 resumes in a week. Manually, you might spend about 10 minutes per resume to download, skim, grab contact details, and paste notes into a sheet, which is roughly 5 hours. With this workflow, intake is automatic, storage is automatic, and the summary + score are generated for you; your “work” becomes reviewing the top 10 scored rows in Google Sheets. That usually looks like 30–45 minutes, not half a day.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail to capture incoming resume attachments.
- Google Drive for storing and retrieving resume files.
- Google Sheets to log candidates into a sortable shortlist.
- Airtable for dashboards and longer-term record-keeping.
- OpenAI or OpenRouter API key (get it from your OpenAI/OpenRouter dashboard)
Skill level: Intermediate. You’ll connect credentials, set a Drive folder, and adjust a few fields/prompts.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A resume arrives in Gmail or your form. The workflow watches your inbox for applications (you can filter by job title or keywords), and it also supports a form-trigger route for career pages and portals.
The file is stored, then converted to usable text. The attachment is uploaded into Google Drive, then downloaded back from Drive to keep the pipeline consistent. Next, the workflow extracts text from the resume so downstream steps aren’t guessing from a binary PDF.
Two parallel analyses run. One path extracts structured contact information (candidate name, email, phone). The other path uses an AI agent to produce education, job history, skills, plus a 1–10 score and justification using your chosen model via OpenRouter or OpenAI.
The result is cleaned, merged, and logged. A set-and-transform phase normalizes the AI output into predictable fields, then both branches are merged into one candidate record. That record is appended to Google Sheets and also created in Airtable for dashboards and filtering.
You can easily modify the scoring criteria to match one role, or swap the destination from Google Sheets to another system based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Gmail Trigger
This workflow starts when a CV arrives via Gmail or a form submission.
- Open Incoming Gmail Watcher and set the filter query in Filters to
Senior Software Engineer. - Enable attachment download in Options and set Data Property Attachments Prefix Name to
CV. - Set Poll Times to run
everyMinute. - Credential Required: Connect your gmailOAuth2 credentials in Incoming Gmail Watcher.
- Open Form Submission Trigger and set Form Title to
Senior Software Engineerso form uploads can also start the workflow.
Execution Note: Both Incoming Gmail Watcher and Form Submission Trigger output to Store Attachment in Drive.
Step 2: Connect Google Drive for CV Storage
Attachments are saved to Drive and then downloaded for text extraction.
- In Store Attachment in Drive, set Name to
={{ $json.from.value[0].name }}. - Set the Folder to your target folder and keep Input Data Field Name as
CV0. - Credential Required: Connect your googleDriveOAuth2Api credentials in Store Attachment in Drive.
- In Fetch Drive File, set Operation to
downloadand File ID to={{ $json.id }}. - Credential Required: Connect your googleDriveOAuth2Api credentials in Fetch Drive File.
Step 3: Set Up AI Extraction and Summarization
Extract text from the PDF and send it through parallel AI flows for structured fields and summarization.
- Open Extract PDF Text and set Operation to
pdf. - In Structured Info Parser, set Text to
={{ $json.text }}and keep the Input Schema as provided to extractcandidate_name,email_address, andcontact_number. - OpenRouter Chat Engine is connected as the language model for Structured Info Parser — ensure credentials are added to OpenRouter Chat Engine.
- In CV Summary Agent, set Text to
=CV: {{ $json.text }}and keep the Prompt Type asdefineto use the built-in system message. - OpenRouter Chat Engine 2 is connected as the language model for CV Summary Agent — ensure credentials are added to OpenRouter Chat Engine 2.
Parallel Execution: Extract PDF Text outputs to both Structured Info Parser and CV Summary Agent in parallel.
Step 4: Transform and Merge Results
Normalize the summary output and merge it with the structured fields.
- In Map Output Fields, set the assignment output to
={{ $json.output }}to standardize the agent response. - Review Transform Summary Script and keep the provided JavaScript to extract
Educational Qualifications,Job History,Skill Set, and theScoreandJustification. - In Combine Results, set Mode to
combineand Combine By tocombineAll.
Step 5: Configure Output Destinations
Write the combined results to Google Sheets and Airtable at the same time.
- In Append Spreadsheet Row, set Operation to
appendand map columns using the existing expressions such as={{ $json.output.candidate_name }}and={{ $json.score }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Spreadsheet Row.
- In Insert Airtable Entry, set Operation to
createand map fields using the expressions like={{ $json.jobHistory }}and={{ $json.justification }}. - Credential Required: Connect your airtableTokenApi credentials in Insert Airtable Entry.
Parallel Execution: Combine Results outputs to both Append Spreadsheet Row and Insert Airtable Entry in parallel.
Educational Qualifications and Skill set) to avoid empty writes.Step 6: Test and Activate Your Workflow
Run a full test to confirm CV processing, AI outputs, and data writes.
- Use Incoming Gmail Watcher with a test email containing a PDF attachment or submit a test file via Form Submission Trigger.
- Verify that Store Attachment in Drive creates a file and Fetch Drive File downloads it successfully.
- Confirm Structured Info Parser outputs
candidate_name,email_address, andcontact_number, and that Transform Summary Script outputsscoreandjustification. - Check that Append Spreadsheet Row creates a new row and Insert Airtable Entry creates a new record with the mapped fields.
- When successful, toggle the workflow to Active for production use.
Watch Out For
- Gmail credentials can expire or need specific permissions. If things break, check the n8n Credentials screen and your Google OAuth consent/refresh status 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.
- OpenRouter/OpenAI prompts default to “generic recruiter.” Add your role requirements and scoring rubric early, or you will keep tweaking summaries by hand.
Common Questions
About an hour if your Google and Airtable accounts are ready.
Yes, but you’ll want someone comfortable connecting OAuth accounts in n8n. No coding is required unless you choose to tweak the parsing logic.
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/OpenRouter usage (often a few cents per resume, depending on 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.
Start by editing the Gmail search filter so it only captures applications for the role you care about. Then adjust the AI agent prompt to reflect your rubric (must-have skills, years of experience, location, clearance, whatever matters). If you don’t want Airtable, disable the Airtable “create record” action and keep only the Google Sheets append. You can also change the Drive folder ID so each open role stores resumes in its own folder.
Usually it’s an expired OAuth token or the wrong Google account connected in n8n. Reconnect Gmail credentials, confirm the mailbox has access to the target label/search results, and check that attachments are actually included in the emails you’re testing. If it works sometimes and fails in bursts, you may be hitting API limits during high-volume periods.
On n8n Cloud, capacity depends on your plan’s monthly executions, while self-hosting is mainly limited by your server. Practically, most teams run this continuously and screen dozens (or a few hundred) resumes per week without issues, as long as the AI step isn’t overloaded.
Often, yes. This workflow has parallel branches (contact extraction plus AI evaluation), a cleanup/merge phase, and two destinations (Google Sheets and Airtable), which is the kind of logic that gets awkward and expensive in simpler tools. n8n also gives you a self-hosted path when volume increases, so you don’t have to count every run like it’s precious. Zapier or Make can still be fine if you only want “Gmail attachment → save file” with no scoring. If you’re unsure, Talk to an automation expert and you’ll get a straight answer.
Once this is running, screening stops being a dreaded “catch-up task” and turns into a quick review of the best candidates. Set it up once, then spend your time interviewing instead of sorting PDFs.
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.