AutomationFlowsAI & RAG › Auto-update Job Application Status From Gmail to Google Sheets

Auto-update Job Application Status From Gmail to Google Sheets

ByDhaval Variya @dhv9545 on n8n.io

Every time you receive an email, and if that email is about your job application, then the status of your job application will be updated in the Google Sheet (No more manual tracking)

Event trigger★★★★☆ complexityAI-powered9 nodesGmail TriggerGoogle SheetsAgentOpenRouter Chat
AI & RAG Trigger: Event Nodes: 9 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #15389 — we link there as the canonical source.

This workflow follows the Agent → Gmail Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "Ga6epswdAdUivxVh",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "JobStatusAutomization",
  "tags": [],
  "nodes": [
    {
      "id": "c58a7770-4282-47f9-8b19-d29bc3ca00a6",
      "name": "Gmail Trigger",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -432,
        48
      ],
      "parameters": {
        "filters": {},
        "pollTimes": {
          "item": []
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "03f69282-e1bd-4334-90ee-58389076b218",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        80,
        48
      ],
      "parameters": {
        "include": "selected",
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ad669d14-cadc-44fd-bba7-b11560d25c2e",
              "name": "data",
              "type": "object",
              "value": "={{ $json.output.parseJson() }}"
            }
          ]
        },
        "includeFields": "Status",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "190cb27a-8212-44f9-80a3-940542061355",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        -64
      ],
      "parameters": {
        "color": "#9D5E15",
        "width": 496,
        "height": 480,
        "content": "## How this works\n* Every time you receive an email, and if that email is about your job application, then the status of your job application will be updated in the Google Sheet (No more manual tracking)\n\n## How to set it up\n**1 :** Create API keys for Google sheet/Gmail [Link](https://console.cloud.google.com/apis), and OpenRouter [link](https://openrouter.ai/workspaces/default/keys/)\n- If you do not know how to create and add an API key, then search on Google, and you will find a solution, or contact me (you will find that in my n8n profile)\n\n**2 :** Create a Google sheet (JobApplicationStatus) (with three column headings \"Company\", \"JobRole\", and \"Status\") in your Google Drive and link it in this workflow in the Google Sheet node\n\n## Constomization\n* Replace with a better free/paid AI model you like (you don't need to, free also works)\n* Edit the prompt to get better results if you find any problem with the AI output\n* Feel free to change the workflow for other similar usecas"
      },
      "typeVersion": 1
    },
    {
      "id": "5c90c748-f883-4457-82c7-6191da1666a6",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        -64
      ],
      "parameters": {
        "width": 512,
        "height": 416,
        "content": "## Trigger and extract new email data\n- Will be triggered automatically when a new email recieved to your connected Gmail"
      },
      "typeVersion": 1
    },
    {
      "id": "146c5233-efca-46d7-a6fe-773dd5610242",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        48,
        -64
      ],
      "parameters": {
        "width": 352,
        "height": 288,
        "content": "## Edit and validate AI output"
      },
      "typeVersion": 1
    },
    {
      "id": "209f278f-a893-4af4-8c5f-2064e1ed79af",
      "name": "Append new status info",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        480,
        32
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "={{ $json.data.Status }}",
            "Company": "={{ $json.data.Company }}",
            "JobRole": "={{ $json.data.JobRole }}"
          },
          "schema": [
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "JobRole",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "JobRole",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Company"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pyczamyVc0fmPP8q78FF_KB6KKtTi_vVhKtfgg8ZRqw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1pyczamyVc0fmPP8q78FF_KB6KKtTi_vVhKtfgg8ZRqw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pyczamyVc0fmPP8q78FF_KB6KKtTi_vVhKtfgg8ZRqw/edit?usp=drivesdk",
          "cachedResultName": "JobApplicationStatus"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "ff7d3ed2-0e23-40aa-ba5f-0771ec513278",
      "name": "extract and formate email data",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -240,
        48
      ],
      "parameters": {
        "text": "=Role: Act as a specialized Email Parser and Recruitment Data Analyst.\n\nTask: Analyze the provided email and categorize it into a structured JSON format based on specific recruitment status markers.\n\nCategorization Logic (Priority Order):\n\nInterview: Use this if the email asks for a meeting, provides a scheduling link (Calendly, etc.), suggests a time for a call/technical round, or confirms a scheduled interview.\n\nApplied: Use this for initial application confirmations or \"Thanks for applying\" messages.\n\nRejected: Use this if they are not moving forward or the position is closed or mention that regret to inform you.\n\nIn Review: Use this if they explicitly ask for more time or state the application is still being processed.\n\nOther: Use this for any email NOT related to a job application (newsletters, personal, marketing).\n\nExtraction Rules:\n\nCompany: Extract the formal company name. Check the body first, then the \"Email From\" domain.\n\nJobRole: Identify the specific job title. If none is found or if status is \"Other\", return \"Not Specified\".\n\nFormat: Return ONLY a valid JSON object. No prose.\n\nInput Data:\n\nFrom: {{ $json.From }}\n\nSubject: {{ $json.Subject }}\n\nBody: {{ $json.snippet }}\n\nJSON Schema:\n\n{\n  \"Status\": \"Applied | Rejected | In Review | Interview | Other\",\n  \"Company\": \"string\",\n  \"JobRole\": \"string\"\n}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "6d9a2165-c9a9-49b1-baec-2668cd5a2c3e",
      "name": "Free AI Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -240,
        224
      ],
      "parameters": {
        "model": "openai/gpt-oss-120b:free",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a2189395-dd35-41ff-9de0-2ee2c113a211",
      "name": "Append only Job Status data",
      "type": "n8n-nodes-base.if",
      "position": [
        256,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "b00b6892-de22-4b2f-9f48-932273440f41",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "Other"
            }
          ]
        }
      },
      "typeVersion": 2.3
    }
  ],
  "active": true,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "19a4b539-4efb-4960-a71d-52b2a36c56c2",
  "connections": {
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Append only Job Status data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Free AI Model": {
      "ai_languageModel": [
        [
          {
            "node": "extract and formate email data",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Gmail Trigger": {
      "main": [
        [
          {
            "node": "extract and formate email data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append only Job Status data": {
      "main": [
        [
          {
            "node": "Append new status info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "extract and formate email data": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Every time you receive an email, and if that email is about your job application, then the status of your job application will be updated in the Google Sheet (No more manual tracking)

Source: https://n8n.io/workflows/15389/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

&gt; Note: This workflow uses sticky notes extensively to document each logical section of the automation. Sticky notes are mandatory and already included to explain OCR, AI parsing, folder logic, dup

QuickBooks, Google Sheets, Google Drive +5
AI & RAG

This workflow transforms your Telegram bot into an intelligent creative assistant. It can chat conversationally, fetch trending image prompts from PromptHero for inspiration, or perform a deep "remix"

Telegram Trigger, Output Parser Structured, Telegram +6
AI & RAG

This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents. ​

Tool Http Request, Agent, HTTP Request +27
AI & RAG

🧠 Automate end-to-end SEO blog creation and WordPress publishing using a GPT-5 multi-agent workflow with real-time research, metadata generation, and optional featured images.

Output Parser Structured, HTTP Request, OpenAI +10
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Output Parser Structured, Telegram, N8N Nodes Tesseractjs +14