🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Sheets to Gmail, polished candidate emails

Lisa Granqvist Partner Workflow Automation Expert

Your candidate spreadsheet is “organized”… until you have to actually reply to people. Then it’s a blur of copy-paste, half-finished drafts, and that nagging worry you’ll send the wrong message to the wrong person.

Recruiters feel this when pipelines get busy. Hiring managers feel it when they’re asked to “just send the shortlist emails today.” And small teams trying to look professional? They get hit hardest. This Sheets Gmail emails automation turns rows in Google Sheets into consistent, polished Gmail emails that still read like a human wrote them.

You’ll learn what the workflow does, what you need to run it, and how the pieces fit together so you can confidently adapt it to your hiring process.

How This Automation Works

Here’s the complete workflow you’ll be setting up:

n8n Workflow Template: Google Sheets to Gmail, polished candidate emails

Why This Matters: Candidate Emails Get Messy Fast

Candidate communication is one of those tasks that looks simple on paper. “Just send a shortlist note. Send a rejection.” But once you’re doing it at volume, it turns into context switching, tone matching, and last-minute scrambling for details. You’re opening resumes, re-reading notes, trying to remember what role they applied for, and rewriting the same email five different ways because you want it to feel personal. Meanwhile, the inbox keeps moving and your hiring timeline doesn’t wait.

It adds up fast. And the damage isn’t only time.

  • Copying details from Google Sheets into Gmail drafts invites errors, especially when candidates have similar names.
  • Manual rejections often get delayed, which leaves applicants ghosted and quietly hurts your employer brand.
  • Shortlist emails become inconsistent because each sender writes them differently, so “next steps” change from candidate to candidate.
  • Resumes live in Google Drive links, so you waste time hunting for context every time you write an email.

What You’ll Build: Resume-Aware Shortlist and Rejection Emails

This workflow starts with a structured candidate tracker in Google Sheets and ends with professional emails sent from Gmail. You trigger it, it pulls candidate rows (name, email, role, status, resume link), downloads each resume from Google Drive, and checks that the file is actually valid before going further. If the resume is missing or broken, it logs the issue back into a separate Google Sheet so you have an audit trail instead of silent failures.

When a resume is available, the workflow extracts text from the PDF and combines it with the candidate’s sheet data into one clean “candidate payload.” Then it branches: shortlisted candidates get a congratulatory HTML email plus onboarding steps and learning recommendations, while rejected candidates get a polite, empathetic rejection with constructive skill-gap guidance and resources. Gmail sends the final email automatically, ready to go with consistent formatting and tone.

What You’re Building

Expected Results

Say you process 20 candidates after a phone screen. Manually, you might spend about 6 minutes per person opening the resume, checking notes, and rewriting an email, which is roughly 2 hours. With this workflow, you trigger the run, let it pull resumes and draft the HTML emails, then skim and spot-check before sending; that’s often about 15 minutes total plus waiting for processing. You get back around 90 minutes for work that actually moves the hire forward.

Before You Start

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for candidate rows and error log.
  • Google Drive to store resumes linked from Sheets.
  • Gmail to send the candidate emails.
  • Azure OpenAI API access (get it from your Azure OpenAI resource in the Azure portal)

Skill level: Intermediate. You’ll be connecting accounts, testing with sample candidates, and adjusting prompts to match your hiring tone.

Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).

Step by Step

You start the run from n8n. This workflow uses a manual trigger, which is perfect for batch processing: you decide when a set of candidates is ready to contact.

Candidate details are pulled from Google Sheets. The workflow retrieves key fields like name, email, role, status, and the resume link, so everything stays driven by your tracker instead of scattered notes.

Resumes are downloaded and turned into usable context. It grabs the file from Google Drive, verifies it isn’t missing, extracts text from the PDF, and merges that with the sheet data into a single candidate payload that the AI can actually use.

Email content is generated and sent from Gmail. An “If” branch routes candidates into shortlist or rejection messaging, GPT-4o produces HTML-ready emails, and Gmail sends them without you building individual drafts.

You can easily modify the email tone and the learning resources to match your role level and employer brand. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

This workflow starts manually so you can test candidate processing on demand.

  1. Add a Manual Start Trigger node as the workflow entry point.
  2. Leave all fields in Manual Start Trigger as default (no parameters required).
Use the manual trigger while validating your Google Sheets and email outputs before activating the workflow.

Step 2: Connect Google Sheets for Candidate Data

Load candidate rows from your sheet and prepare logging for download failures.

  1. Add Retrieve Candidate Records and set Document to your sheet ID (replace [YOUR_ID]), and Sheet to Sheet1.
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Retrieve Candidate Records.
  3. Add Log Download Errors with Operation set to append, and select the error log sheet (value 1338537721).
  4. Credential Required: Connect your googleSheetsOAuth2Api credentials in Log Download Errors.
⚠️ Common Pitfall: If your sheet columns don’t match the exact names in Assemble Candidate Payload (e.g., Candidate Name, Status), the workflow will return empty fields.

Step 3: Download and Validate Resume Files

Download each resume and route bad downloads to the error log.

  1. Add Download Resume File with Operation set to download and File ID set to ={{ $json["Resume Link"] }}.
  2. Credential Required: Connect your googleDriveOAuth2Api credentials in Download Resume File.
  3. Add Validate Resume File with a condition that checks leftValue {{ $json.data }} is notEmpty.
  4. Connect the false output of Validate Resume File to Log Download Errors for logging failures.
Ensure your “Resume Link” values in Google Sheets are valid Google Drive file URLs; otherwise Download Resume File will return empty data.

Step 4: Extract Text and Build the Candidate Payload

Convert PDF content into structured JSON for downstream AI processing.

  1. Add Extract PDF Text with Operation set to pdf.
  2. Add Assemble Candidate Payload and paste the provided JavaScript to map sheet values and resume text into a single JSON object.
  3. Confirm the code references $item(0).$node["Retrieve Candidate Records"].json and sets resumeText to pdfData.text.

Step 5: Configure Status Branching and AI Generation

Route candidates by status and generate tailored learning plan emails via Azure OpenAI.

  1. Add Branch by Status with condition leftValue ={{$json.status}} equals Shortlisted.
  2. Connect the true path to Generate Onboarding Email and the false path to Craft Rejection Plan.
  3. In Generate Onboarding Email, set Text to the provided prompt block (keep the inline expressions like {{ $json.candidateName }}).
  4. In Craft Rejection Plan, set Text to the provided prompt block and keep the HTML-only output requirement.
  5. Credential Required: Connect your azureOpenAiApi credentials in Azure LLM Gateway and Azure LLM Gateway 2 (these are the language models for the chain nodes).
  6. Set both Azure LLM Gateway and Azure LLM Gateway 2 Model to gpt-4o-mini.
⚠️ Common Pitfall: Do not add credentials directly to Generate Onboarding Email or Craft Rejection Plan. Credentials must be set on Azure LLM Gateway and Azure LLM Gateway 2.

Step 6: Configure Email Delivery

Send the generated HTML learning plans to candidates based on their status.

  1. Add Send Shortlist Email and set Send To to ={{ $('Retrieve Candidate Records').item.json.Email }}, Subject to Your Personalized Learning Plan, and Message to ={{ $json.text }}.
  2. Credential Required: Connect your gmailOAuth2 credentials in Send Shortlist Email.
  3. Add Send Rejection Email with the same Send To expression ={{ $('Retrieve Candidate Records').item.json.Email }}, Subject Your Personalized Learning Plan, and Message ={{ $json.text }}.
  4. Credential Required: Connect your gmailOAuth2 credentials in Send Rejection Email.

Step 7: Add Error Handling for Resume Downloads

Ensure the workflow captures failures when a resume download is missing or invalid.

  1. Confirm Validate Resume File routes invalid downloads to Log Download Errors.
  2. In Log Download Errors, map columns as needed to record candidate identifiers and error context.

Step 8: Test and Activate Your Workflow

Run a full test to confirm data flow, AI output quality, and email delivery.

  1. Click Execute Workflow on Manual Start Trigger and watch each node for successful execution.
  2. Verify Extract PDF Text outputs a text field and Assemble Candidate Payload contains candidateName, status, and resumeText.
  3. Confirm Generate Onboarding Email or Craft Rejection Plan returns HTML in text, and that Send Shortlist Email / Send Rejection Email sends successfully.
  4. When satisfied, toggle the workflow Active to enable production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Troubleshooting Tips

  • Google Drive credentials can expire or need specific permissions. If things break, check the file’s sharing settings and the Google Drive node’s connected account 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.

Quick Answers

What’s the setup time for this Sheets Gmail emails automation?

About 30–60 minutes if your Google and Azure accounts are ready.

Is coding required for this candidate email automation?

No. You’ll connect your accounts and tweak a few fields and prompts in n8n.

Is n8n free to use for this Sheets Gmail emails workflow?

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 Azure OpenAI usage, which is usually pennies per email unless you’re processing huge PDFs.

Where can I host n8n to run this automation?

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.

Can I modify this Sheets Gmail emails workflow for different use cases?

Yes, and you probably should. Most teams start by editing the shortlist and rejection prompts inside the LLM chain nodes (the “Generate Onboarding Email” and “Craft Rejection Plan” steps) so the tone matches their brand. You can also change the branching condition in “Branch by Status” to support additional statuses like “Needs Review” or “Hold.” If your resumes aren’t in Google Drive, swap the “Download Resume File” step for another file source, then keep the same PDF text extraction and email generation flow.

Why is my Google Sheets connection failing in this workflow?

Usually it’s the connected Google account lacking access to the sheet, or the sheet ID/range changed after someone reorganized tabs. Reconnect the Google Sheets credential in n8n, then re-select the document and worksheet so the node refreshes its references. Also check that the workflow is reading the same status values your sheet actually uses (for example “Shortlisted” vs “shortlist”), because that can look like a connection problem when it’s really a filter mismatch.

What volume can this Sheets Gmail emails workflow process?

For most teams, dozens of candidates per run is realistic, and the main limiter is how long resume extraction and AI generation take. On n8n Cloud, your monthly execution limit depends on plan; self-hosting has no execution cap, so it mainly depends on your server and how large the PDFs are. If you’re processing hundreds at a time, consider running in smaller batches and keeping the error log sheet enabled so you can re-run only failed rows.

Is this Sheets Gmail emails automation better than using Zapier or Make?

Often, yes. This workflow has branching (shortlist vs rejection), file handling (Drive download + PDF text extraction), and richer prompt logic, and those pieces get clunky or expensive in simpler automation tools. n8n also lets you self-host, which matters when you’re sending lots of emails and don’t want every step metered. Zapier or Make can still be fine if you only need a basic “row added → send templated email” flow with no resume context. If you’re unsure, Talk to an automation expert and we’ll help you pick the simplest option that won’t break later.

You get consistent, thoughtful candidate emails without living in your inbox. Set it up once, then let the workflow handle the repetitive parts while you focus on making the right hires.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal