

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
pollingUse case type
importReal-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.
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
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Applicant Name | applicant_name | |
| Email Address | applicant_email | |
| Date Received | received_date | |
3 optional fieldsβΈ show
| Resume Link | resume_link |
| Subject Line | email_subject |
| Position Applied | position_name |
Step-by-Step Setup
Workflows > New Workflow
Create New Workflow
Start a fresh N8n workflow for your application tracker. This workflow will monitor Gmail and extract applicant data.
- 1Click 'New Workflow' in the top right corner
- 2Name it 'Job Application Tracker' in the workflow title field
- 3Click the gray '+' node to add your first step
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.
- 1Click the '+' node and search for 'Gmail'
- 2Select 'Gmail Trigger' from the results
- 3Choose 'Message Received' as the trigger event
- 4Click 'Create New Credential' to connect your Gmail account
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.
- 1Click 'OAuth2 API' in the credential dropdown
- 2Click 'Connect my account' and complete Google OAuth
- 3Return to N8n and click 'Test' to verify connection
- 4Save the credential with name 'HR Gmail Account'
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.
- 1In the Gmail trigger, scroll to 'Additional Fields'
- 2Click 'Add Field' and select 'Query'
- 3Enter: subject:(application OR apply OR resume OR "job interest")
- 4Toggle 'Include Attachments' to true for resume links
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.
- 1Click the '+' after Gmail trigger and search 'Code'
- 2Select 'Code' node from the results
- 3Set Language to 'JavaScript'
- 4Paste the extraction code in the code editor
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.
- 1Clear the default code in the editor
- 2Copy the extraction script from the pro tip section
- 3Click 'Execute Node' to test the parsing logic
- 4Verify extracted fields appear in the output panel
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
}
}];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.
- 1Click '+' after the Code node and search 'Google Sheets'
- 2Select 'Google Sheets' from the app list
- 3Choose 'Append' as the operation
- 4Click 'Create New Credential' for Google Sheets access
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.
- 1Select 'Google Sheets OAuth2 API' credential type
- 2Click 'Connect my account' and authorize Sheets access
- 3Test the connection and save as 'HR Sheets Access'
- 4Return to the node configuration
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.
- 1In Document ID field, click the dropdown to browse spreadsheets
- 2Select 'Job Applications Tracker' (or your spreadsheet name)
- 3Set Sheet Name to 'Applications' or your worksheet name
- 4Choose 'A1' as the Data Start Row
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.
- 1Scroll to 'Values to Send' section
- 2Click 'Add Value' four times for each column
- 3Map Name to {{ $node.Code.json.applicant_name }}
- 4Map Email to {{ $node.Code.json.applicant_email }}
- 5Map Date to {{ $node.Code.json.received_date }}
- 6Map Resume Link to {{ $node.Code.json.resume_link }}
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.
- 1Click 'Execute Workflow' button in the top toolbar
- 2Watch each node execute and check for green success indicators
- 3Open your Google Sheets to verify new row was added
- 4Confirm all fields populated with correct applicant data
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.
- 1Click the toggle switch in top right to 'Active'
- 2Confirm activation in the popup dialog
- 3Verify 'Active' status appears next to workflow name
- 4Save the workflow with Ctrl+S or Cmd+S
Scaling Beyond 100+ applications/week+ Records
If your volume exceeds 100+ applications/week records, apply these adjustments.
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.
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
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.
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.
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
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup