{ "nodes": [ { "id": "76f6b074-32a5-4419-aa0f-80505b3a31ad", "name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [ 20, 240 ], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow." }, { "id": "42289f01-3af9-4bc3-babb-54b983de7e77", "name": "Search Salesforce accounts", "type": "n8n-nodes-base.salesforce", "position": [ 680, 240 ], "parameters": { "query": "=SELECT id, Name FROM Account WHERE Name = '{{$json[\"Company Name\"].replace(/'/g, '\\\\\\'')}}'", "resource": "search" }, "credentials": { "salesforceOAuth2Api": { "id": "{{ $credentials.salesforceOAuth2Api.id }}", "name": "Salesforce account" } }, "typeVersion": 1, "alwaysOutputData": false, "notes": "This salesforce node performs automated tasks as part of the workflow." }, { "id": "954ef43f-4dc1-4955-9c56-c5d11bcd5d6e", "name": "Keep new companies", "type": "n8n-nodes-base.merge", "position": [ 900, 40 ], "parameters": { "mode": "removeKeyMatches", "propertyName1": "Company Name", "propertyName2": "Name" }, "typeVersion": 1, "notes": "This merge node performs automated tasks as part of the workflow." }, { "id": "ec23bd4f-c6ee-4c2a-a352-8ff521a5ddf6", "name": "Merge existing account data", "type": "n8n-nodes-base.merge", "position": [ 900, 440 ], "parameters": { "mode": "mergeByKey", "propertyName1": "Company Name", "propertyName2": "Name" }, "typeVersion": 1, "notes": "This merge node performs automated tasks as part of the workflow." }, { "id": "85b460ee-e6b4-48c8-8315-ccf7875ec345", "name": "Account found?", "type": "n8n-nodes-base.if", "position": [ 1120, 440 ], "parameters": { "conditions": { "string": [ { "value1": "={{ $json[\"Id\"] }}", "operation": "isNotEmpty" } ] } }, "typeVersion": 1, "notes": "This if node performs automated tasks as part of the workflow." }, { "id": "1c926f04-b218-4460-8a56-c39a0854d50e", "name": "Remove duplicate companies", "type": "n8n-nodes-base.itemLists", "position": [ 1120, 140 ], "parameters": { "compare": "selectedFields", "options": {}, "operation": "removeDuplicates", "fieldsToCompare": { "fields": [ { "fieldName": "Company Name" } ] } }, "typeVersion": 1, "notes": "This itemLists node performs automated tasks as part of the workflow." }, { "id": "d35c3b0b-d7a8-4182-9277-17080655436b", "name": "Set Account ID for existing accounts", "type": "n8n-nodes-base.renameKeys", "position": [ 1340, 440 ], "parameters": { "keys": { "key": [ { "newKey": "{{ $credentials.newKey }}", "currentKey": "{{ $credentials.currentKey }}" } ] }, "additionalOptions": {} }, "typeVersion": 1, "notes": "This renameKeys node performs automated tasks as part of the workflow." }, { "id": "3747fdfa-f5f8-41b0-8393-1ac2ae29bab5", "name": "Retrieve new company contacts", "type": "n8n-nodes-base.merge", "position": [ 1780, 40 ], "parameters": { "mode": "mergeByKey", "propertyName1": "Company Name", "propertyName2": "Name" }, "typeVersion": 1, "notes": "This merge node performs automated tasks as part of the workflow." }, { "id": "0879e6a0-d782-4a0a-98f3-eeccbea760f6", "name": "Set new account name", "type": "n8n-nodes-base.set", "position": [ 1560, 140 ], "parameters": { "values": { "string": [ { "name": "id", "value": "={{ $json[\"id\"] }}" }, { "name": "Name", "value": "={{ $node[\"Remove duplicate companies\"].json[\"Company Name\"] }}" } ] }, "options": {}, "keepOnlySet": true }, "typeVersion": 1, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "7263c4dd-64eb-44c4-9839-fe3e5aa7ddbc", "name": "Create Salesforce account", "type": "n8n-nodes-base.salesforce", "position": [ 1340, 140 ], "parameters": { "name": "={{ $json[\"Company Name\"] }}", "resource": "account", "additionalFields": {} }, "credentials": { "salesforceOAuth2Api": { "id": "{{ $credentials.salesforceOAuth2Api.id }}", "name": "Salesforce account" } }, "typeVersion": 1, "notes": "This salesforce node performs automated tasks as part of the workflow." }, { "id": "40d168af-346a-46ea-9fa0-641edd0f4937", "name": "Create Salesforce contact", "type": "n8n-nodes-base.salesforce", "position": [ 2000, 240 ], "parameters": { "lastname": "={{ $json[\"Last Name\"] }}", "resource": "contact", "operation": "upsert", "externalId": "Email", "externalIdValue": "={{ $json[\"Email\"] }}", "additionalFields": { "email": "={{ $json[\"Email\"] }}", "firstName": "={{ $json[\"First Name\"] }}", "acconuntId": "={{ $json[\"Account ID\"] }}" } }, "credentials": { "salesforceOAuth2Api": { "id": "{{ $credentials.salesforceOAuth2Api.id }}", "name": "Salesforce account" } }, "typeVersion": 1, "notes": "This salesforce node performs automated tasks as part of the workflow." }, { "id": "dcd40640-c1d6-407c-95c9-84759ecaafab", "name": "Note", "type": "n8n-nodes-base.stickyNote", "position": [ -20, 0 ], "parameters": { "width": 400, "height": 400, "content": "## Downloading a file\nIn this example workflow, the spreadsheet file is downloaded from an HTTP location.\n\nDepending on your scenario you might want to swap the HTTP Request node downloading the file with another node fetching the file from another source (such as an FTP service, cloud storage, your local filesystem or an email for example)." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "2fc38a06-11ec-4aa5-83f9-624f5a5ef47a", "name": "Download file", "type": "n8n-nodes-base.httpRequest", "position": [ 240, 240 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {}, "responseFormat": "file" }, "typeVersion": 2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "43d5ba55-d150-4c7e-b44a-531733418c68", "name": "Spreadsheet File", "type": "n8n-nodes-base.spreadsheetFile", "position": [ 460, 240 ], "parameters": { "options": {} }, "typeVersion": 1, "notes": "This spreadsheetFile node performs automated tasks as part of the workflow." } ], "connections": { "2fc38a06-11ec-4aa5-83f9-624f5a5ef47a": { "main": [ [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-547b5543", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-18d3595d", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-90a07ec0", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-da915139", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-479383e9", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-c794e2cb", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-e8065b5b", "type": "main", "index": 0 } ], [ { "node": "error-handler-2fc38a06-11ec-4aa5-83f9-624f5a5ef47a-1134d44c", "type": "main", "index": 0 } ] ] }, "43d5ba55-d150-4c7e-b44a-531733418c68": { "main": [ [ { "node": "error-handler-43d5ba55-d150-4c7e-b44a-531733418c68-0d668ac8", "type": "main", "index": 0 } ] ] } }, "name": "Manualtrigger Workflow", "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "description": "Automated workflow: Manualtrigger Workflow. This workflow integrates 11 different services: itemLists, salesforce, stickyNote, httpRequest, spreadsheetFile. It contains 17 nodes and follows best practices for error handling and security.", "meta": { "instanceId": "workflow-f6471bea", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:48.785015", "updatedAt": "2025-09-29T07:07:48.785063", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "notes": "Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }