🔓 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

Gmail to Google Sheets, resumes logged and confirmed

Lisa Granqvist Partner Workflow Automation Expert

Hiring shouldn’t feel like digging through an inbox landfill. But when resumes arrive as PDFs, you end up opening attachments, copying details into a sheet, and still wondering who you missed.

This is where resume intake automation pays off. Recruiters feel it first, but busy founders and ops leads get dragged into it too, especially when applications spike. The outcome is simple: every application gets captured, structured, and confirmed without you babysitting Gmail.

This workflow turns incoming CVs into clean Google Sheets rows, checks duplicates by email, and sends the right confirmation and notification emails. You’ll see exactly how it works and what you need to run it.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Gmail to Google Sheets, resumes logged and confirmed

The Problem: Resume Intake Turns Into Manual Data Entry

PDF resumes are great for candidates and awful for your process. Someone has to open the attachment, skim for contact info, interpret experience, then paste a “good enough” summary into a spreadsheet or ATS. Now multiply that by 30 applicants in a week. You start rushing, and the mistakes creep in: a misspelled email, a role title dropped, a candidate logged twice, or the “I’ll reply later” confirmation that never gets sent. The real cost is attention. It steals focus from the work that actually improves hiring.

It adds up fast. Here’s where it breaks down most teams.

  • Copying candidate details into Google Sheets takes about 10 minutes per resume if you want it done neatly.
  • PDFs vary wildly, so your “summary” changes depending on who reviewed it that day.
  • Duplicate applications slip through when people apply twice or forward the same candidate, which creates messy reporting later.
  • Candidates don’t get a fast confirmation, so they follow up, and your inbox gets even worse.

The Solution: AI-Parsed CVs Logged to Sheets (With Confirmations)

This workflow acts like an intake desk that never gets tired. A candidate submits a public application form and uploads a PDF CV. n8n pulls the file from the submission, extracts the raw text, and sends it to an OpenAI-powered AI Agent that reads it like a human would. Instead of dumping messy text into a cell, it returns structured fields (name, email, experience, education, skills) and a concise screening summary you can scan quickly. Before anything is saved, the workflow checks your Google Sheet for an existing row with the same email. If it’s a repeat, it stops. If it’s new, it writes a clean row to Google Sheets and sends two Gmail messages: a confirmation to the applicant and a notification to you with the summary.

The flow starts with the form submission, then moves into PDF text extraction and AI structuring. After that, it runs a duplicate check in Google Sheets and either stops or saves the applicant. Finally, Gmail sends the confirmation and the recruiter alert automatically.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you get 25 resumes in a week. Manually, if you spend about 10 minutes opening the PDF, extracting key details, writing a quick summary, and pasting it into Google Sheets, that’s roughly 4 hours weekly. With this workflow, your “time” is basically reviewing the sheet and the recruiter email. Submitting is instant for candidates, the AI processing runs in the background, and you typically only spend a minute per applicant scanning the summary. That’s closer to 30 minutes of review time instead of half a workday.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store structured applicant rows
  • Gmail to send applicant and recruiter emails
  • OpenAI API key (get it from your OpenAI dashboard)

Skill level: Intermediate. You’ll connect accounts (OAuth) and map fields into your sheet columns.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

Application arrives through a public form. The workflow starts when a candidate submits their name, email, experience, and a PDF resume through the n8n form trigger.

The PDF is read and converted into text. n8n inspects the uploaded file, then extracts the raw text so the automation can work with it reliably.

AI turns messy resume text into structured data. The OpenAI-powered AI Agent parses the resume, then the workflow normalizes the JSON so it fits your Google Sheets columns cleanly (and doesn’t break when formats vary).

Duplicates are filtered, then emails go out. Google Sheets is checked for an existing email address; new candidates get upserted to the sheet, then Gmail sends a confirmation to the applicant and an alert to the recruiter with the summary.

You can easily modify the form fields to match your role requirements, then map those fields into different Google Sheets columns based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Form Trigger

Set up the form that applicants will submit, including the required PDF CV upload and experience field.

  1. Add and open Applicant Form Intake.
  2. Set Form Title to test.
  3. Confirm the form fields include Name surname, email, a file field labeled CV that accepts .pdf, and Experience Years as a number.
  4. Keep Required enabled for all fields to ensure complete applicant data.
Use the same field labels shown above so downstream expressions like {{$node["Applicant Form Intake"].json["Name surname"]}} resolve correctly.

Step 2: Connect Google Sheets

Wire the workflow to your applicant database for lookups and upserts.

  1. Open Lookup Existing Applicant and select your Google Sheet.
  2. Set Document to https://docs.google.com/spreadsheets/d/[YOUR_ID]/edit?gid=0#gid=0 and Sheet to gid=0.
  3. Configure the filter to use Lookup Column email and Lookup Value {{$node["Normalize AI JSON"].json.email}}.
  4. Open Upsert Applicant Sheet and set Operation to appendOrUpdate with Matching Columns set to email.
  5. Map columns to values such as email{{$node["Normalize AI JSON"].json.email}} and cv_summary{{$node["Normalize AI JSON"].json.cv_summary}}.

Credential Required: Connect your googleSheetsOAuth2Api credentials in Lookup Existing Applicant and Upsert Applicant Sheet.

Step 3: Set Up Processing and AI Extraction

Extract the PDF text, structure it with AI, and normalize the JSON for downstream use.

  1. Open Inspect Binary Payload to review the default JavaScript used for logging input payloads and keep it as-is for debugging.
  2. Configure Read PDF Text Content with Operation set to pdf and Binary Property Name set to CV.
  3. Open AI CV Structuring and confirm Model is gpt-4.1-mini with JSON Output enabled.
  4. Verify the prompt includes expressions such as {{$node["Applicant Form Intake"].json["Name surname"]}}, {{$node["Applicant Form Intake"].json["email"]}}, and {{$json.text}}.
  5. Keep Normalize AI JSON as-is to return the structured JSON object.

Credential Required: Connect your openAiApi credentials in AI CV Structuring.

Step 4: Configure Routing and Branch Logic

Decide whether to stop or continue based on applicant existence.

  1. Open Branch New Applicant and verify the condition checks email with notEmpty using {{$json.email}}.
  2. Confirm the true path goes to Do Nothing Step (existing applicant) and the false path goes to Upsert Applicant Sheet.
If you want to insert additional filters (e.g., block duplicates), place them between Lookup Existing Applicant and Branch New Applicant.

Step 5: Configure Output Email Notifications

Send confirmation to the applicant and alert the recruiter after data is saved.

  1. Open Send Applicant Confirmation and set Send To to {{$node["Normalize AI JSON"].json.email}}.
  2. Set Subject to Your Application Has Been Received and ensure the Message includes fields like {{$node["Normalize AI JSON"].json.experience_years}} and {{$node["Normalize AI JSON"].json.application_date}}.
  3. Open Notify Recruiter Email and replace Send To with your address (current value [YOUR_EMAIL]).
  4. Set Subject to New Application - {{$node["Normalize AI JSON"].json.name}} and verify the message includes {{$node["Normalize AI JSON"].json.cv_summary}}.
  5. Confirm execution order: Upsert Applicant Sheet outputs to both Send Applicant Confirmation and Notify Recruiter Email in parallel.
Credential Required: The Gmail nodes do not have credentials configured. Connect your Gmail credentials in Send Applicant Confirmation and Notify Recruiter Email before testing.

Step 6: Test and Activate Your Workflow

Validate the full flow from form submission to sheet updates and emails.

  1. Click Execute Workflow and submit a sample form through Applicant Form Intake with a PDF CV.
  2. Verify Read PDF Text Content produces extracted text and AI CV Structuring returns valid JSON.
  3. Check Upsert Applicant Sheet to confirm the applicant record is appended or updated by email.
  4. Confirm both emails are sent: Send Applicant Confirmation to the applicant and Notify Recruiter Email to your inbox.
  5. When successful, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check your n8n credential status and the sheet’s sharing/access settings 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

How long does it take to set up this resume intake automation automation?

About 30 minutes if your Google and OpenAI accounts are ready.

Do I need coding skills to automate resume intake automation?

No. You will mostly connect credentials and map fields into your Google Sheet. A tiny bit of comfort with testing runs helps, but you’re not “building an app.”

Is n8n free to use for this resume intake automation 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 OpenAI API costs, which are usually a few cents per resume depending on resume length and your model settings.

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 customize this resume intake automation workflow for multi-role hiring?

Yes, but you’ll want to do it intentionally. You can add role selection to the “Applicant Form Intake” form, then adjust the AI CV Structuring prompt so it summarizes experience against that chosen role. Many teams also add extra columns in Google Sheets (role_applied, seniority_guess, location, salary_range) and map them in the Normalize AI JSON step. If you later decide to score candidates, you can extend the same AI node to output a numeric score plus short reasoning.

Why is my Google Sheets connection failing in this workflow?

Usually it’s expired OAuth credentials or the connected Google account no longer has access to the target spreadsheet. Reconnect Google Sheets in n8n, then re-select the spreadsheet and sheet inside the lookup and upsert nodes so the IDs refresh. Also check that the sheet headers match what the workflow expects; mismatched column names can look like a permissions problem when it’s really a mapping issue.

How many resumes can this resume intake automation automation handle?

A lot.

Is this resume intake automation automation better than using Zapier or Make?

Often, yes. This workflow benefits from n8n’s flexibility because parsing PDFs, normalizing JSON, and branching on duplicates is where simpler “two-step” tools start to feel cramped. n8n also gives you the option to self-host for high volume without paying per task in the same way. Zapier or Make can still work if your version is simpler, like “email arrives → create a row,” but you’ll likely end up bolting on extra steps for AI parsing and dedupe. If you’re unsure, Talk to an automation expert and describe your weekly applicant volume and how you shortlist.

Once this is live, resumes stop being “inbox work” and become a clean list you can act on. Set it up, test it with a few submissions, and then get back to actually choosing candidates.

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