

How to Sync Shopify Customers to HubSpot with Zapier
Automatically creates or updates a HubSpot contact every time a new customer registers or places an order in Shopify, keeping purchase history and contact details current in your CRM.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small e-commerce teams (under 10 people) who need Shopify purchase data in HubSpot for email segmentation without writing any code.
Not ideal for
Stores processing more than 1,000 orders per month — at that volume, Make handles the same sync for free while Zapier will cost $49+/month.
Sync type
real-timeUse case type
syncReal-World Example
A 6-person direct-to-consumer skincare brand uses this Zap to push every new Shopify customer into HubSpot the moment they check out. Before this automation, their marketing manager exported a CSV from Shopify every Monday morning and imported it manually — new customers waited up to 7 days before entering any HubSpot email sequence. Now the welcome flow triggers within 2 minutes of purchase.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Before You Start
Make sure you have everything ready.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
email | ||
| First Name | firstname | |
| Last Name | lastname | |
7 optional fields▸ show
| Phone Number | phone |
| Shopify Customer ID | shopify_customer_id |
| Total Spent | total_revenue |
| Orders Count | num_associated_deals |
| City | city |
| Country | country |
| Accepts Marketing | shopify_accepts_marketing |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap in Zapier
Log in to zapier.com and click the orange 'Create Zap' button in the top-left sidebar. You'll land on the Zap editor, which shows a two-panel layout: the left panel is the step builder and the right panel previews your data. Give the Zap a name at the top — something like 'Shopify → HubSpot Customer Sync' — so you can find it later. You're building a trigger-action Zap, not a multi-step Zap, so ignore the 'Add a step' prompts for now.
- 1Log in to zapier.com
- 2Click 'Create Zap' in the left sidebar
- 3Click the untitled Zap name at the top and rename it 'Shopify → HubSpot Customer Sync'
- 4Click the '1. Trigger' block to start configuring the trigger
Zap Editor > Trigger > Choose App
Set Shopify as the trigger app
In the trigger block, type 'Shopify' in the app search bar and select it from the dropdown. Zapier will show you a list of Shopify trigger events. You'll see options like 'New Customer', 'New Order', and 'Updated Order'. For this workflow, select 'New Customer' — this fires when someone creates an account or completes a checkout for the first time. If you also want to capture guest checkouts who never create an account, you'll need a second Zap using the 'New Order' trigger instead.
- 1Type 'Shopify' in the trigger app search bar
- 2Select 'Shopify' from the results
- 3Under 'Trigger Event', select 'New Customer'
- 4Click 'Continue'
Zap Editor > Trigger > Shopify > Sign In
Connect your Shopify account
Click 'Sign in to Shopify' and enter your store's myshopify.com domain (e.g., 'yourstore.myshopify.com'). Zapier will redirect you to Shopify's OAuth screen asking permission to read customer and order data. Click 'Install unlisted app' to approve. Once approved, you'll be returned to the Zap editor. Select the connected account from the dropdown if you have multiple Shopify stores.
- 1Click 'Sign in to Shopify'
- 2Enter your store's myshopify.com domain
- 3Click 'Install unlisted app' on the Shopify OAuth screen
- 4Return to Zapier and select your connected store from the account dropdown
- 5Click 'Continue'
Zap Editor > Trigger > Test Trigger
Test the Shopify trigger
Click 'Test trigger' and Zapier will pull in the most recent customer record from your Shopify store. You'll see a data panel on the right showing fields like email, first_name, last_name, phone, orders_count, and total_spent. Check that the email field contains a real address — not null. If your store is brand new with no customers, you'll need to create a test customer in Shopify Admin first before this step will work.
- 1Click 'Test trigger'
- 2Wait for Zapier to fetch a sample customer record
- 3Expand the data panel and verify the 'email' field has a value
- 4Note the field names — you'll map these in the action step
- 5Click 'Continue with selected record'
Zap Editor > Action > Choose App
Add HubSpot as the action app
Click the '+' button below the trigger block to add an action. Search for 'HubSpot' and select it. Under 'Action Event', you have two relevant options: 'Create or Update Contact' and 'Create Contact'. Choose 'Create or Update Contact' — this is critical. If a Shopify customer already exists as a HubSpot contact (from a previous import or form submission), this action will update their record instead of creating a duplicate.
- 1Click the '+' button below the Shopify trigger block
- 2Type 'HubSpot' in the action app search bar
- 3Select 'HubSpot' from the results
- 4Under 'Action Event', select 'Create or Update Contact'
- 5Click 'Continue'
Zap Editor > Action > HubSpot > Sign In
Connect your HubSpot account
Click 'Sign in to HubSpot' and you'll be taken to HubSpot's OAuth screen. Select the correct HubSpot portal from the dropdown — if you manage multiple portals, double-check the portal ID in the URL. Grant the requested permissions, which include contacts read/write access. Once connected, return to the Zap editor and confirm your portal name appears under 'Account'.
- 1Click 'Sign in to HubSpot'
- 2Select your HubSpot portal from the account picker
- 3Click 'Grant access' on the permissions screen
- 4Return to Zapier and confirm your portal name is selected
- 5Click 'Continue'
Zap Editor > Action > HubSpot > Set up action
Map Shopify fields to HubSpot contact properties
This is the most important step. Zapier shows you all available HubSpot contact properties on the left and Shopify data fields on the right. Click each HubSpot field and select the matching Shopify field from the dropdown. Email is mandatory — map it first. Then map first name, last name, phone, and any custom HubSpot properties you've created for Shopify data like total spend or order count. Use the 'Insert Data' picker (the lightning bolt icon) to insert dynamic Shopify values rather than typing them manually.
- 1Click the 'Email' field and select 'Email' from the Shopify data dropdown
- 2Click 'First Name' and select 'First Name' from Shopify data
- 3Click 'Last Name' and select 'Last Name' from Shopify data
- 4Click 'Phone Number' and select 'Phone' from Shopify data
- 5Scroll down to find custom properties (e.g., 'Shopify Total Spent') and map 'Total Spent' from Shopify
- 6Click 'Continue'
Zap Editor > + (between steps) > Formatter by Zapier > Phone
Add a Formatter step to clean the phone number (optional but recommended)
Shopify stores phone numbers in E.164 format (e.g., +12125551234). HubSpot accepts this, but many teams prefer a formatted version (212-555-1234) for readability. To add this, click the '+' between the trigger and action to insert a Zapier Formatter step. Choose 'Phone' under Transform and enter the Shopify phone field as the input. This step is optional — skip it if your team doesn't care about phone formatting.
- 1Click the '+' icon between the Shopify trigger and HubSpot action
- 2Search for 'Formatter by Zapier' and select it
- 3Under 'Action Event', select 'Phone'
- 4Under 'Transform', select 'Format Phone Number'
- 5Set 'Input' to the Shopify phone field
- 6Set 'To Format' to your preferred format (e.g., National)
- 7Click 'Continue', then go back and update the HubSpot phone mapping to use the Formatter output
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}This Code by Zapier step runs between the Shopify trigger and HubSpot action. It normalizes the email to lowercase, strips whitespace, converts total_spent to a float, and builds a clean lifecycle stage value based on order count — solving three common data quality issues in one step. In the Zap editor, click '+' between your trigger and action, choose 'Code by Zapier', select 'Run JavaScript', and paste this into the code box. Then map inputData fields to your Shopify trigger outputs.
JavaScript — Code Step// Code by Zapier — paste into 'Run JavaScript' step▸ Show code
// Code by Zapier — paste into 'Run JavaScript' step // Map these in the 'Input Data' section above the code box: // email → Shopify Email field
... expand to see full code
// Code by Zapier — paste into 'Run JavaScript' step
// Map these in the 'Input Data' section above the code box:
// email → Shopify Email field
// firstName → Shopify First Name field
// lastName → Shopify Last Name field
// totalSpent → Shopify Total Spent field
// ordersCount → Shopify Orders Count field
const rawEmail = inputData.email || '';
const rawFirst = inputData.firstName || '';
const rawLast = inputData.lastName || '';
const rawSpent = inputData.totalSpent || '0';
const rawOrders = inputData.ordersCount || '0';
// Normalize email: lowercase + strip whitespace
const cleanEmail = rawEmail.trim().toLowerCase();
// Convert spend to float, default to 0 if unparseable
const totalSpent = parseFloat(rawSpent) || 0;
// Convert order count to integer
const ordersCount = parseInt(rawOrders, 10) || 0;
// Derive a simple lifecycle stage based on purchase behavior
let lifecycleStage;
if (ordersCount === 0) {
lifecycleStage = 'subscriber';
} else if (ordersCount === 1) {
lifecycleStage = 'customer';
} else {
lifecycleStage = 'evangelist'; // 2+ orders = repeat buyer
}
// Output — reference these fields in your HubSpot action step
output = {
cleanEmail,
firstName: rawFirst.trim(),
lastName: rawLast.trim(),
totalSpent,
ordersCount,
lifecycleStage
};Zap Editor > Action > HubSpot > Test action
Test the HubSpot action
Click 'Test action' and Zapier will send the sample Shopify customer data to HubSpot using your field mappings. Zapier will show you the API response, including the HubSpot contact ID that was created or updated. Go to HubSpot and search for the test contact's email address to confirm the record exists and all fields populated correctly. Pay attention to the 'total_spent' and 'orders_count' fields specifically — these are the ones most likely to have formatting issues.
- 1Click 'Test action'
- 2Wait for the green 'Test was successful' confirmation
- 3Note the HubSpot contact ID in the response
- 4Open HubSpot in a new tab and search for the test customer's email
- 5Verify all mapped fields appear correctly on the contact record
Zap Editor > Publish > Publish & Turn On
Turn on the Zap
Click the 'Publish' button in the top-right corner of the Zap editor. Zapier will ask you to confirm the Zap is ready — click 'Publish & Turn On'. The Zap is now live and listening for new Shopify customers via webhook. You'll see the Zap listed as 'On' in your Zaps dashboard with a green toggle. From this point forward, every new Shopify customer will appear in HubSpot within 1-2 minutes.
- 1Click the 'Publish' button in the top-right corner
- 2Review the summary screen
- 3Click 'Publish & Turn On'
- 4Return to the Zaps dashboard and confirm the Zap shows a green 'On' toggle
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use Zapier for this if your team has no developer resources and needs the sync live today. The Shopify and HubSpot integrations are mature, the 'Create or Update Contact' action handles deduplication automatically, and you can have a working Zap in under 20 minutes without touching any API documentation. Zapier is also the right call if you're already paying for a Zapier subscription for other workflows — adding this Zap costs nothing extra in setup time. The one scenario where you should skip Zapier: if you're processing more than 800 Shopify orders per month, the task costs will push you toward a paid plan fast, and Make or the native HubSpot-Shopify integration handles the same sync at a lower cost.
The math on cost is straightforward. This Zap uses 1 task per new customer if you skip the Formatter step, or 2 tasks per customer if you add it. At 300 new customers per month with the Formatter, that's 600 tasks. Zapier's Free tier covers 100 tasks/month — you'll exceed that immediately. The Starter plan at $19.99/month covers 750 tasks, which handles 375 customers/month with the Formatter. At 1,000 new customers/month, you're looking at 2,000 tasks, which requires the Professional plan at $49/month. Make's free tier covers 1,000 operations/month and the same workflow uses 2-3 operations per customer — so Make handles roughly 400 customers/month for free versus Zapier's 50.
Here's how the competitors stack up on this specific use case. Make has a native Shopify module with a 'Watch Customers' trigger that fires in real time and supports filter conditions directly in the trigger — you can exclude customers from specific countries or with zero orders without adding extra steps. n8n handles this with a Shopify webhook node and gives you JavaScript transformation inline, which is useful if your HubSpot properties need complex reformatting. Power Automate has a Shopify connector but it's a premium connector requiring a per-user license — that changes the cost math entirely and makes it harder to justify unless your team is already in the Microsoft 365 ecosystem. Zapier is still the right choice here when simplicity matters more than price: the guided builder, the clear field-mapping UI, and the error notification emails make it the easiest option to hand off to a non-technical team member to maintain.
Three things you'll hit after this goes live. First, Shopify's 'total_spent' value at the moment of customer creation is almost always '0.00' — the customer record is created before the order is fully processed. You need a second Zap on 'New Order' to push the actual spend to HubSpot after checkout completes. Second, if a customer changes their email in Shopify, the 'Updated Customer' event fires but HubSpot will create a new contact with the new email rather than merging the old and new records — email is immutable as a deduplication key in HubSpot. Third, Shopify rate-limits its webhook delivery during flash sales and high-traffic periods. Webhooks can queue and deliver 10-15 minutes late. If your HubSpot welcome email sequence is time-sensitive (triggers within 5 minutes of contact creation), you'll see gaps during sale events. There's no fix on the Zapier side — this is a Shopify infrastructure limitation.
Ideas for what to build next
- →Sync Shopify orders back to HubSpot deals — Build a second Zap using 'New Order' as the Shopify trigger and 'Create Deal' as the HubSpot action. Associate each deal to the contact synced by this Zap using the customer email as the lookup key — giving your sales team a full purchase history inside HubSpot.
- →Trigger HubSpot email sequences on first purchase — Add a third action to this Zap that enrolls the new HubSpot contact into a specific email sequence the moment they're created. Use HubSpot's 'Add Contact to Workflow' action in Zapier and target a post-purchase onboarding sequence.
- →Reverse sync: push HubSpot updates back to Shopify customer tags — Create a separate Zap with HubSpot as the trigger ('Contact Property Updated') and Shopify as the action ('Update Customer'). When a sales rep changes a contact's lifecycle stage in HubSpot, this Zap writes that value back to Shopify as a customer tag — keeping both systems consistent.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup