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 →
{
"nodes": [
{
"id": "29451054-fcd6-4054-b072-a87c716f6c67",
"name": "On clicking 'execute'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
240,
240
],
"parameters": {},
"typeVersion": 1
},
{
"id": "995ae9b0-130c-4989-8e94-81a14b7743c4",
"name": "Read Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
460,
240
],
"parameters": {
"options": {},
"sheetId": "1cz-4tVi7Nn3j1gh147hROq9l6S4ta06sMfhm2AAI6js"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "2c1ed019-85f1-4b0f-bcf5-ce59ff13ea49",
"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": {
"name": "<your credential>"
}
},
"typeVersion": 1,
"alwaysOutputData": false
},
{
"id": "c6978a27-3cdc-44a2-a961-94557b2aed88",
"name": "Keep new companies",
"type": "n8n-nodes-base.merge",
"position": [
900,
40
],
"parameters": {
"mode": "removeKeyMatches",
"propertyName1": "Company Name",
"propertyName2": "Name"
},
"typeVersion": 1
},
{
"id": "7b5df5cf-7019-415b-9758-7f62c4fb13c8",
"name": "Merge existing account data",
"type": "n8n-nodes-base.merge",
"position": [
900,
440
],
"parameters": {
"mode": "mergeByKey",
"propertyName1": "Company Name",
"propertyName2": "Name"
},
"typeVersion": 1
},
{
"id": "7da1de2f-2b37-4e33-b8d4-d1dc59e94bbe",
"name": "Account found?",
"type": "n8n-nodes-base.if",
"position": [
1120,
440
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json[\"Id\"] }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "80890a2a-f6d3-4efd-92b1-6465f98f512b",
"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
},
{
"id": "ea9afa15-77be-4d7a-a287-35d4c1c6e6c1",
"name": "Set Account ID for existing accounts",
"type": "n8n-nodes-base.renameKeys",
"position": [
1340,
440
],
"parameters": {
"keys": {
"key": [
{
"newKey": "Account ID",
"currentKey": "Id"
}
]
},
"additionalOptions": {}
},
"typeVersion": 1
},
{
"id": "61cfdf30-9135-40bf-929d-317fca0ad474",
"name": "Retrieve new company contacts",
"type": "n8n-nodes-base.merge",
"position": [
1780,
40
],
"parameters": {
"mode": "mergeByKey",
"propertyName1": "Company Name",
"propertyName2": "Name"
},
"typeVersion": 1
},
{
"id": "c10dea7c-96b0-4f3b-b859-af094ced51cc",
"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
},
{
"id": "a4a2be2a-7bd9-4a70-b4d9-0df53834bdda",
"name": "Create Salesforce account",
"type": "n8n-nodes-base.salesforce",
"position": [
1340,
140
],
"parameters": {
"name": "={{ $json[\"Company Name\"] }}",
"resource": "account",
"additionalFields": {}
},
"credentials": {
"salesforceOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "89f49e6f-62be-403f-9a4c-cd56e28141f3",
"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": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"connections": {
"Account found?": {
"main": [
[
{
"node": "Set Account ID for existing accounts",
"type": "main",
"index": 0
}
]
]
},
"Read Google Sheet": {
"main": [
[
{
"node": "Search Salesforce accounts",
"type": "main",
"index": 0
},
{
"node": "Keep new companies",
"type": "main",
"index": 0
},
{
"node": "Merge existing account data",
"type": "main",
"index": 0
}
]
]
},
"Keep new companies": {
"main": [
[
{
"node": "Remove duplicate companies",
"type": "main",
"index": 0
},
{
"node": "Retrieve new company contacts",
"type": "main",
"index": 0
}
]
]
},
"Set new account name": {
"main": [
[
{
"node": "Retrieve new company contacts",
"type": "main",
"index": 1
}
]
]
},
"On clicking 'execute'": {
"main": [
[
{
"node": "Read Google Sheet",
"type": "main",
"index": 0
}
]
]
},
"Create Salesforce account": {
"main": [
[
{
"node": "Set new account name",
"type": "main",
"index": 0
}
]
]
},
"Remove duplicate companies": {
"main": [
[
{
"node": "Create Salesforce account",
"type": "main",
"index": 0
}
]
]
},
"Search Salesforce accounts": {
"main": [
[
{
"node": "Keep new companies",
"type": "main",
"index": 1
},
{
"node": "Merge existing account data",
"type": "main",
"index": 1
}
]
]
},
"Merge existing account data": {
"main": [
[
{
"node": "Account found?",
"type": "main",
"index": 0
}
]
]
},
"Retrieve new company contacts": {
"main": [
[
{
"node": "Create Salesforce contact",
"type": "main",
"index": 0
}
]
]
},
"Set Account ID for existing accounts": {
"main": [
[
{
"node": "Create Salesforce contact",
"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.
googleSheetsOAuth2ApisalesforceOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow streamlines the process of syncing new company data from a Google Sheet into Salesforce, saving hours of manual data entry and reducing errors for sales teams managing leads. It identifies fresh accounts not already in your CRM, updates existing ones with the latest details, and ensures clean records without duplicates. Ideal for small to medium businesses or sales operations handling regular spreadsheet imports, it leverages Google Sheets for easy data input and Salesforce for robust account management, with a simple manual trigger to start the chain whenever you're ready.
Use this workflow when you receive occasional CSV exports or manual lists of companies to add or update in Salesforce, such as after networking events or lead generation campaigns. Avoid it for high-volume or real-time automations, where a scheduled or webhook trigger would be more efficient. Common variations include adding email notifications for completion or integrating with tools like HubSpot for multi-CRM syncing.
About this workflow
Manual Googlesheets. Uses manualTrigger, googleSheets, salesforce, itemLists. Event-driven trigger; 12 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
This workflow shows a no code approach to creating Salesforce accounts and contacts based on data coming from Google Sheets.
TrackCollect_deeper. Uses googleSheets, httpRequest, @n-octo-n/n8n-nodes-json-database, itemLists. Event-driven trigger; 80 nodes.
PCN. Uses googleSheets, httpRequest, @n-octo-n/n8n-nodes-json-database, itemLists. Event-driven trigger; 60 nodes.
This workflow allows to scrape Google Maps data in an efficient way using SerpAPI.
Manual Http. Uses manualTrigger, salesforce, itemLists, renameKeys. Event-driven trigger; 14 nodes.