Skip to main content

Track daily job applications from Gmail to Google Sheets via GPT-4o-mini with approval

Workflow preview

Workflow preview
100%
Track daily job applications from Gmail to Google Sheets via GPT-4o-mini with approval preview
Open on n8n.io

1. Workflow Overview

Who's it for Active job seekers who apply to 10–30 roles a week and lose track of which application is at what stage. Built for anyone tired of manually updating a spreadsheet every time a recruite...

Best for

  • Personal Productivity automation workflows
  • AI Summarization automation workflows
  • advanced n8n builders looking for reusable templates

Tools used

n8n-nodes-base.stickynote, n8n-nodes-base.set, @n8n/n8n-nodes-langchain.lmchatopenai, n8n-nodes-base.merge, n8n-nodes-base.if, n8n-nodes-base.scheduletrigger, @n8n/n8n-nodes-langchain.chainllm, n8n-nodes-base.googlesheets

Source and attribution

This workflow is cataloged by N8N Workflows and links back to its original n8n.io source page by Pratistha Thapa.

Original n8n.io source

1.1 Workflow description

Title
Track daily job applications from Gmail to Google Sheets via GPT-4o-mini with approval
Workflow name
Track daily job applications from Gmail to Google Sheets via GPT-4o-mini with approval

Who's it for

Active job-seekers who apply to 10–30 roles a week and lose track of which application is at what stage. Built for anyone tired of manually updating a spreadsheet every time a recruiter replies — or worse, realizing their tracker has been lying to them for two weeks.

What it does

This workflow runs every morning at 9 AM, scans your Gmail for job-application emails, and uses GPT-4o-mini to extract three things from each one:

  • Company (the actual hiring company, not the ATS platform)
  • Position (cleaned of boilerplate like "the role of")
  • Status (Applied, Interview, Offer, Rejected, or Other)

It then writes structured rows into a Google Sheet — one row per application, identified by a Match Key of Company | Position. New applications get appended automatically. Status changes for existing rows (Applied → Interview, Interview → Offer / Rejected) are gated behind a one-tap email approval, so an LLM misclassification can never silently demote a row.

How it works

Daily 9 AM Trigger ↓ Fetch Gmail (filtered by ATS senders & job-keyword subjects, last 2 days) ↓ Process Email Data (clean & truncate body to 4000 chars) ↓ Extract Key Information (GPT-4o-mini, structured JSON output) ↓ Format Data (build Match Key) ↓ Filter Valid Job Updates ──→ Other ──→ "Other app" sheet tab ↓ Branch by Status ├─ Applied ──→ Track New Application (append row) └─ Interview / Offer / Rejected ↓ Aggregate into single digest ↓ Email & Wait for Approval (sendAndWait) ↓ Merge → Split → Update Application (match by Match Key)

Key design choices:

  • Match Key, not Thread ID, drives deduplication. Recruiters often start new threads for interview scheduling, but the same Company | Position should stay one row.
  • Approval gate only on updates, not appends. New applications go in directly to keep your inbox quiet. Only status changes — where misclassification matters — require your tap.
  • Aggregation before approval. You get one digest email per morning, not one per status change. Skim, approve, done.

Setup

Prerequisites:

  • n8n 1.x (cloud or self-hosted)
  • Gmail account connected via OAuth2
  • Google Sheets account (same OAuth2 credential works)
  • OpenAI API key with gpt-4o-mini access

