Workflow: Form with Dynamic Dropdown Field
Integrations: code, executeWorkflow, formTrigger, googleSheets, googleSheetsTrigger, n8n, set, stickyNote, stopAndError

{"id": "RKbQHfblpcvMGZ4w", "meta": {"instanceId": "workflow-434d08cb", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:43.474920", "updatedAt": "2025-09-29T07:07:43.474984", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Form with Dynamic Dropdown Field", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "aa627a35-9bea-4c07-b7e7-26f048564443", "name": "n8n | get wf", "type": "n8n-nodes-base.n8n", "position": [540, -180], "parameters": {"operation": "get", "workflowId": {"__rl": true, "mode": "id", "value": "={{ $workflow.id }}"}, "requestOptions": {}}, "credentials": {"n8nApi": {"id": "us0k8UE7R2MZPFBK", "name": "n8n account"}}, "typeVersion": 1, "notes": "This n8n node performs automated tasks as part of the workflow."}, {"id": "902a8e45-f4b4-469c-96a6-80002de5f6dc", "name": "n8n | update", "type": "n8n-nodes-base.n8n", "position": [1060, -180], "parameters": {"operation": "update", "workflowId": {"__rl": true, "mode": "id", "value": "={{ $json.id }}"}, "requestOptions": {}, "workflowObject": "={{ JSON.stringify($json) }}"}, "credentials": {"n8nApi": {"id": "us0k8UE7R2MZPFBK", "name": "n8n account"}}, "typeVersion": 1, "notes": "This n8n node performs automated tasks as part of the workflow."}, {"id": "3e9e5c16-0080-4cba-8a8a-8f24f7266fcb", "name": "On form submission", "type": "n8n-nodes-base.formTrigger", "position": [40, -620], "webhookId": "3e975d29-df26-49fb-8dcf-abe8fe8bc4e6", "parameters": {"options": {}, "formTitle": "Example Title", "formFields": {"values": [{"fieldLabel": "Example text field"}, {"fieldType": "dropdown", "fieldLabel": "Example dropdown", "fieldOptions": {"values": [{"option": "test publieke ruimtes"}, {"option": "Demonstraties"}, {"option": "Demonstraties"}, {"option": "Juridisch medewerker IE-recht  Streetlife"}, {"option": "Bamboe"}, {"option": "Klaar?"}, {"option": "Dannu?"}]}}]}}, "typeVersion": 2.2, "notes": "This formTrigger node performs automated tasks as part of the workflow."}, {"id": "0b874994-c123-44f8-b0f5-0b365b57d945", "name": "Google Sheets Trigger", "type": "n8n-nodes-base.googleSheetsTrigger", "position": [-460, -180], "parameters": {"options": {}, "pollTimes": {"item": [{"mode": "everyMinute"}]}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Blad1"}, "documentId": {"__rl": true, "mode": "list", "value": "1F73a7uuzLAq916w2JFndumv0JhnCAvOTN-Cn_OOP3uA", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "obsidian-n8n"}, "includeInOutput": "both"}, "credentials": {"googleSheetsTriggerOAuth2Api": {"id": "FV58wiwivBMosfix", "name": "Google Sheets Trigger account"}}, "typeVersion": 1, "notes": "This googleSheetsTrigger node performs automated tasks as part of the workflow."}, {"id": "4c9bfed8-a758-40b9-9c74-53bedc1d1aa3", "name": "Execute Workflow", "type": "n8n-nodes-base.executeWorkflow", "position": [240, -620], "parameters": {"options": {}, "workflowId": {"__rl": true, "mode": "id", "value": "={{ $workflow.id }}"}}, "typeVersion": 1.1, "notes": "This executeWorkflow node performs automated tasks as part of the workflow."}, {"id": "6e9d4a5a-9583-4b61-aea1-dd4892230e7c", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-520, -660], "parameters": {"width": 960, "height": 240, "content": "## Form setup\n\n- Customize your form fields. \n- The dropdown field will auto-update with values from your data source. \n- Other form fields can be added as needed (limited to one dropdown field).\n- Connect to your workflow that processes the submitted form data.\n\n### Form requires production mode for testing"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "41c364f4-5b1f-42fd-841b-a6f99b585804", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-520, -400], "parameters": {"width": 440, "height": 400, "content": "## Data source setup\n\n- Connect to your Google Sheet containing dropdown values\n- Node can be replaced with any other data source (API, database)\n- Set timing trigger"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "cda8f803-1773-4df7-90b9-4d8cd0469cd8", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [-60, -400], "parameters": {"width": 260, "height": 400, "content": "## Data formatting\n\n- Extracts needed data from source\n- Renames field to 'value' (do not change this name)"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "e9594ad1-3bb8-4da6-95b3-cb610a17c1bb", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [220, -400], "parameters": {"height": 400, "content": "## Nested properties\n\n- Transforms the data to the desired format"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "806a2502-5c6c-435c-a20e-8ca0eee92822", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [480, -400], "parameters": {"height": 400, "content": "## Get Workflow \n\n- Gets the current workflow data"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "385c3e64-9893-4e3f-b789-abbf079fa8b1", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [740, -400], "parameters": {"height": 400, "content": "## Add Dropdown Values \n- Replaces the nested parameters of the Dropdown Form Field with the nested properties sourced from the data."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f43324fc-6790-445b-a72b-ae4afb051101", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [1000, -400], "parameters": {"height": 400, "content": "## Update Form \n\n- Replaces the current workflow\u2019s JSON with the updated JSON containing the new Dropdown values."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "317694bd-590f-4eb4-a53f-f4d5d2d1ab16", "name": "Write JSON", "type": "n8n-nodes-base.code", "position": [280, -180], "parameters": {"jsCode": "const inputArray = items.map(item => item.json);\n\nconst output = [\n  {\n    nodes: [\n      {\n        parameters: {\n          formFields: {\n            values: [\n              {\n                fieldOptions: {\n                  values: inputArray.map(entry => ({ option: entry.value }))\n                }\n              }\n            ]\n          }\n        }\n      }\n    ]\n  }\n];\n\n// Return the transformed output\nreturn output.map(item => ({ json: item }));"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "08b3c0b3-3df3-40d9-80ce-bd7c763fdbdb", "name": "Replace values", "type": "n8n-nodes-base.set", "position": [820, -180], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "38ef2b43-b903-4e96-b098-9da2d8c1c153", "name": "={{ \n   (() => {\n      const nodeIndex = $json.nodes.findIndex(\n         node => node.parameters?.formFields?.values.some(\n            value => value.fieldType === 'dropdown' && value.fieldOptions?.values\n         )\n      );\n\n      if (nodeIndex === -1) return 'No matching node found';\n\n      const valueIndex = $json.nodes[nodeIndex].parameters.formFields.values.findIndex(\n         value => value.fieldType === 'dropdown' && value.fieldOptions?.values\n      );\n\n      if (valueIndex === -1) return `nodes[${nodeIndex}].parameters.formFields.values - No matching dropdown value found`;\n\n      return `nodes[${nodeIndex}].parameters.formFields.values[${valueIndex}].fieldOptions.values`;\n   })()\n}}", "type": "array", "value": "={{ $('Write JSON').item.json.nodes[0].parameters.formFields.values[0].fieldOptions.values }}"}]}, "includeOtherFields": true}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "07635565-f8ea-4fac-b93c-069fbe065ce8", "name": "Get all values", "type": "n8n-nodes-base.googleSheets", "position": [-240, -180], "parameters": {"options": {}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Blad1"}, "documentId": {"__rl": true, "mode": "list", "value": "1F73a7uuzLAq916w2JFndumv0JhnCAvOTN-Cn_OOP3uA", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "obsidian-n8n"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "3Pu0wlfxgNYzVqY6", "name": "Google Sheets account"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "9ce7bf73-211a-4f5b-b39d-81a2d513a3ef", "name": "Format to 'values'", "type": "n8n-nodes-base.set", "position": [20, -180], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "e18aa12e-f277-4257-ba27-9262cc7b866a", "name": "value", "type": "string", "value": "={{ $json.title }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "error-7ca63492", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": true, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "d69a3011-97a6-44e9-9b7e-c8e9a248964a", "connections": {"0b874994-c123-44f8-b0f5-0b365b57d945": {"main": [[{"node": "error-handler-0b874994-c123-44f8-b0f5-0b365b57d945-10cbba97", "type": "main", "index": 0}]]}, "07635565-f8ea-4fac-b93c-069fbe065ce8": {"main": [[{"node": "error-handler-07635565-f8ea-4fac-b93c-069fbe065ce8-6076147f", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Form with Dynamic Dropdown Field. This workflow integrates 9 different services: stickyNote, formTrigger, googleSheetsTrigger, code, n8n. It contains 18 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Form with Dynamic Dropdown Field. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}