This workflow follows the Form Trigger → Google Drive 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": "WF01-\ubc1c\uba85\uc81c\uc548\uc11c\uc785\ub825",
"id": "galbpC91RCA90yyi",
"description": "\ubc1c\uba85 \uc81c\uc548\uc11c \uc785\ub825 \ubc0f \uac80\uc99d \uc6cc\ud06c\ud50c\ub85c\uc6b0 - MAIPatent \ud30c\uc774\ud504\ub77c\uc778\uc758 \uccab \ubc88\uc9f8 \ub2e8\uacc4",
"active": false,
"nodes": [
{
"id": "form-trigger",
"name": "\ubc1c\uba85\uc81c\uc548\uc11c Form",
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.2,
"position": [
0,
0
],
"parameters": {
"formTitle": "\ubc1c\uba85 \uc81c\uc548\uc11c \uc785\ub825",
"formDescription": "\ud2b9\ud5c8 \uba85\uc138\uc11c \uc790\ub3d9 \uc0dd\uc131\uc744 \uc704\ud55c \ubc1c\uba85 \uc81c\uc548\uc11c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.",
"formFields": {
"values": [
{
"fieldLabel": "\ubc1c\uba85\uc758 \uba85\uce6d",
"fieldType": "text",
"requiredField": true,
"placeholder": "\uc608: \uc778\uacf5\uc9c0\ub2a5 \uae30\ubc18 \ud2b9\ud5c8 \uba85\uc138\uc11c \uc790\ub3d9 \uc0dd\uc131 \uc2dc\uc2a4\ud15c"
},
{
"fieldLabel": "\uae30\uc220\ubd84\uc57c",
"fieldType": "text",
"requiredField": true,
"placeholder": "\uc608: \uc778\uacf5\uc9c0\ub2a5, \uc790\uc5f0\uc5b4\ucc98\ub9ac, \ud2b9\ud5c8 \uc790\ub3d9\ud654"
},
{
"fieldLabel": "\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c",
"fieldType": "textarea",
"requiredField": true,
"placeholder": "\ubc1c\uba85\uc774 \ud574\uacb0\ud558\uace0\uc790 \ud558\ub294 \uae30\uc220\uc801 \uacfc\uc81c\ub97c \uc0c1\uc138\ud788 \uae30\uc220\ud574\uc8fc\uc138\uc694."
},
{
"fieldLabel": "\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131",
"fieldType": "textarea",
"requiredField": true,
"placeholder": "\ubc1c\uba85\uc758 \ud575\uc2ec\uc801\uc778 \uae30\uc220\uc801 \uad6c\uc131\uc744 \uae30\uc220\ud574\uc8fc\uc138\uc694."
},
{
"fieldLabel": "\ubc1c\uba85\uc758 \ud6a8\uacfc",
"fieldType": "textarea",
"requiredField": true,
"placeholder": "\ubc1c\uba85\uc73c\ub85c \uc778\ud574 \uc5bb\uc744 \uc218 \uc788\ub294 \uae30\uc220\uc801 \ud6a8\uacfc\ub97c \uae30\uc220\ud574\uc8fc\uc138\uc694."
},
{
"fieldLabel": "\ucd9c\uc6d0\uc778",
"fieldType": "text",
"requiredField": true,
"placeholder": "\ucd9c\uc6d0\uc778 \uc774\ub984"
},
{
"fieldLabel": "\ubc1c\uba85\uc790",
"fieldType": "text",
"requiredField": true,
"placeholder": "\ubc1c\uba85\uc790 \uc774\ub984"
}
]
},
"options": {}
}
},
{
"id": "webhook-trigger",
"name": "API Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
0,
200
],
"parameters": {
"path": "wf01-invention-input",
"httpMethod": "POST",
"responseMode": "responseNode",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Access-Control-Allow-Origin",
"value": "*"
}
]
}
}
}
},
{
"id": "normalize-webhook-data",
"name": "Webhook \ub370\uc774\ud130 \uc815\uaddc\ud654",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
220,
200
],
"parameters": {
"jsCode": "// Webhook\uc5d0\uc11c \ubc1b\uc740 \ub370\uc774\ud130\ub97c Form Trigger \ud615\uc2dd\uc73c\ub85c \uc815\uaddc\ud654\nconst input = $input.first().json;\n\n// Webhook payload \uad6c\uc870: { headers, params, query, body }\n// body.invention \ub610\ub294 \uc9c1\uc811 invention \uac1d\uccb4 \ucd94\ucd9c\nconst invention = input.body?.invention || input.invention || input.body || input;\n\n// Form Trigger \ud615\uc2dd\uc73c\ub85c \ub9e4\ud551\nconst normalizedData = {\n '\ubc1c\uba85\uc758 \uba85\uce6d': invention.inventionTitle || invention['\ubc1c\uba85\uc758 \uba85\uce6d'] || '',\n '\uae30\uc220\ubd84\uc57c': invention.technicalField || invention['\uae30\uc220\ubd84\uc57c'] || '',\n '\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c': invention.technicalProblem || invention['\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c'] || '',\n '\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131': invention.proposedSolution || invention['\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131'] || '',\n '\ubc1c\uba85\uc758 \ud6a8\uacfc': invention.expectedEffects || invention['\ubc1c\uba85\uc758 \ud6a8\uacfc'] || '',\n '\ucd9c\uc6d0\uc778': invention.inventorAffiliation || invention['\ucd9c\uc6d0\uc778'] || '',\n '\ubc1c\uba85\uc790': invention.inventorName || invention['\ubc1c\uba85\uc790'] || '',\n 'submittedAt': new Date().toISOString(),\n 'formMode': 'webhook'\n};\n\nreturn [{ json: normalizedData }];"
}
},
{
"id": "validate-code",
"name": "\ub370\uc774\ud130 \uac80\uc99d",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
220,
0
],
"parameters": {
"jsCode": "// \ubc1c\uba85 \uc81c\uc548\uc11c \uac80\uc99d\nconst input = $input.first().json;\n\nconst errors = [];\n\n// \ud544\uc218 \ud544\ub4dc \uac80\uc99d\nconst requiredFields = [\n { key: '\ubc1c\uba85\uc758 \uba85\uce6d', label: '\ubc1c\uba85\uc758 \uba85\uce6d' },\n { key: '\uae30\uc220\ubd84\uc57c', label: '\uae30\uc220\ubd84\uc57c' },\n { key: '\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c', label: '\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c' },\n { key: '\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131', label: '\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131' },\n { key: '\ubc1c\uba85\uc758 \ud6a8\uacfc', label: '\ubc1c\uba85\uc758 \ud6a8\uacfc' },\n { key: '\ucd9c\uc6d0\uc778', label: '\ucd9c\uc6d0\uc778' },\n { key: '\ubc1c\uba85\uc790', label: '\ubc1c\uba85\uc790' }\n];\n\nfor (const field of requiredFields) {\n if (!input[field.key] || input[field.key].trim() === '') {\n errors.push(`${field.label}\uc740(\ub294) \ud544\uc218 \uc785\ub825 \ud56d\ubaa9\uc785\ub2c8\ub2e4.`);\n }\n}\n\n// \ucd5c\uc18c \uae38\uc774 \uac80\uc99d\nif (input['\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c'] && input['\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c'].length < 50) {\n errors.push('\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c\ub294 \ucd5c\uc18c 50\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc8fc\uc138\uc694.');\n}\n\nif (input['\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131'] && input['\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131'].length < 100) {\n errors.push('\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131\uc740 \ucd5c\uc18c 100\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc8fc\uc138\uc694.');\n}\n\n// \uac80\uc99d \uacb0\uacfc \ubc18\ud658\nif (errors.length > 0) {\n return [{\n json: {\n valid: false,\n errors: errors,\n input: input\n }\n }];\n}\n\nreturn [{\n json: {\n valid: true,\n data: input\n }\n}];"
}
},
{
"id": "if-valid",
"name": "\uac80\uc99d \uacb0\uacfc \ubd84\uae30",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
440,
0
],
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "valid-check",
"leftValue": "={{ $json.valid }}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "equals"
}
}
],
"combinator": "and"
}
}
},
{
"id": "enrich-code",
"name": "\ub370\uc774\ud130 \ubcf4\uac15",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
660,
-100
],
"parameters": {
"jsCode": "// \ub370\uc774\ud130 \ubcf4\uac15: IPC \ucf54\ub4dc \ucd94\ucc9c, \ud0a4\uc6cc\ub4dc \ucd94\ucd9c\nconst data = $input.first().json.data;\n\n// \ud0a4\uc6cc\ub4dc \ucd94\ucd9c\nconst allText = `${data['\ubc1c\uba85\uc758 \uba85\uce6d']} ${data['\uae30\uc220\ubd84\uc57c']} ${data['\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c']}`;\nconst words = allText.split(/\\s+/);\nconst stopWords = ['\ubc0f', '\ub610\ub294', '\uc758', '\uc744', '\ub97c', '\uc774', '\uac00', '\uc740', '\ub294', '\uc5d0', '\ub85c', '\uc73c\ub85c', '\ud558\ub294', '\uc788\ub2e4', '\ub41c\ub2e4'];\nconst keywords = [...new Set(words)]\n .filter(w => w.length > 1 && !stopWords.includes(w))\n .slice(0, 10);\n\n// IPC \ucf54\ub4dc \ucd94\ucc9c\nconst ipcMap = {\n '\uc778\uacf5\uc9c0\ub2a5': 'G06N',\n '\uc790\uc5f0\uc5b4\ucc98\ub9ac': 'G06F 40',\n '\ud2b9\ud5c8': 'G06Q 50/18',\n '\uc790\ub3d9\ud654': 'G05B 19',\n '\ub525\ub7ec\ub2dd': 'G06N 3/08',\n '\uba38\uc2e0\ub7ec\ub2dd': 'G06N 20',\n '\ube14\ub85d\uccb4\uc778': 'G06F 21',\n '\ud074\ub77c\uc6b0\ub4dc': 'G06F 9',\n '\ubcf4\uc548': 'G06F 21',\n '\ub370\uc774\ud130': 'G06F 16'\n};\n\nconst technicalField = data['\uae30\uc220\ubd84\uc57c'] || '';\nconst suggestedIpc = [];\nfor (const [keyword, ipc] of Object.entries(ipcMap)) {\n if (technicalField.includes(keyword)) {\n suggestedIpc.push(ipc);\n }\n}\nif (suggestedIpc.length === 0) suggestedIpc.push('G06F');\n\n// \uba54\ud0c0\ub370\uc774\ud130 \ucd94\uac00\nconst submissionId = `INV-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\nconst enrichedData = {\n submission_id: submissionId,\n invention_title: data['\ubc1c\uba85\uc758 \uba85\uce6d'],\n technical_field: data['\uae30\uc220\ubd84\uc57c'],\n problem_to_solve: data['\ud574\uacb0\ud558\ub824\ub294 \uacfc\uc81c'],\n solution_description: data['\ubc1c\uba85\uc758 \ud575\uc2ec \uad6c\uc131'],\n advantages: data['\ubc1c\uba85\uc758 \ud6a8\uacfc'],\n applicant_name: data['\ucd9c\uc6d0\uc778'],\n inventor_name: data['\ubc1c\uba85\uc790'],\n keywords: keywords,\n suggested_ipc: suggestedIpc,\n submission_date: new Date().toISOString(),\n status: 'pending'\n};\n\nreturn [{ json: enrichedData }];"
}
},
{
"id": "set-output",
"name": "\ucd9c\ub825 \ub370\uc774\ud130 \uc124\uc815",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
880,
-100
],
"parameters": {
"mode": "manual",
"duplicateItem": false,
"assignments": {
"assignments": [
{
"id": "submission_id",
"name": "submission_id",
"value": "={{ $json.submission_id }}",
"type": "string"
},
{
"id": "invention_title",
"name": "invention_title",
"value": "={{ $json.invention_title }}",
"type": "string"
},
{
"id": "keywords",
"name": "keywords",
"value": "={{ $json.keywords }}",
"type": "array"
},
{
"id": "suggested_ipc",
"name": "suggested_ipc",
"value": "={{ $json.suggested_ipc }}",
"type": "array"
},
{
"id": "status",
"name": "status",
"value": "submitted",
"type": "string"
}
]
},
"includeOtherFields": true
}
},
{
"id": "error-response",
"name": "\uc624\ub958 \uc751\ub2f5",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
660,
100
],
"parameters": {
"mode": "manual",
"duplicateItem": false,
"assignments": {
"assignments": [
{
"id": "success",
"name": "success",
"value": false,
"type": "boolean"
},
{
"id": "message",
"name": "message",
"value": "\uc785\ub825 \ub370\uc774\ud130 \uac80\uc99d\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.",
"type": "string"
},
{
"id": "errors",
"name": "errors",
"value": "={{ $json.errors }}",
"type": "array"
}
]
}
}
},
{
"id": "convert-to-json-file",
"name": "JSON \ud30c\uc77c \ubcc0\ud658",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1100,
-100
],
"parameters": {
"jsCode": "// \ubc1c\uba85 \uc81c\uc548\uc11c\ub97c JSON \ud30c\uc77c\ub85c \ubcc0\ud658\nconst data = $input.first().json;\n\n// Patent ID \uc0dd\uc131\nconst patentId = `PAT-${String(Date.now()).slice(-6)}`;\n\nconst proposalData = {\n patent_id: patentId,\n submission_id: data.submission_id,\n invention_title: data.invention_title,\n technical_field: data.technical_field,\n problem_to_solve: data.problem_to_solve,\n solution_description: data.solution_description,\n advantages: data.advantages,\n applicant_name: data.applicant_name,\n inventor_name: data.inventor_name,\n keywords: data.keywords,\n suggested_ipc: data.suggested_ipc,\n submission_date: data.submission_date,\n status: 'generating'\n};\n\n// Buffer\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc62c\ubc14\ub978 binary \ub370\uc774\ud130 \uc0dd\uc131\nconst jsonString = JSON.stringify(proposalData, null, 2);\nconst binaryData = Buffer.from(jsonString, 'utf-8');\n\nreturn [{\n json: proposalData,\n binary: {\n data: {\n data: binaryData.toString('base64'),\n mimeType: 'application/json',\n fileName: `\ubc1c\uba85\uc81c\uc548\uc11c_${patentId}.json`\n }\n }\n}];"
}
},
{
"id": "google-drive-upload",
"name": "Google Drive \uc5c5\ub85c\ub4dc (\ubc1c\uba85\uc81c\uc548\uc11c)",
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
1320,
-100
],
"parameters": {
"operation": "upload",
"folderId": {
"__rl": true,
"value": "={{ $vars.GOOGLE_DRIVE_PROPOSAL_FOLDER_ID }}",
"mode": "id"
},
"name": "=\ubc1c\uba85\uc81c\uc548\uc11c_{{ $json.patent_id }}_{{ $now.format('yyyyMMdd') }}.json",
"options": {
"mimeType": "application/json"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"id": "google-sheets-append",
"name": "Google Sheets \uc800\uc7a5 (\uba54\ud0c0\ub370\uc774\ud130)",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
1540,
-100
],
"parameters": {
"operation": "appendOrUpdate",
"documentId": {
"__rl": true,
"value": "={{ $vars.GOOGLE_SHEETS_TRACKING_ID }}",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "\uc81c\ucd9c\uc774\ub825",
"mode": "name"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Patent ID": "={{ $json.patent_id }}",
"\ubc1c\uba85 \uba85\uce6d": "={{ $json.invention_title }}",
"\ubc1c\uba85\uc790": "={{ $json.inventor_name }}",
"\uc18c\uc18d": "={{ $json.applicant_name }}",
"\uae30\uc220\ubd84\uc57c": "={{ $json.technical_field }}",
"\ud0a4\uc6cc\ub4dc": "={{ $json.keywords.join(', ') }}",
"\uc0c1\ud0dc": "generating",
"\uc81c\ucd9c\uc77c": "={{ $now.format('yyyy-MM-dd') }}",
"\ubc1c\uba85\uc81c\uc548\uc11c URL": "={{ $('Google Drive \uc5c5\ub85c\ub4dc (\ubc1c\uba85\uc81c\uc548\uc11c)').item.json.webViewLink }}"
}
},
"options": {}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"id": "set-output-with-urls",
"name": "URL \ud3ec\ud568 \ucd9c\ub825 \uc124\uc815",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1760,
-100
],
"parameters": {
"mode": "manual",
"duplicateItem": false,
"assignments": {
"assignments": [
{
"id": "drive_url",
"name": "drive_url",
"value": "={{ $('Google Drive \uc5c5\ub85c\ub4dc (\ubc1c\uba85\uc81c\uc548\uc11c)').item.json.webViewLink }}",
"type": "string"
},
{
"id": "sheets_row",
"name": "sheets_row",
"value": "={{ $('Google Sheets \uc800\uc7a5 (\uba54\ud0c0\ub370\uc774\ud130)').item.json.updates.updatedRows }}",
"type": "number"
}
]
},
"includeOtherFields": true
}
},
{
"id": "call-wf02",
"name": "WF02 \uc120\ud589\uae30\uc220\uac80\uc0c9 \ud638\ucd9c",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1980,
-100
],
"parameters": {
"method": "POST",
"url": "https://mai-n8n.app.n8n.cloud/webhook/wf02-prior-art-search",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify($json) }}",
"options": {}
}
},
{
"id": "webhook-response-success",
"name": "Webhook \uc131\uacf5 \uc751\ub2f5",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
2200,
-100
],
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: true, patent_id: $('JSON \ud30c\uc77c \ubcc0\ud658').item.json.patent_id, submission_id: $('JSON \ud30c\uc77c \ubcc0\ud658').item.json.submission_id, message: '\ubc1c\uba85\uc81c\uc548\uc11c\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc81c\ucd9c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.', drive_url: $('Google Drive \uc5c5\ub85c\ub4dc (\ubc1c\uba85\uc81c\uc548\uc11c)').item.json.webViewLink } }}",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Access-Control-Allow-Origin",
"value": "*"
}
]
}
}
}
},
{
"id": "webhook-response-error",
"name": "Webhook \uc624\ub958 \uc751\ub2f5",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
880,
100
],
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: false, message: '\uc785\ub825 \ub370\uc774\ud130 \uac80\uc99d\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.', errors: $json.errors } }}",
"options": {
"responseCode": 400,
"responseHeaders": {
"entries": [
{
"name": "Access-Control-Allow-Origin",
"value": "*"
}
]
}
}
}
}
],
"connections": {
"\ubc1c\uba85\uc81c\uc548\uc11c Form": {
"main": [
[
{
"node": "\ub370\uc774\ud130 \uac80\uc99d",
"type": "main",
"index": 0
}
]
]
},
"API Webhook": {
"main": [
[
{
"node": "Webhook \ub370\uc774\ud130 \uc815\uaddc\ud654",
"type": "main",
"index": 0
}
]
]
},
"Webhook \ub370\uc774\ud130 \uc815\uaddc\ud654": {
"main": [
[
{
"node": "\ub370\uc774\ud130 \uac80\uc99d",
"type": "main",
"index": 0
}
]
]
},
"\ub370\uc774\ud130 \uac80\uc99d": {
"main": [
[
{
"node": "\uac80\uc99d \uacb0\uacfc \ubd84\uae30",
"type": "main",
"index": 0
}
]
]
},
"\uac80\uc99d \uacb0\uacfc \ubd84\uae30": {
"main": [
[
{
"node": "\ub370\uc774\ud130 \ubcf4\uac15",
"type": "main",
"index": 0
}
],
[
{
"node": "\uc624\ub958 \uc751\ub2f5",
"type": "main",
"index": 0
}
]
]
},
"\ub370\uc774\ud130 \ubcf4\uac15": {
"main": [
[
{
"node": "\ucd9c\ub825 \ub370\uc774\ud130 \uc124\uc815",
"type": "main",
"index": 0
}
]
]
},
"\ucd9c\ub825 \ub370\uc774\ud130 \uc124\uc815": {
"main": [
[
{
"node": "JSON \ud30c\uc77c \ubcc0\ud658",
"type": "main",
"index": 0
}
]
]
},
"JSON \ud30c\uc77c \ubcc0\ud658": {
"main": [
[
{
"node": "Google Drive \uc5c5\ub85c\ub4dc (\ubc1c\uba85\uc81c\uc548\uc11c)",
"type": "main",
"index": 0
}
]
]
},
"Google Drive \uc5c5\ub85c\ub4dc (\ubc1c\uba85\uc81c\uc548\uc11c)": {
"main": [
[
{
"node": "Google Sheets \uc800\uc7a5 (\uba54\ud0c0\ub370\uc774\ud130)",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets \uc800\uc7a5 (\uba54\ud0c0\ub370\uc774\ud130)": {
"main": [
[
{
"node": "URL \ud3ec\ud568 \ucd9c\ub825 \uc124\uc815",
"type": "main",
"index": 0
}
]
]
},
"URL \ud3ec\ud568 \ucd9c\ub825 \uc124\uc815": {
"main": [
[
{
"node": "WF02 \uc120\ud589\uae30\uc220\uac80\uc0c9 \ud638\ucd9c",
"type": "main",
"index": 0
}
]
]
},
"WF02 \uc120\ud589\uae30\uc220\uac80\uc0c9 \ud638\ucd9c": {
"main": [
[
{
"node": "Webhook \uc131\uacf5 \uc751\ub2f5",
"type": "main",
"index": 0
}
]
]
},
"\uc624\ub958 \uc751\ub2f5": {
"main": [
[
{
"node": "Webhook \uc624\ub958 \uc751\ub2f5",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1",
"callerPolicy": "workflowsFromSameOwner"
},
"meta": {
"version": "1.2.0",
"created": "2026-01-10",
"updated": "2026-01-13",
"project": "MAIPatent",
"workflow_sequence": 1,
"next_workflow": "WF02-prior-art-search",
"trigger_connection": "HTTP Request to WF02 Webhook"
}
}
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.
googleDriveOAuth2ApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
WF01-발명제안서입력. Uses formTrigger, googleDrive, googleSheets, httpRequest. Event-driven trigger; 15 nodes.
Source: https://github.com/jini92/MAIPatent/blob/c9040f7443cbcd6380a646aa203f93d3b4f15767/workflows/WF01-invention-input.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.
Description: The Spotify Music Downloader is an automation flow that allows users to easily download music from Spotify tracks. By leveraging the powerful Spotify Downloader API, the flow downloads Sp
n8n can indeed help to solve this challenge by providing the data input interface via its forms and orchestrate AI-powered classification of images using AI nodes. However, in some cases - say you run
Automate downloading Threads videos from URLs, upload them to Google Drive, and log results in Google Sheets using n8n.
Description: This n8n workflow automates the process of downloading videos from any supported platform (like LinkedIn, Facebook, or Instagram) using the RapidAPI best All-In-One Video Downloader. It t
📝 On Form Submission → Displays a form for users to input the Slideshare URL. 🌐 Slideshare Downloader → Sends the submitted URL to the Slideshare Downloader Pro API to fetch a downloadable PDF link. ✅