This workflow follows the Form → Form 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "8884df86-b7cd-4cf7-8b71-fd21113bfc0f",
"name": "Client Usage Log",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
420,
500
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "date",
"type": "string",
"display": true,
"required": false,
"displayName": "date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "workflow_id",
"type": "string",
"display": true,
"required": false,
"displayName": "workflow_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "execution_id",
"type": "string",
"display": true,
"required": false,
"displayName": "execution_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "client_id",
"type": "string",
"display": true,
"required": false,
"displayName": "client_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "client_name",
"type": "string",
"display": true,
"required": false,
"displayName": "client_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "input_tokens",
"type": "string",
"display": true,
"required": false,
"displayName": "input_tokens",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "output_tokens",
"type": "string",
"display": true,
"required": false,
"displayName": "output_tokens",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "total_tokens",
"type": "string",
"display": true,
"required": false,
"displayName": "total_tokens",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "input_cost",
"type": "string",
"display": true,
"required": false,
"displayName": "input_cost",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "output_cost",
"type": "string",
"display": true,
"required": false,
"displayName": "output_cost",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "total_cost",
"type": "string",
"display": true,
"required": false,
"displayName": "total_cost",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw/edit?usp=drivesdk",
"cachedResultName": "89. Langchain Code Node - Client Usage Log"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "1e4aca76-8b79-4780-b0c5-2cd92a41aa0e",
"name": "Logging Attributes",
"type": "n8n-nodes-base.set",
"position": [
-360,
-120
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "22164635-7a23-47e2-9868-96899cd9d317",
"name": "workflow_id",
"type": "string",
"value": "={{ $workflow.id }}"
},
{
"id": "ed1cb653-b3fd-40bf-b00b-10d777f098af",
"name": "execution_id",
"type": "string",
"value": "={{ $execution.id }}"
},
{
"id": "3de228a1-79b9-4805-8d92-917f691411be",
"name": "client_id",
"type": "string",
"value": "=12345"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "d7f37c54-5d96-47ba-b82e-0926a08137df",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-920,
-120
],
"parameters": {
"options": {},
"formTitle": "CV Parsing Service",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "Upload a file",
"requiredField": true,
"acceptFileTypes": ".pdf"
},
{
"fieldType": "dropdown",
"fieldLabel": "Acknowledgement",
"multiselect": true,
"fieldOptions": {
"values": [
{
"option": "I acknowledge the use of this service will be added to my bill."
}
]
},
"requiredField": true
}
]
},
"responseMode": "lastNode",
"formDescription": "Use this form to upload CVs and we'll extract the data from them. This workflow tracks usage metrics so we can calculate the bill later on."
},
"typeVersion": 2.2
},
{
"id": "06da0c8e-2035-45ae-a301-50021650a5f8",
"name": "Custom LLM Subnode",
"type": "@n8n/n8n-nodes-langchain.code",
"position": [
260,
340
],
"parameters": {
"code": {
"supplyData": {
"code": "const { ChatOpenAI } = require(\"@langchain/openai\");\n\n// 1. Configure as required.\n// - costs are per million tokens and depends on the model.\nconst openAIApiKey = \"sk-...\";\nconst model = \"gpt-4o-mini\";\nconst input_token_cost = 0.150;\nconst output_token_cost = 0.600;\n\n// 2. do not edit below this line --\nconst tools = await this.getInputConnectionData('ai_tool', 0);\nconst googleSheetTool = tools[0];\n\nconst {\n workflow_id,\n execution_id,\n client_id } = $input.first().json;\n\nconst llm = new ChatOpenAI({\n apiKey: openAIApiKey,\n model,\n callbacks: [\n {\n handleLLMEnd: async function(output,runId,parentId) {\n const generation = output.generations[0][0];\n const message = generation.message;\n const row = {\n date: (new Date()).toGMTString(),\n workflow_id,\n execution_id,\n client_id,\n input_tokens: message.usage_metadata.input_tokens,\n output_tokens: message.usage_metadata.output_tokens,\n total_tokens: message.usage_metadata.total_tokens,\n input_cost: (message.usage_metadata.input_tokens / 1_000_000) * input_token_cost,\n output_cost: (message.usage_metadata.output_tokens / 1_000_000) * output_token_cost,\n };\n row.total_cost = row.input_cost + row.output_cost;\n await googleSheetTool.func(row);\n }\n }\n ]\n});\n\nreturn llm;"
}
},
"inputs": {
"input": [
{
"type": "ai_tool",
"required": true
}
]
},
"outputs": {
"output": [
{
"type": "ai_languageModel"
}
]
}
},
"typeVersion": 1
},
{
"id": "35993bd5-b521-4239-bf23-aed47d339f54",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
360,
480
],
"parameters": {
"width": 200,
"height": 280,
"content": "\uc5c5\ub370\uc774\ud2b8 \uc6cc\ud06c\ubd81 \n\uc774\uac83\uc740 \ud1a0\ud070 \uc0ac\uc6a9\ub7c9\uacfc \ube44\uc6a9\uc744 \ucd94\uc801\ud560 \uc6cc\ud06c\ubd81\uc785\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "623ca94d-a215-416b-a9fe-62a1f96317e3",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1040,
-280
],
"parameters": {
"color": 7,
"width": 560,
"height": 380,
"content": "## 1. AI \uc11c\ube44\uc2a4\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uac8c \uc81c\uacf5\n\uc5ec\uae30\uc11c, \uc6b0\ub9ac\ub294 n8n \ud3fc\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc774\ub825\uc11c/CV PDF\uc758 \ubb38\uc11c \ucd94\ucd9c \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud560 \uac83\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uac00 \uac04\ub2e8\ud788 PDF\ub97c \uc5c5\ub85c\ub4dc\ud558\uba74 \uc6b0\ub9ac\ub294 \uadf8\uac83\uc744 JSON \ud615\uc2dd\uc73c\ub85c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774\uac83\uc740 \ub2e8\uc9c0 \uc2dc\uc5f0 \ubaa9\uc801\uc73c\ub85c \uac04\ub2e8\ud55c \uc608\uc81c\uc77c \ubfd0\uc785\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "ba9eb149-e77f-4bf6-8ec5-7d8d4619485d",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-460,
-280
],
"parameters": {
"color": 7,
"width": 320,
"height": 380,
"content": "## 2. \ub85c\uadf8\uc5d0 \ubcf4\ub0bc \uc678\ubd80 \ubcc0\uc218 \uc218\uc9d1\n\uc11c\ube0c\ub178\ub4dc\uc5d0\uc11c \uc815\uc758\ud560 \uc218 \uc5c6\ub294 \uc77c\ubd80 \ubcc0\uc218\uac00 \uc788\uc9c0\ub9cc, \uc5ec\uae30\uc5d0 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "63bfe329-17dd-4321-94c6-17d306ed7412",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-120,
-280
],
"parameters": {
"color": 7,
"width": 720,
"height": 380,
"content": "## 3. AI \uc11c\ube44\uc2a4 \uc81c\uacf5\n\uc6b0\ub9ac \uc11c\ube44\uc2a4\ub294 LLM(OpenAI GPT4o-mini\ub97c \uc774 \uc608\uc2dc\uc5d0\uc11c \uc0ac\uc6a9)\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc5c5\ub85c\ub4dc\ub41c PDF\uc758 \ub370\uc774\ud130\ub97c \uad6c\uc870\ud654\ub41c JSON \ud615\uc2dd\uc73c\ub85c \uc870\uc9c1\ud654\ud569\ub2c8\ub2e4. \uc774 \ubcc0\ud658\uc740 \ud6c4\uc18d \ud1b5\ud569\uc774\ub098 \ub370\uc774\ud130 \uc800\uc7a5\uc5d0 \uc720\uc6a9\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774 \uc608\uc2dc\uc5d0\uc11c, \uc6b0\ub9ac\ub294 \uadf8\uac83\uc744 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ub2e4\uc2dc \ud45c\uc2dc\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "f45862e9-7f8e-46bb-900a-807fee981ed5",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-120,
120
],
"parameters": {
"color": 7,
"width": 720,
"height": 440,
"content": "## 4. \uc0ac\uc6a9\uc790 \uc815\uc758 LLM \uc11c\ube0c\ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc0ac\uc6a9\ub7c9 \ubc0f \ube44\uc6a9 \ucd94\uc801\n\n[Langchain Code Node\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.code/)\n\nLangchain Code \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc0ac\uc6a9\uc790 \uc815\uc758 LLM \uc11c\ube0c\ub178\ub4dc\ub97c \uc0dd\uc131\ud558\uba74, \uc815\ubcf4 \ucd94\ucd9c\uae30 \uc694\uccad\uc5d0 \ub300\ud55c \ud1a0\ud070 \uc0ac\uc6a9\ub7c9 \uba54\ud0c0\ub370\uc774\ud130\ub97c \ud3ec\ud568\ud558\ub294 \ucc44\ud305 \uc644\ub8cc \uc751\ub2f5\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n\uc774\ub97c \ud1b5\ud574 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc694\uccad\uc774 \uc0ac\uc6a9\ub2f9 \uc815\ud655\ud788 \uc5bc\ub9c8\ub098 \ube44\uc6a9\uc774 \ub4dc\ub294\uc9c0 \uacc4\uc0b0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4!\n\n\uadf8\ub7f0 \ub2e4\uc74c \uc720\uc77c\ud558\uac8c \ub0a8\uc740 \ub2e8\uacc4\ub294 \uc774 \ub370\uc774\ud130\ub97c \uc5b4\ub518\uac00\uc5d0 \uc800\uc7a5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ub354 \ub9ce\uc740 \uc885\uc18d\uc131\uc744 \uac00\uc838\uc624\uac70\ub098 \uc790\uaca9 \uc99d\uba85\uc744 \ud558\ub4dc\ucf54\ub529\ud558\ub294 \ub300\uc2e0, \uc11c\ube0c\ub178\ub4dc\uc5d0 \ub3c4\uad6c\ub97c \ucca8\ubd80\ud558\ub294 \ub3c5\ucc3d\uc801\uc778 \uc194\ub8e8\uc158\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n\uc5ec\uae30\uc11c, \uc6b0\ub9ac\ub294 Google Sheets \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud558\uae30\ub85c \uacb0\uc815\ud558\uace0, \uc2dc\ud2b8\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc0ac\uc6a9\ub7c9 \uba54\ud2b8\ub9ad\uc2a4\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694 - [Client Usage Log](https://docs.google.com/spreadsheets/d/1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw/edit?usp=sharing)"
},
"typeVersion": 1
},
{
"id": "9f5014a5-0e9a-4af0-b076-03cdc0a14ab9",
"name": "Display JSON Document",
"type": "n8n-nodes-base.form",
"position": [
360,
-120
],
"parameters": {
"options": {
"customCss": ".header p {\n font-family: monospace;\n background-color: #efefef;\n padding: 1rem;\n font-size: 0.8rem;\n text-align: left;\n max-height: 480px;\n overflow: auto;\n white-space: pre;\n}"
},
"operation": "completion",
"completionTitle": "=Results for {{ $('On form submission').item.json['Upload a file'][0].filename }}",
"completionMessage": "={{ JSON.stringify($json.output, null, 2) }}"
},
"typeVersion": 1
},
{
"id": "b977f89c-1118-455f-986e-735a17eecd9b",
"name": "Filter Last Month",
"type": "n8n-nodes-base.filter",
"position": [
1120,
-120
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2a86f83e-b103-46fe-a8b8-15811d4138fa",
"operator": {
"type": "dateTime",
"operation": "afterOrEquals"
},
"leftValue": "={{new Date($json.date) }}",
"rightValue": "={{ $now.startOf('month') }}"
},
{
"id": "7b4c03a3-4df9-4b5d-9f1f-660e54a1c2d1",
"operator": {
"type": "dateTime",
"operation": "beforeOrEquals"
},
"leftValue": "={{new Date($json.date) }}",
"rightValue": "={{ $now.endOf('month') }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "10d95dcb-d975-4b20-961e-d1fe63417878",
"name": "Get Client Logs",
"type": "n8n-nodes-base.googleSheets",
"position": [
920,
-120
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "12345",
"lookupColumn": "client_id"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw/edit?usp=drivesdk",
"cachedResultName": "89. Langchain Code Node - Client Usage Log"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "f6505545-d57c-443a-9883-2d536f3a973a",
"name": "Calculate Totals",
"type": "n8n-nodes-base.summarize",
"position": [
1320,
-120
],
"parameters": {
"options": {},
"fieldsToSummarize": {
"values": [
{
"field": "total_cost",
"aggregation": "sum"
},
{
"field": "total_tokens",
"aggregation": "sum"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "1c4ae8ff-ec2b-4fd3-974f-cc766385b16b",
"name": "Every End of Month",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
720,
-120
],
"parameters": {
"rule": {
"interval": [
{
"field": "months",
"triggerAtHour": 18,
"triggerAtDayOfMonth": 31
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f321fbe6-36b1-4bd8-899b-832a8fc6217a",
"name": "Send Invoice",
"type": "n8n-nodes-base.gmail",
"position": [
1520,
-120
],
"parameters": {
"sendTo": "jim@example.com",
"message": "=Hello,\nThis is an invoice for {{ $now.monthLong }} {{ $now.year }}.\n\nTotal usage: {{ $json.sum_total_tokens }} tokens\nTotal token cost: ${{ $json.sum_total_cost.toFixed(5) }}\nTax @ 20%: ${{ ($json.sum_total_cost * 0.2).toFixed(5) }}\nTotal payable: ${{ ($json.sum_total_cost * 1.2).toFixed(5) }}\n\nPayable within 14 days.\nThank you for your custom.",
"options": {},
"subject": "=Invoice for {{ $now.monthLong }} {{ $now.year }}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "a7d8de78-c3b7-4687-8994-fe28387d7572",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
620,
-280
],
"parameters": {
"color": 7,
"width": 1100,
"height": 380,
"content": "## 5. \uc6d4\ub9d0\uc5d0 \uc790\ub3d9\uc73c\ub85c \uc1a1\uc7a5 \ubcf4\ub0b4\uae30 (\uc120\ud0dd\uc0ac\ud56d)\n\uc6b0\ub9ac\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc0ac\uc6a9 \ub85c\uadf8\ub97c \uc0ac\uc6a9\ud558\uba74, \ud2b9\uc815 \uae30\uac04 \ub0b4\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \ub85c\uadf8 \uae30\ub85d\uc744 \uc9d1\uacc4\ud558\uace0 \ud569\uacc4\ub97c \uacc4\uc0b0\ud558\ub294 \uac83\uc774 \uaf64 \uac04\ub2e8\ud569\ub2c8\ub2e4.\n\uc774\uac83\uc740 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc815\ud655\ud55c \uccad\uad6c \uc694\uad6c\uc0ac\ud56d\uc744 \ucda9\uc871\uc2dc\ud0ac \uc218 \uc788\uac70\ub098, \uc801\uc5b4\ub3c4 \uadc0\ud558\uc758 \ud300\uc774 \uac01 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ube44\uc6a9\uc774 \uc5bc\ub9c8\ub098 \ub4dc\ub294\uc9c0 \uc774\ud574\ud558\uace0 \uadf8\uc5d0 \ub530\ub77c \uc608\uc0b0\uc744 \uc870\uc815\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "169fa40d-c6e8-4315-be35-d2c73f626edf",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1500,
-920
],
"parameters": {
"width": 440,
"height": 1020,
"content": "## \uc9c1\uc811 \ud574\ubcf4\uc138\uc694!\n### \uc774 n8n \ud15c\ud50c\ub9bf\uc740 Langchain \ucf54\ub4dc \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubaa8\ub4e0 LLM \ud638\ucd9c\uc5d0 \ub300\ud55c \ud1a0\ud070 \uc0ac\uc6a9\ub7c9\uacfc \ube44\uc6a9\uc744 \ucd94\uc801\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.\n\n\uc774 \ud15c\ud50c\ub9bf\uc740 \uc5ec\ub7ec \ud074\ub77c\uc774\uc5b8\ud2b8\ub098 \uace0\uac1d\uc744 \ucc98\ub9ac\ud558\uace0 \uc788\uc73c\uba70, AI \ud06c\ub808\ub527 \uc0ac\uc6a9\ub7c9\uc744 \uc800\ub834\ud558\uace0 \uc27d\uac8c \ucea1\ucc98\ud560 \ud544\uc694\uac00 \uc788\uc744 \ub54c \uc720\uc6a9\ud569\ub2c8\ub2e4.\n\n### \uc791\ub3d9 \uc6d0\ub9ac\n* \uc6b0\ub9ac\uc758 \ubaa8\uc758 AI \uc11c\ube44\uc2a4\uc5d0\uc11c, \uc774\ub825\uc11c PDF\ub97c JSON \ubb38\uc11c\ub85c \ubcc0\ud658\ud558\ub294 \ub370\uc774\ud130 \ubcc0\ud658 API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.\n* \ud3fc \ud2b8\ub9ac\uac70\ub97c \uc0ac\uc6a9\ud558\uc5ec PDF \uc5c5\ub85c\ub4dc\ub97c \ud5c8\uc6a9\ud558\uace0, \ud30c\uc77c\uc744 Extract from File \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uad6c\ubb38 \ubd84\uc11d\ud569\ub2c8\ub2e4.\n* Edit Fields \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub85c\uadf8\uc5d0 \ubcf4\ub0bc \ucd94\uac00 \ubcc0\uc218\ub97c \ucea1\ucc98\ud569\ub2c8\ub2e4.\n* Information Extractor \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc774\ub825\uc11c \ub370\uc774\ud130\ub97c \uc8fc\uc5b4\uc9c4 JSON \uc2a4\ud0a4\ub9c8\ub85c \uad6c\uc131\ud569\ub2c8\ub2e4.\n* Information Extractor\uc5d0 \uc5f0\uacb0\ub41c LLM \uc11c\ube0c\ub178\ub4dc\ub294 Langchain Code \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc81c\uc791\ud55c \ucee4\uc2a4\ud140 \ub178\ub4dc\uc785\ub2c8\ub2e4.\n* \uc6b0\ub9ac\uc758 \ucee4\uc2a4\ud140 LLM \uc11c\ube0c\ub178\ub4dc\ub97c \ud1b5\ud574 \ub77c\uc774\ud504\uc0ac\uc774\ud074 \ud6c4\ud06c\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc0ac\uc6a9\ub7c9 \uba54\ud0c0\ub370\uc774\ud130\ub97c \ucea1\ucc98\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n* LLM \uc11c\ube0c\ub178\ub4dc\uc5d0 Google Sheet \ub3c4\uad6c\ub97c \uc5f0\uacb0\ud558\uc5ec \uc0ac\uc6a9\ub7c9 \uba54\ud0c0\ub370\uc774\ud130\ub97c Google \uc2dc\ud2b8\ub85c \ubcf4\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n* \ub9c8\uc9c0\ub9c9\uc73c\ub85c, Google \uc2dc\ud2b8\uc5d0\uc11c \uc9d1\uacc4\ud558\uc5ec \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \ucc45\uc784\uc838\uc57c \ud560 AI \ud1a0\ud070/\ube44\uc6a9\uc744 \uc774\ud574\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.\n\n**\uc608\uc2dc \ud074\ub77c\uc774\uc5b8\ud2b8 \uc0ac\uc6a9\ub7c9 \ub85c\uadf8 \ud655\uc778** - https://docs.google.com/spreadsheets/d/1AR5mrxz2S6PjAKVM0edNG-YVEc6zKL7aUxHxVcffnlw/edit?usp=sharing\n\n### \uc0ac\uc6a9 \ubc29\ubc95\n* **\uc140\ud504-\ud638\uc2a4\ud305 n8n \uc804\uc6a9** - Langchain Code \ub178\ub4dc\ub294 \uc140\ud504-\ud638\uc2a4\ud305 \ubc84\uc804\uc758 n8n\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. n8n \ud074\ub77c\uc6b0\ub4dc\uc5d0\uc11c\ub294 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n* LLM \uc11c\ube0c\ub178\ub4dc\ub294 \"AI \uc5d0\uc774\uc804\ud2b8\" \ub178\ub4dc\uac00 \uc544\ub2cc \ub178\ub4dc\uc5d0\ub9cc \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, \uae30\ubcf8 LLM \ub178\ub4dc, Information Extractor, Question & Answer Chain, Sentiment Analysis, Summarization Chain \ubc0f Text Classifier\uc785\ub2c8\ub2e4.\n\n### \ub3c4\uc6c0\uc774 \ud544\uc694\ud558\uc2e0\uac00\uc694?\n[n8n Discord](https://discord.com/invite/XPKeKXeB7d) \ub610\ub294 [\ud3ec\ub7fc](https://community.n8n.io/)\uc5d0\uc11c \ubb38\uc758\ud558\uc138\uc694!"
},
"typeVersion": 1
},
{
"id": "922710e3-f92b-4a7f-9ff2-c3d7d55f04d5",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1040,
-420
],
"parameters": {
"color": 3,
"width": 280,
"height": 120,
"content": "\uc790\uac00 \ud638\uc2a4\ud305 n8n \uc804\uc6a9 \n\uc8fc\uc9c0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4, \uc774 \ud15c\ud50c\ub9bf\uc740 n8n\uc758 \uc790\uac00 \ud638\uc2a4\ud305 \ubc84\uc804\uc5d0\uc11c\ub9cc \uc791\ub3d9\ud569\ub2c8\ub2e4. \ud074\ub77c\uc6b0\ub4dc \ubc84\uc804\uc5d0\uc11c\ub294 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "56c23cb5-818f-434d-96a7-0029f6607299",
"name": "Parse PDF Upload",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-700,
-120
],
"parameters": {
"options": {},
"operation": "pdf",
"binaryPropertyName": "Upload_a_file"
},
"typeVersion": 1
},
{
"id": "f4cc9870-a73e-487c-a131-aca2735b2e60",
"name": "Extract Resume Data",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
0,
-120
],
"parameters": {
"text": "={{ $json.text }}",
"options": {},
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"label\": { \"type\": \"string\" },\n \"email\": { \"type\": \"string\" },\n \"phone\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"summary\": { \"type\": \"string\" },\n \"location\": {\n \"type\": \"object\",\n \"properties\": {\n \"address\": { \"type\": \"string\" },\n \"postalCode\": { \"type\": \"string\" },\n \"city\": { \"type\": \"string\" },\n \"countryCode\": { \"type\": \"string\" },\n \"region\": { \"type\": \"string\" }\n }\n },\n \"work\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"location\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" },\n \"position\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"startDate\": { \"type\": \"string\" },\n \"endDate\": { \"type\": \"string\" },\n \"summary\": { \"type\": \"string\" },\n \"highlights\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n }\n }\n },\n \"education\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"institution\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"area\": { \"type\": \"string\" },\n \"studyType\": { \"type\": \"string\" },\n \"startDate\": { \"type\": \"string\" },\n \"endDate\": { \"type\": \"string\" },\n \"score\": { \"type\": \"string\" },\n \"courses\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n }\n }\n },\n \"skills\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"level\": { \"type\": \"string\" },\n \"keywords\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n }\n }\n }\n }\n}"
},
"typeVersion": 1
}
],
"connections": {
"Get Client Logs": {
"main": [
[
{
"node": "Filter Last Month",
"type": "main",
"index": 0
}
]
]
},
"Calculate Totals": {
"main": [
[
{
"node": "Send Invoice",
"type": "main",
"index": 0
}
]
]
},
"Client Usage Log": {
"ai_tool": [
[
{
"node": "Custom LLM Subnode",
"type": "ai_tool",
"index": 0
}
]
]
},
"Parse PDF Upload": {
"main": [
[
{
"node": "Logging Attributes",
"type": "main",
"index": 0
}
]
]
},
"Filter Last Month": {
"main": [
[
{
"node": "Calculate Totals",
"type": "main",
"index": 0
}
]
]
},
"Custom LLM Subnode": {
"ai_languageModel": [
[
{
"node": "Extract Resume Data",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Every End of Month": {
"main": [
[
{
"node": "Get Client Logs",
"type": "main",
"index": 0
}
]
]
},
"Logging Attributes": {
"main": [
[
{
"node": "Extract Resume Data",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Parse PDF Upload",
"type": "main",
"index": 0
}
]
]
},
"Extract Resume Data": {
"main": [
[
{
"node": "Display JSON Document",
"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.
gmailOAuth2googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Workflow 3440. Uses googleSheetsTool, formTrigger, form, googleSheets. Event-driven trigger; 20 nodes.
Source: https://github.com/n8nKOR/n8n-shared-workflow/blob/62a671327e906c22a40d290b339ff6d2373f8d75/workflows/n8n-workflows-by-Zie619/devops/3440_workflow_3440.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.
Filter Summarize. Uses googleSheetsTool, formTrigger, stickyNote, form. Event-driven trigger; 20 nodes.
ASO Analyzer. Uses formTrigger, httpRequest, openAi, googleSheets. Event-driven trigger; 17 nodes.
This n8n workflow enables teams to automate and standardize multi-step onboarding or messaging workflows using Google Sheets, Forms, Gmail, and dynamic logic powered by Code and Switch nodes. It ensur
This workflow is triggered when the contact form is submitted.
n8n Graphic Design Team. Uses googleSheets, googleDrive, httpRequest, outputParserStructured. Event-driven trigger; 37 nodes.