Shopify and Zendesk Customer Sync
Automate customer data synchronization between Shopify and Zendesk. This workflow ensures that when a customer's details are updated in Shopify, their contact information is created or updated in Zendesk, keeping your support and e-commerce platforms in sync.
Overview
This workflow automatically syncs customer updates from Shopify to Zendesk, creating new users or updating existing ones to ensure consistent contact information across both platforms.
🧠 Description & Use Case
This workflow automates the synchronization of customer contact information between Shopify and Zendesk. When a customer's profile is updated in your Shopify store, this workflow instantly checks and updates their corresponding record in Zendesk. This ensures that your customer support team always has the most current contact details, eliminating manual data entry and preventing data discrepancies.
🔄 How It Works:
-
Trigger on Shopify Update
- The workflow starts automatically whenever a customer's details are updated in Shopify.
-
Search for Existing User in Zendesk
- It takes the customer's email from the Shopify update and searches for a matching user in Zendesk.
-
Merge Data
- The original Shopify customer data is merged with the search results from Zendesk (including the Zendesk User ID and phone number).
-
Check if User Exists (Branching)
- An If node determines the next step:
- If the user does not exist in Zendesk, a new user is created using their Shopify name, email, and phone number.
- If the user exists, the workflow proceeds to check for data changes.
- An If node determines the next step:
-
Check for Data Modification
- A second If node compares the phone number from Shopify with the phone number in the existing Zendesk record.
-
Update or End
- If the phone numbers are different, the workflow updates the user's profile in Zendesk with the new phone number.
- If the phone numbers are the same, no action is needed, and the workflow ends.
✅ Real-World Use Cases:
- Unified Customer View: Ensure your support agents in Zendesk have the latest phone number and contact details entered by customers in their Shopify account.
- Data Integrity: Eliminate manual data entry errors and maintain a consistent, single source of truth for customer information across your e-commerce and support platforms.
- Automated Contact Management: Automatically create Zendesk profiles for new customers as they update their information, streamlining the onboarding process for your support system.
- Improved Customer Service: Reduce resolution times by allowing support agents to contact customers using up-to-date information without having to verify it first.
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
Keep only UserId and email
set
User exists in Zendesk
if
Add Zendesk contact Id to Shopify data
merge
On customer updated
shopifyTrigger
NoOp
noOp
Contact data is modified
if
Create contact in Zendesk
zendesk
Update contact in Zendesk
zendesk
Search contact by email adress
zendesk
Statistics
View full JSON structure
{
"nodes": [
{
"id": "94fc73af-a35d-4d5c-a192-6190d2a731ff",
"name": "Keep only UserId and email",
"type": "n8n-nodes-base.set",
"position": [
1200,
260
],
"parameters": {
"values": {
"number": [
{
"name": "ZendeskUserId",
"value": "={{ $json[\"id\"] }}"
}
],
"string": [
{
"name": "ZendeskEmail",
"value": "={{ $json[\"email\"] }}"
},
{
"name": "ZendeskPhone",
"value": "={{ $json[\"phone\"] }}"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 1
},
{
"id": "6decc852-d5b9-40c4-b51e-832283637027",
"name": "User exists in Zendesk",
"type": "n8n-nodes-base.if",
"position": [
1660,
140
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json[\"ZendeskUserId\"] }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "70fa2ad7-c43c-4d22-ba6d-89495f8b5794",
"name": "Add Zendesk contact Id to Shopify data",
"type": "n8n-nodes-base.merge",
"position": [
1420,
140
],
"parameters": {
"mode": "mergeByKey",
"propertyName1": "email",
"propertyName2": "ZendeskEmail"
},
"typeVersion": 1
},
{
"id": "346d3e04-433c-4b43-868f-729d3ee67ee2",
"name": "On customer updated",
"type": "n8n-nodes-base.shopifyTrigger",
"position": [
740,
120
],
"webhookId": "a0d5e8ea-3f53-496e-a41b-cb022f715b43",
"parameters": {
"topic": "customers/update"
},
"credentials": {
"shopifyApi": {
"id": "10",
"name": "Shopify account"
}
},
"typeVersion": 1
},
{
"id": "a2ff1fa3-d67a-4abb-94ae-f22cad7de359",
"name": "NoOp",
"type": "n8n-nodes-base.noOp",
"position": [
2160,
180
],
"parameters": {},
"typeVersion": 1
},
{
"id": "41418930-0898-4602-88a3-cf4238f32890",
"name": "Contact data is modified",
"type": "n8n-nodes-base.if",
"position": [
1940,
80
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json[\"phone\"] }}",
"value2": "={{ $json[\"ZendeskPhone\"] }}",
"operation": "notEqual"
}
]
}
},
"typeVersion": 1
},
{
"id": "ee1791fb-eaa0-4829-af3b-e72d7b3e80d5",
"name": "Create contact in Zendesk",
"type": "n8n-nodes-base.zendesk",
"position": [
1940,
240
],
"parameters": {
"name": "={{ $json[\"first_name\"] }} {{ $json[\"last_name\"] }}",
"resource": "user",
"additionalFields": {
"email": "={{ $json[\"email\"] }}",
"phone": "={{ $json[\"phone\"] ?? ' ' }}"
}
},
"credentials": {
"zendeskApi": {
"id": "5",
"name": "Zendesk account"
}
},
"typeVersion": 1
},
{
"id": "67dc85c6-39af-43cc-951e-bcfd31b73e46",
"name": "Update contact in Zendesk",
"type": "n8n-nodes-base.zendesk",
"position": [
2160,
-20
],
"parameters": {
"id": "={{ $json[\"ZendeskUserId\"] }}",
"resource": "user",
"operation": "update",
"updateFields": {
"phone": "={{ $json[\"phone\"] ?? 0}}"
}
},
"credentials": {
"zendeskApi": {
"id": "5",
"name": "Zendesk account"
}
},
"typeVersion": 1
},
{
"id": "9ab30a51-e599-4361-b170-b18b9d4021cb",
"name": "Search contact by email adress",
"type": "n8n-nodes-base.zendesk",
"position": [
1000,
260
],
"parameters": {
"limit": 1,
"filters": {
"query": "={{ $json[\"email\"] }}"
},
"resource": "user",
"operation": "search"
},
"credentials": {
"zendeskApi": {
"id": "5",
"name": "Zendesk account"
}
},
"typeVersion": 1,
"alwaysOutputData": true
}
],
"connections": {
"On customer updated": {
"main": [
[
{
"node": "Add Zendesk contact Id to Shopify data",
"type": "main",
"index": 0
},
{
"node": "Search contact by email adress",
"type": "main",
"index": 0
}
]
]
},
"User exists in Zendesk": {
"main": [
[
{
"node": "Contact data is modified",
"type": "main",
"index": 0
}
],
[
{
"node": "Create contact in Zendesk",
"type": "main",
"index": 0
}
]
]
},
"Contact data is modified": {
"main": [
[
{
"node": "Update contact in Zendesk",
"type": "main",
"index": 0
}
],
[
{
"node": "NoOp",
"type": "main",
"index": 0
}
]
]
},
"Keep only UserId and email": {
"main": [
[
{
"node": "Add Zendesk contact Id to Shopify data",
"type": "main",
"index": 1
}
]
]
},
"Search contact by email adress": {
"main": [
[
{
"node": "Keep only UserId and email",
"type": "main",
"index": 0
}
]
]
},
"Add Zendesk contact Id to Shopify data": {
"main": [
[
{
"node": "User exists in Zendesk",
"type": "main",
"index": 0
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.