This workflow corresponds to n8n.io template #13277 — we link there as the canonical source.
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 →
{
"id": "En7pWb2RKeMpoenb",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "(Retail) Shopify to CRM Contact Sync",
"tags": [],
"nodes": [
{
"id": "d5a45ed7-4e37-4261-91a3-9193a27c347a",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
-2560,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "minOrderValueForHighValueTag",
"type": "number",
"value": 500
},
{
"id": "id-2",
"name": "lifetimeSpendThreshold",
"type": "number",
"value": 1000
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "b363f35a-c792-463c-89ec-a7d65a964c84",
"name": "Extract Customer Data",
"type": "n8n-nodes-base.set",
"position": [
-2000,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-5",
"name": "orderTotal",
"type": "number",
"value": "={{ $json.total_price || 0 }}"
},
{
"id": "id-6",
"name": "orderCount",
"type": "number",
"value": "={{ $json.customer?.orders_count || 1 }}"
},
{
"id": "id-7",
"name": "lifetimeSpend",
"type": "number",
"value": "={{ $json.customer?.total_spent || $json.total_price || 0 }}"
},
{
"id": "id-8",
"name": "customerTags",
"type": "string",
"value": "={{ $json.customer?.tags || '' }}"
},
{
"id": "id-9",
"name": "isHighValue",
"type": "boolean",
"value": "={{ ($json.total_price || 0) >= $('Workflow Configuration').first().json.minOrderValueForHighValueTag }}"
},
{
"id": "id-10",
"name": "shopifyCustomerId",
"type": "string",
"value": "={{ $json.customer?.id || $json.id }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "dbba9633-e915-40c8-8346-86c5a965b9cf",
"name": "Search for Existing Contact",
"type": "n8n-nodes-base.zohoCrm",
"position": [
-1760,
224
],
"parameters": {
"limit": 2,
"options": {
"fields": [
"Email"
]
},
"resource": "contact",
"operation": "getAll"
},
"credentials": {
"zohoOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "82fb867d-c567-4b7f-95d6-c9f10b730a19",
"name": "Create New Contact",
"type": "n8n-nodes-base.zohoCrm",
"position": [
-576,
336
],
"parameters": {
"lastName": "={{ $('Extract Customer Data').item.json.fulfillments[0].line_items[0].name }}",
"resource": "contact",
"additionalFields": {}
},
"credentials": {
"zohoOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "1b1965a3-58e5-4dc8-8ade-7d0f2710997f",
"name": "Update Existing Contact",
"type": "n8n-nodes-base.zohoCrm",
"position": [
-592,
160
],
"parameters": {
"resource": "contact",
"contactId": "={{ $json.id }}",
"operation": "update",
"updateFields": {
"customFields": {
"customFields": [
{
"value": "={{ $('Extract Customer Data').item.json.lifetimeSpend }}",
"fieldId": "Engagement_Score"
},
{
"value": "={{ $('Extract Customer Data').item.json.orderCount }}",
"fieldId": "Mentions_Counts"
}
]
}
}
},
"credentials": {
"zohoOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "73054692-cac3-42ac-98e9-8d54b58905f5",
"name": "Contact Exists?",
"type": "n8n-nodes-base.if",
"position": [
-1088,
224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c4a2aef2-89cc-4de4-bca6-8a7e99de0e03",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $('Search for Existing Contact').item.json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "05d8bd07-acc2-4f3d-a73b-1b6ab147c9c1",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3632,
-96
],
"parameters": {
"width": 496,
"height": 688,
"content": "# How It Works\n### This workflow automates the synchronization of Shopify customer activity with Zoho CRM, ensuring sales and support teams have up-to-date purchase history and engagement metrics.\n\n# Setup Steps\n## Trigger\nConfigure the Shopify Trigger node with your store's Access Token and set the topic to `customers/create` or `orders/create`.\n\n## Connections\nLink credentials for Shopify (source) and Zoho CRM (destination).\n\n## Configuration\nDefine your high-value customer thresholds (e.g., Min Order Value: 500) in the configuration node to automate customer segmentation.\n\n## Intelligence Sync\nThe system automatically checks if a contact exists in Zoho. If they do, it updates their lifetime spend and order count; if not, it creates a new record."
},
"typeVersion": 1
},
{
"id": "7cbd833f-746c-4c43-ab71-4cd60ed3719e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2992,
16
],
"parameters": {
"color": 7,
"width": 720,
"height": 496,
"content": "## Shopify Trigger & Set Configuration\nThe process begins with a Shopify Trigger listening for new customers or orders created in your store. This is followed by a Workflow Configuration node that establishes global operational parameters, such as the minimum order value required for high-value tagging and lifetime spend thresholds.\n"
},
"typeVersion": 1
},
{
"id": "4a116ce9-7419-4e8a-af5b-7f486b7857ef",
"name": "Trigger on New Customer or Order",
"type": "n8n-nodes-base.shopifyTrigger",
"position": [
-2800,
224
],
"parameters": {
"topic": "customers/create",
"authentication": "accessToken"
},
"credentials": {
"shopifyAccessTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "8eadec49-e00a-49b9-8070-a6037b7df313",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2208,
16
],
"parameters": {
"color": 7,
"width": 784,
"height": 496,
"content": "## Data Extraction & CRM Search\nThis stage processes the raw shopify data by using the Extract Customer Data node to calculate key engagement metrics, such as lifetime spend, order frequency and high-value customer status. These details are then passed to the Search for Existing Contact node, which queries Zoho CRM to check if the customer already exists in your database, ensuring that activity is recorded against the correct profile without creating duplicates.\n"
},
"typeVersion": 1
},
{
"id": "95c533aa-cf89-452f-bf0c-394da380a60c",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1360,
16
],
"parameters": {
"color": 7,
"width": 1072,
"height": 496,
"content": "## Conditional Routing & CRM Synchronization\nThe final stage uses a Contact Exists? IF node to determine the appropriate path in Zoho CRM based on whether a matching record was found. If the contact is new, the workflow routes to the Create New Contact node to generate a fresh profile using the Shopify data. If the contact already exists, it routes to the Update Existing Contact node, which automatically synchronizes current Shopify metrics\u2014such as engagement scores and order counts\u2014directly to the customer's CRM record.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "bf59b482-b86f-4c00-b79b-1bd8b7225849",
"connections": {
"Contact Exists?": {
"main": [
[
{
"node": "Update Existing Contact",
"type": "main",
"index": 0
}
],
[
{
"node": "Create New Contact",
"type": "main",
"index": 0
}
]
]
},
"Extract Customer Data": {
"main": [
[
{
"node": "Search for Existing Contact",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Extract Customer Data",
"type": "main",
"index": 0
}
]
]
},
"Search for Existing Contact": {
"main": [
[
{
"node": "Contact Exists?",
"type": "main",
"index": 0
}
]
]
},
"Trigger on New Customer or Order": {
"main": [
[
{
"node": "Workflow Configuration",
"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.
shopifyAccessTokenApizohoOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates the synchronization of customer data between Shopify and Zoho CRM. It triggers when a new customer or order is created in Shopify, calculates key metrics like lifetime spend and high-value status and then checks Zoho CRM to either update an existing…
Source: https://n8n.io/workflows/13277/ — 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.
Shopify + Mautic. Uses shopifyTrigger, noOp, mautic, crypto. Event-driven trigger; 26 nodes.
Having a seamless flow of customer data between your online store and your marketing platform is essential.
This workflow functions like the integration of Shopify products with Odoo products, Shopify customers with Odoo customers, and paid Shopify orders with Odoo sales orders containing multiple products.
This workflow automates the synchronization of product prices across Shopify and WooCommerce platforms to ensure retail consistency. It triggers when a price change is detected in either system, appli
This n8n workflow automatically sends WhatsApp notifications to customers when their Shopify orders are fulfilled. It extracts order details, validates customer phone numbers for WhatsApp compatibilit