Steps:

  1. Create your tracker sheet. Make a Google Sheet with two tabs:
  • Sheet1 — columns: Thread ID | Match Key | Date | Company | Position | Status | Modified Date
  • Other app — same columns (used for unclassifiable emails)
  1. Import this template. Open n8n → Workflows → Import from File. n8n will flag missing credentials.

  2. Configure three credentials:

  • OpenAI → used by the Open AI node
  • Gmail OAuth2 → used by Fetch Job Application Emails and Email Updates & Wait for Approval
  • Google Sheets OAuth2 → used by all three Sheets nodes
  1. Replace placeholders (search the workflow for these strings):
  • YOUR_GOOGLE_SHEET_ID → your real sheet ID (from the sheet's URL)
  • [email protected] → the address that should receive approval digests
  1. Test it manually. Click "Execute workflow" and verify the Gmail node returns recent emails, the LLM extracts clean JSON, and a sample appears in your sheet.

  2. Activate. Toggle the workflow to active and it will run daily at 9 AM.

Customization

  • Schedule. Change Daily 9 AM Trigger to any cron expression.
  • Lookback window. The Gmail filter ends with newer_than:2d. Bump to 7d if your daily run sometimes fails — the workflow handles re-processed emails idempotently because Match Key updates are no-ops on identical data.
  • Languages. The prompt in Extract Key Information includes English and French status phrases. Add your language's equivalents to each section (Rejected, Applied, etc.).
  • ATS coverage. The Gmail query covers ~25 ATS providers (Lever, Greenhouse, Ashby, Workday, SmartRecruiters, Welcome to the Jungle, etc.). Add or remove domains to match your job market.
  • Approval timeout. Add options.limitWaitTime.values.resumeAmount (in hours) to the approval node if you want stale digests to auto-cancel.

Honest caveats

  • It's only as accurate as the emails it reads. Recruiters don't follow a standard format. Misclassifications happen — the human-in-the-loop approval step is your safety net. Read the digest before tapping approve.
  • Status downgrades are possible. A delayed "thank you for applying" email arriving after an interview invite will offer to demote the row. The approval gate exists for exactly this case.
  • Privacy. Email subjects and bodies are sent to OpenAI for processing. Don't use this if your job-search emails contain NDAs or confidential info — swap in a local LLM instead.
  • Cost. Roughly $0.01–0.05 per day at typical job-search volume. Gmail and Google Sheets API calls stay within free quotas.

Why I built this

Manual spreadsheet tracking lasted me two weeks before it became the chore I'd skip on busy days. By week three the sheet was lying to me — half the "Applied" rows were rejections I hadn't logged yet. So I built this. It's not a system of record; it's a guided draft I skim once a week. The bones might be useful to someone else.

1.2 Logical Blocks

This catalog entry is organized from the workflow JSON. The node-level section below shows the executable blocks available for review before importing the template.

2. Block-by-Block Analysis

Block 1 - Sticky Note

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 2 - Process Email Data

Type / Role
n8n-nodes-base.set - set
Config choices
Version 3.4

Block 3 - Format Data

Type / Role
n8n-nodes-base.set - set
Config choices
Version 3.4

Block 4 - Open AI

Type / Role
@n8n/n8n-nodes-langchain.lmChatOpenAi - lmChatOpenAi
Config choices
Version 1.3

Block 5 - Merge

Type / Role
n8n-nodes-base.merge - merge
Config choices
Version 3.2

Block 6 - Filter Valid Job Updates

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2.3

Block 7 - Daily 9 AM Trigger

Type / Role
n8n-nodes-base.scheduleTrigger - scheduleTrigger
Config choices
Version 1.3

Block 8 - Extract Key Information

Type / Role
@n8n/n8n-nodes-langchain.chainLlm - chainLlm
Config choices
Version 1.9

Block 9 - Track New Application

Type / Role
n8n-nodes-base.googleSheets - googleSheets
Config choices
Version 4.7

Block 10 - Aggregate Data

Type / Role
n8n-nodes-base.aggregate - aggregate
Config choices
Version 1

Block 11 - Email Updates & Wait for Approval

Type / Role
n8n-nodes-base.gmail - gmail
Config choices
Version 2.2

Block 12 - Split Data

Type / Role
n8n-nodes-base.splitOut - splitOut
Config choices
Version 1

Block 13 - Update Application

Type / Role
n8n-nodes-base.googleSheets - googleSheets
Config choices
Version 4.7

Block 14 - Fetch Job Application Emails

Type / Role
n8n-nodes-base.gmail - gmail
Config choices
Version 2.2

Block 15 - Sticky Note1

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 16 - Sticky Note2

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 17 - Sticky Note3

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 18 - Sticky Note4

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 19 - Sticky Note5

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 20 - Sticky Note6

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 21 - Track Invalid Application Status

Type / Role
n8n-nodes-base.googleSheets - googleSheets
Config choices
Version 4.7

Block 22 - Branch Valid Application Status

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2.3

Block 23 - Sticky Note7

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 24 - Sticky Note8

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Showing the first 24 of 31 workflow blocks. Download the JSON for the full node graph.

3. Summary Table

Workflow Track daily job applications from Gmail to Google Sheets via GPT-4o-mini with approval
Complexity advanced
Nodes 31
Categories Personal Productivity, AI Summarization
Author Pratistha Thapa
Published 04 May 2026

4. Reproducing the Workflow from Scratch

  1. 1. Download the workflow JSON

    Use the JSON export at /data/workflows/15463/15463.json as the source template for this automation.

  2. 2. Import the template into n8n

    Open n8n, import the downloaded JSON, and review each node before activating the workflow.

  3. 3. Configure credentials and variables

    Replace placeholder credentials, API keys, webhook URLs, account IDs, and environment-specific values with your own settings.

  4. 4. Test with sample data

    Run the workflow manually or in a staging workspace, inspect node output, and confirm downstream systems receive the expected data.

  5. 5. Activate and monitor

    Enable the workflow only after testing, then monitor executions, errors, and rate limits during the first production runs.

5. General Notes & Resources

Review imported nodes carefully before activation. This catalog entry is intended to help you inspect the workflow structure, understand required services, and find related templates faster.

Node names, credentials, schedules, webhook paths, and external service limits may need adjustment for your workspace.

Frequently asked questions

What does Track daily job applications from Gmail to Google Sheets via GPT-4o-mini with approval do?

Who's it for Active job seekers who apply to 10–30 roles a week and lose track of which application is at what stage. Built for anyone tired of manually updating a spreadsheet every time a recruite...

What do I need before importing this workflow?

Review the workflow JSON, configure any required credentials in n8n, and test the automation in a safe workspace before using it in production.

Can I customize this workflow?

Yes. Use the block-by-block analysis and the downloadable JSON to inspect each node, then adjust credentials, prompts, schedules, filters, or destinations for your Personal Productivity, AI Summarization use case.