Intermediate~20 min setupEmail & ProductivityVerified April 2026
Gmail logo
Google Sheets logo

How to Track Job Applications from Gmail to Google Sheets with N8n

Auto-log emails from job applicants into a Google Sheets tracker with name, email, date, and resume link extraction.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

HR teams that receive varied application email formats and need custom data extraction beyond basic field mapping.

Not ideal for

Teams wanting simple email forwarding without custom parsing or those processing under 5 applications per week.

Sync type

polling

Use case type

import

Real-World Example

πŸ’‘

A 25-person marketing agency receives 40-60 job applications weekly through their careers email. Before automation, their HR coordinator manually copied applicant details from emails into a Google Sheet tracker, spending 15 minutes per application and missing weekend submissions. With N8n parsing email content automatically, applications get logged within 5 minutes of arrival with extracted names, emails, and resume links ready for review.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently β€” Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured β€” you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Gmail account that receives job applications
Google Sheets file set up with column headers: Name, Email, Date Received, Resume Link
N8n instance running (self-hosted or N8n Cloud account)
Google account with access to both Gmail and Sheets

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Applicant Nameapplicant_name
Email Addressapplicant_email
Date Receivedreceived_date
3 optional fieldsβ–Έ show
Resume Linkresume_link
Subject Lineemail_subject
Position Appliedposition_name

Step-by-Step Setup

1

Workflows > New Workflow

Create New Workflow

Start a fresh N8n workflow for your application tracker. This workflow will monitor Gmail and extract applicant data.

  1. 1Click 'New Workflow' in the top right corner
  2. 2Name it 'Job Application Tracker' in the workflow title field
  3. 3Click the gray '+' node to add your first step
βœ“ What you should see: You should see a blank workflow canvas with one gray '+' node ready for configuration.
2

Node Library > Triggers > Gmail

Add Gmail Trigger

Set up the Gmail trigger to monitor for new emails. This will fire every time an email hits your inbox matching specific criteria.

  1. 1Click the '+' node and search for 'Gmail'
  2. 2Select 'Gmail Trigger' from the results
  3. 3Choose 'Message Received' as the trigger event
  4. 4Click 'Create New Credential' to connect your Gmail account
βœ“ What you should see: The Gmail trigger node appears with a red 'Missing Credential' indicator.
⚠
Common mistake β€” Select 'Gmail Trigger' not 'Gmail' β€” the regular Gmail node won't listen for new emails
n8n
+
click +
search apps
Gmail
GM
Gmail
Add Gmail Trigger
Gmail
GM
module added
3

Gmail Node > Parameters > Credential

Connect Gmail Account

Authenticate with your Gmail account to allow N8n to read incoming emails. You'll need to authorize N8n through Google's OAuth flow.

  1. 1Click 'OAuth2 API' in the credential dropdown
  2. 2Click 'Connect my account' and complete Google OAuth
  3. 3Return to N8n and click 'Test' to verify connection
  4. 4Save the credential with name 'HR Gmail Account'
βœ“ What you should see: Green 'Connection Successful' message appears and credential saves automatically.
⚠
Common mistake β€” Use the Gmail account that actually receives applications β€” switching accounts later breaks the trigger
n8n settings
Connection
Choose a connection…Add
click Add
Gmail
Log in to authorize
Authorize n8n
popup window
βœ“
Connected
green checkmark
4

Gmail Trigger > Parameters > Additional Fields

Configure Email Filters

Set up subject line filters to catch only job application emails. This prevents the workflow from processing every email in your inbox.

  1. 1In the Gmail trigger, scroll to 'Additional Fields'
  2. 2Click 'Add Field' and select 'Query'
  3. 3Enter: subject:(application OR apply OR resume OR "job interest")
  4. 4Toggle 'Include Attachments' to true for resume links
βœ“ What you should see: The Query field shows your filter string and Include Attachments shows as enabled.
⚠
Common mistake β€” Don't use quotes around the entire query β€” Gmail search syntax breaks with extra quotes
Gmail
GM
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Google Sheets
GO
notified
5

Node Library > Data Transformation > Code

Add Data Extraction Node

Insert a Code node to parse email content and extract applicant details. This processes the raw email data into structured fields.

  1. 1Click the '+' after Gmail trigger and search 'Code'
  2. 2Select 'Code' node from the results
  3. 3Set Language to 'JavaScript'
  4. 4Paste the extraction code in the code editor
βœ“ What you should see: Code node appears connected to Gmail trigger with JavaScript selected as language.
6

Code Node > JavaScript Code Editor

Configure Data Extraction Code

Add JavaScript code to pull name, email, and other details from email content. This handles parsing both plain text and HTML emails.

  1. 1Clear the default code in the editor
  2. 2Copy the extraction script from the pro tip section
  3. 3Click 'Execute Node' to test the parsing logic
  4. 4Verify extracted fields appear in the output panel
βœ“ What you should see: Output shows parsed fields: applicant_name, applicant_email, received_date, and resume_link.
⚠
Common mistake β€” Test with a real application email β€” sample data doesn't show parsing edge cases

Drop this into an n8n Code node.

JavaScript β€” Code Node// Email parsing code for applicant data extraction
β–Έ Show code
// Email parsing code for applicant data extraction
const emailData = $input.first().json;
const subject = emailData.subject || '';

... expand to see full code

// Email parsing code for applicant data extraction
const emailData = $input.first().json;
const subject = emailData.subject || '';
const body = emailData.textPlain || emailData.textHtml || '';
const senderName = emailData.from?.name || emailData.from?.email?.split('@')[0] || 'Unknown';

// Extract resume links from body
const resumeMatch = body.match(/(https?:\/\/(?:drive\.google\.com|dropbox\.com|\.+\.(pdf|doc|docx)))/i);
const resumeLink = resumeMatch ? resumeMatch[0] : '';

// Extract position from subject or body
const positionMatch = subject.match(/(?:for|position|role)\s+(.+?)(?:\s|$)/i) || body.match(/applying for\s+(.+?)(?:\s|\.)/i);
const position = positionMatch ? positionMatch[1].trim() : '';

return [{
  json: {
    applicant_name: senderName,
    applicant_email: emailData.from?.email || '',
    received_date: new Date(emailData.date).toLocaleDateString('en-US'),
    resume_link: resumeLink,
    email_subject: subject,
    position_name: position
  }
}];
7

Node Library > Productivity > Google Sheets

Connect Google Sheets

Add Google Sheets node to write application data to your tracking spreadsheet. This creates a new row for each applicant.

  1. 1Click '+' after the Code node and search 'Google Sheets'
  2. 2Select 'Google Sheets' from the app list
  3. 3Choose 'Append' as the operation
  4. 4Click 'Create New Credential' for Google Sheets access
βœ“ What you should see: Google Sheets node appears with 'Append' operation selected and credential prompt showing.
8

Google Sheets Node > Credential Configuration

Authenticate Google Sheets

Connect your Google account to enable spreadsheet writing. This uses the same OAuth process but with Sheets permissions.

  1. 1Select 'Google Sheets OAuth2 API' credential type
  2. 2Click 'Connect my account' and authorize Sheets access
  3. 3Test the connection and save as 'HR Sheets Access'
  4. 4Return to the node configuration
βœ“ What you should see: Credential saves successfully and Google Sheets node shows green connection status.
⚠
Common mistake β€” Grant both 'Read' and 'Write' permissions β€” append operations need both access levels
9

Google Sheets Node > Parameters > Document Selection

Select Target Spreadsheet

Choose which Google Sheets file and worksheet to update. The spreadsheet should already exist with proper column headers.

  1. 1In Document ID field, click the dropdown to browse spreadsheets
  2. 2Select 'Job Applications Tracker' (or your spreadsheet name)
  3. 3Set Sheet Name to 'Applications' or your worksheet name
  4. 4Choose 'A1' as the Data Start Row
βœ“ What you should see: Spreadsheet and sheet names populate in the fields, showing connection to your file.
⚠
Common mistake β€” Create the spreadsheet first with headers: Name, Email, Date Received, Resume Link β€” N8n won't create it automatically
10

Google Sheets Node > Parameters > Values to Send

Map Data Fields

Connect the extracted email data to your spreadsheet columns. This tells N8n which parsed values go in which columns.

  1. 1Scroll to 'Values to Send' section
  2. 2Click 'Add Value' four times for each column
  3. 3Map Name to {{ $node.Code.json.applicant_name }}
  4. 4Map Email to {{ $node.Code.json.applicant_email }}
  5. 5Map Date to {{ $node.Code.json.received_date }}
  6. 6Map Resume Link to {{ $node.Code.json.resume_link }}
βœ“ What you should see: Four field mappings show with expressions pulling data from the Code node output.
⚠
Common mistake β€” Use exact expression syntax with double curly braces β€” single braces won't parse the data
Gmail fields
from
subject
snippet
body
date
available as variables:
1.props.from
1.props.subject
1.props.snippet
1.props.body
1.props.date
11

Workflow Toolbar > Execute Workflow

Test Complete Workflow

Run the full workflow with a real application email to verify data flows correctly. This catches any mapping or parsing issues.

  1. 1Click 'Execute Workflow' button in the top toolbar
  2. 2Watch each node execute and check for green success indicators
  3. 3Open your Google Sheets to verify new row was added
  4. 4Confirm all fields populated with correct applicant data
βœ“ What you should see: All nodes show green checkmarks and new applicant row appears in your Google Sheets with populated data.
⚠
Common mistake β€” If nodes stay gray, no emails matched your filter β€” send a test email with 'application' in subject
n8n
β–Ά Run once
executed
βœ“
Gmail
βœ“
Google Sheets
Google Sheets
πŸ”” notification
received
12

Workflow Header > Activation Toggle

Activate Workflow

Turn on the workflow to start monitoring for new applications automatically. This switches from manual testing to live automation.

  1. 1Click the toggle switch in top right to 'Active'
  2. 2Confirm activation in the popup dialog
  3. 3Verify 'Active' status appears next to workflow name
  4. 4Save the workflow with Ctrl+S or Cmd+S
βœ“ What you should see: Workflow shows 'Active' status and will now process new application emails automatically.

Scaling Beyond 100+ applications/week+ Records

If your volume exceeds 100+ applications/week records, apply these adjustments.

1

Switch to Webhook Trigger

Replace Gmail polling with Gmail push notifications via webhook. Set up Google Pub/Sub to push new emails to N8n webhook URL. Reduces API calls by 90% and processes applications within 30 seconds.

2

Add Queue Node

Insert Queue node between Gmail and processing to handle bursts of applications. Prevents timeouts when 10+ applications arrive simultaneously during busy periods like job posting announcements.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you need custom parsing logic for different application email formats. The Code node handles complex text extraction that Zapier's built-in formatters can't match. You also get attachment handling and unlimited filtering without hitting webhook limits. Skip N8n if you just want basic email-to-spreadsheet forwarding β€” Zapier's Gmail trigger is simpler for standard use cases.

Cost

This workflow uses 1 execution per application email. At 20 applications/day, that's 600 executions monthly. N8n Cloud Starter at $20/month includes 2,500 executions, so you're covered. Zapier Professional costs $49/month for the same volume with multi-step workflows. Make charges $9/month for 1,000 operations but limits Gmail polling frequency. N8n wins on cost until you hit 50+ applications daily.

Tradeoffs

Zapier's Gmail trigger catches emails faster β€” usually within 1-2 minutes vs N8n's 5-minute polling. Make has better attachment handling with direct file download to Google Drive. But N8n's Code node lets you parse messy application emails that vary in format. You can extract names from signatures, pull phone numbers from bodies, and handle both HTML and plain text without breaking. That flexibility beats faster triggers when application formats are inconsistent.

Gmail's API paginates at 100 emails β€” bulk imports need N8n's batch processing module. The OAuth token expires every 7 days in testing mode, requiring production approval for always-on workflows. Applicant names in email signatures parse differently than names in headers or body text. Your extraction regex will miss edge cases like hyphenated surnames or multiple applicants in one email. Plan for 2-3 iterations of code refinement after going live.

Ideas for what to build next

  • β†’
    Add Slack Notifications β€” Connect a Slack node to notify your hiring team immediately when applications for priority positions are received, including applicant summary and resume link.
  • β†’
    Create Application Status Tracking β€” Add columns for interview status and hiring decisions, then build a separate workflow that sends status update emails to applicants when spreadsheet values change.
  • β†’
    Set Up Resume Screening β€” Integrate with a document parsing API to extract skills and experience from resume files, automatically scoring candidates against job requirements before human review.

Related guides

Was this guide helpful?
← Gmail + Google Sheets overviewn8n profile β†’