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 →
{
"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.
gmailOAuth2googleSheetsOAuth2ApiopenRouterApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
> 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
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"
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.
🧠 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.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.