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

⚡ 131 views · ⚡ Personal Productivity

Description

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:

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:

Setup

Prerequisites:

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)
  2. Import this template. Open n8n → Workflows → Import from File. n8n will flag missing credentials.

  3. 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
  4. Replace placeholders (search the workflow for these strings):

    • YOUR_GOOGLE_SHEET_ID → your real sheet ID (from the sheet’s URL)
    • YOUR_EMAIL@example.com → the address that should receive approval digests
  5. 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.

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

Customization

Honest caveats

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.

🔗 Nodes Used

Google Sheets, Gmail, Schedule Trigger, Basic LLM Chain, OpenAI Chat Model

📥 Import

Download workflow.json and import into n8n: Workflow menu → Import from File

📖 Importing guide · 🔑 Credential setup