This workflow follows the Gmail Trigger → Google Sheets 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 →
{
"name": "[\uae08\uc735] AI \uc778\ubcf4\uc774\uc2a4 \uc790\ub3d9 \ucc98\ub9ac - \uc774\uba54\uc77c \uc218\uc2e0",
"nodes": [
{
"parameters": {
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"simple": false,
"filters": {
"subject": "\uc778\ubcf4\uc774\uc2a4|invoice|\uccad\uad6c\uc11c|\uc138\uae08\uacc4\uc0b0\uc11c"
},
"options": {}
},
"id": "gmail-trigger-node",
"name": "\uc778\ubcf4\uc774\uc2a4 \uc774\uba54\uc77c \uc218\uc2e0",
"type": "n8n-nodes-base.gmailTrigger",
"typeVersion": 1,
"position": [
250,
300
],
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// \uc774\uba54\uc77c \ubcf8\ubb38\uc5d0\uc11c \uc778\ubcf4\uc774\uc2a4 \uad00\ub828 \uc815\ubcf4 \ucd94\ucd9c\nconst email = $input.item.json;\n\nreturn {\n json: {\n subject: email.subject || '',\n from: email.from || '',\n body: email.textPlain || email.textHtml || '',\n date: email.date || new Date().toISOString()\n }\n};"
},
"id": "code-extract-node",
"name": "\uc774\uba54\uc77c \ubcf8\ubb38 \ucd94\ucd9c",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
450,
300
]
},
{
"parameters": {
"resource": "text",
"operation": "message",
"modelId": "gpt-4o-mini",
"messages": {
"values": [
{
"role": "system",
"content": "\ub2f9\uc2e0\uc740 \uc778\ubcf4\uc774\uc2a4 \ud30c\uc2f1 \uc804\ubb38\uac00\uc785\ub2c8\ub2e4. \uc774\uba54\uc77c \ub0b4\uc6a9\uc5d0\uc11c \uc778\ubcf4\uc774\uc2a4 \uc815\ubcf4\ub97c \ucd94\ucd9c\ud558\uc5ec \ubc18\ub4dc\uc2dc \ub2e4\uc74c JSON \ud615\uc2dd\uc73c\ub85c \uc751\ub2f5\ud558\uc138\uc694:\n{\"vendor\": \"\uc5c5\uccb4\uba85\", \"amount\": \uae08\uc561(\uc22b\uc790\ub9cc), \"dueDate\": \"\ub0a9\uae30\uc77c(YYYY-MM-DD)\", \"items\": \"\ud488\ubaa9 \uc694\uc57d\"}\n\n\uc815\ubcf4\ub97c \ucc3e\uc744 \uc218 \uc5c6\ub294 \ud544\ub4dc\ub294 null\ub85c \ud45c\uc2dc\ud558\uc138\uc694. \uae08\uc561\uc740 \ubc18\ub4dc\uc2dc \uc22b\uc790\ub9cc \uc785\ub825\ud558\uc138\uc694."
},
{
"role": "user",
"content": "=\uc81c\ubaa9: {{ $json.subject }}\n\ubc1c\uc2e0\uc790: {{ $json.from }}\n\n\ubcf8\ubb38:\n{{ $json.body }}"
}
]
},
"options": {
"temperature": 0.2
}
},
"id": "openai-node",
"name": "AI \uc778\ubcf4\uc774\uc2a4 \ud30c\uc2f1",
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.3,
"position": [
650,
300
],
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// AI \uc751\ub2f5 JSON \ud30c\uc2f1 \ubc0f \uae30\ubcf8\uac12 \ucc98\ub9ac\nconst aiResponse = $input.item.json.message?.content || '{}';\nlet parsed;\n\ntry {\n parsed = JSON.parse(aiResponse);\n} catch (e) {\n parsed = { vendor: '\ud30c\uc2f1 \uc2e4\ud328', amount: 0, dueDate: null, items: '\ud655\uc778 \ud544\uc694' };\n}\n\nconst emailData = $('\uc774\uba54\uc77c \ubcf8\ubb38 \ucd94\ucd9c').item.json;\n\nreturn {\n json: {\n date: new Date().toISOString().slice(0, 10),\n vendor: parsed.vendor || '\ubbf8\ud655\uc778',\n amount: parsed.amount || 0,\n dueDate: parsed.dueDate || '\ubbf8\uc815',\n items: parsed.items || '\ud655\uc778 \ud544\uc694',\n emailSubject: emailData.subject,\n emailFrom: emailData.from\n }\n};"
},
"id": "code-parse-node",
"name": "\ud30c\uc2f1 \uacb0\uacfc \uc815\ub9ac",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
850,
300
]
},
{
"parameters": {
"operation": "appendOrUpdate",
"documentId": {
"__rl": true,
"value": "placeholder-spreadsheet-id",
"mode": "id",
"cachedResultName": "\uc778\ubcf4\uc774\uc2a4 \uad00\ub9ac"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "id",
"cachedResultName": "Sheet1"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"\ub0a0\uc9dc": "={{ $json.date }}",
"\uc5c5\uccb4\uba85": "={{ $json.vendor }}",
"\uae08\uc561": "={{ $json.amount }}",
"\ub0a9\uae30\uc77c": "={{ $json.dueDate }}",
"\ud488\ubaa9": "={{ $json.items }}"
},
"matchingColumns": [],
"schema": []
},
"options": {
"cellFormat": "USER_ENTERED",
"useAppend": true
}
},
"id": "sheets-node",
"name": "\uad6c\uae00 \uc2dc\ud2b8 \uae30\ub85d",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.4,
"position": [
1050,
300
],
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": ""
},
"conditions": [
{
"id": "1",
"leftValue": "={{ $json.amount }}",
"rightValue": 1000000,
"operator": {
"type": "number",
"operation": "gt"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "if-node",
"name": "\uace0\uc561 \uc778\ubcf4\uc774\uc2a4?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
1250,
300
]
},
{
"parameters": {
"authentication": "oAuth2",
"select": "channel",
"channelId": {
"__rl": true,
"value": "C12345FINANCE",
"mode": "id"
},
"text": "=:rotating_light: \uace0\uc561 \uc778\ubcf4\uc774\uc2a4 \uc54c\ub9bc\n\n*\uc5c5\uccb4\uba85:* {{ $json.vendor }}\n*\uae08\uc561:* {{ Number($json.amount).toLocaleString() }}\uc6d0\n*\ub0a9\uae30\uc77c:* {{ $json.dueDate }}\n*\ud488\ubaa9:* {{ $json.items }}\n*\uc218\uc2e0\uc77c:* {{ $json.date }}",
"otherOptions": {}
},
"id": "slack-node",
"name": "\uace0\uc561 \uc54c\ub9bc",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.2,
"position": [
1450,
300
],
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
}
}
],
"connections": {
"\uc778\ubcf4\uc774\uc2a4 \uc774\uba54\uc77c \uc218\uc2e0": {
"main": [
[
{
"node": "\uc774\uba54\uc77c \ubcf8\ubb38 \ucd94\ucd9c",
"type": "main",
"index": 0
}
]
]
},
"\uc774\uba54\uc77c \ubcf8\ubb38 \ucd94\ucd9c": {
"main": [
[
{
"node": "AI \uc778\ubcf4\uc774\uc2a4 \ud30c\uc2f1",
"type": "main",
"index": 0
}
]
]
},
"AI \uc778\ubcf4\uc774\uc2a4 \ud30c\uc2f1": {
"main": [
[
{
"node": "\ud30c\uc2f1 \uacb0\uacfc \uc815\ub9ac",
"type": "main",
"index": 0
}
]
]
},
"\ud30c\uc2f1 \uacb0\uacfc \uc815\ub9ac": {
"main": [
[
{
"node": "\uad6c\uae00 \uc2dc\ud2b8 \uae30\ub85d",
"type": "main",
"index": 0
}
]
]
},
"\uad6c\uae00 \uc2dc\ud2b8 \uae30\ub85d": {
"main": [
[
{
"node": "\uace0\uc561 \uc778\ubcf4\uc774\uc2a4?",
"type": "main",
"index": 0
}
]
]
},
"\uace0\uc561 \uc778\ubcf4\uc774\uc2a4?": {
"main": [
[
{
"node": "\uace0\uc561 \uc54c\ub9bc",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"saveManualExecutions": true,
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "",
"timezone": "Asia/Seoul",
"saveExecutionProgress": true,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all",
"executionTimeout": 3600
},
"staticData": null,
"tags": [
{
"createdAt": "2026-03-09T00:00:00.000Z",
"updatedAt": "2026-03-09T00:00:00.000Z",
"id": "finance",
"name": "\uae08\uc735"
},
{
"createdAt": "2026-03-09T00:00:00.000Z",
"updatedAt": "2026-03-09T00:00:00.000Z",
"id": "ai-automation",
"name": "AI \uc790\ub3d9\ud654"
}
],
"triggerCount": 1,
"updatedAt": "2026-03-09T00:00:00.000Z",
"versionId": "1"
}
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.
gmailOAuth2googleSheetsOAuth2ApiopenAiApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
[금융] AI 인보이스 자동 처리 - 이메일 수신. Uses gmailTrigger, openAi, googleSheets, slack. Event-driven trigger; 7 nodes.
Source: https://github.com/cskwork/n8n-maker/blob/34120aa8922a96a6a05e9ca710cc0ce1e6c3dfe6/public/workflows/invoice-auto-process.json — 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.
Complete AI-powered sales system Automates lead capture, qualification, and follow-up from multiple channels. AI INTELLIGENCE:
LeadInboxTriageBot_GT. Uses gmailTrigger, openAi, googleSheets, gmail. Event-driven trigger; 36 nodes.
Overview
This workflow watches a Gmail label for new meeting transcript emails, extracts the transcript, uses OpenAI to generate a summary and action items, routes urgent items to the right Slack channel, and
Automate your entire invoice processing pipeline with AI-powered OCR, validation, and approval workflows 📄🤖. This n8n automation monitors incoming Gmail invoices, extracts structured data using OCR an