Shopify + HubSpot Integration Guide
This guide walks you through setting up a complete integration between Shopify and HubSpot. By the end, your e-commerce customers will automatically appear as CRM contacts for marketing and sales follow-up.
Overview
Goal: Sync Shopify Customers with HubSpot Contacts so your marketing and sales teams have full visibility into e-commerce customers.
What You'll Set Up:
- Shopify Customers synced to HubSpot Contacts
- Name, email, phone, and address mapping
- Order data considerations for segmentation
- One-way sync (Shopify → HubSpot is typical)
Time Required: 15–20 minutes
Prerequisites
Before starting, ensure you have:
- [ ] A FluxCascade account (sign up free)
- [ ] Admin access to your Shopify store (or a custom app with customer read/write scopes)
- [ ] Admin access to your HubSpot portal
- [ ] Both platforms connected to FluxCascade
If you haven't connected your platforms yet, go to Connections → Add Connection and connect each platform via OAuth. See the HubSpot integration docs for HubSpot-specific setup.
Step 1: Understand the Typical Flow
For most e-commerce businesses, the sync direction is Shopify → HubSpot:
- A customer places an order on your Shopify store
- Shopify creates or updates the Customer record
- FluxCascade syncs the Customer to HubSpot as a Contact
- Your marketing team uses HubSpot to segment, email, and follow up
Bidirectional sync is less common here because HubSpot doesn't generate customers — Shopify does. However, if your sales team updates contact info in HubSpot and you want those changes reflected in Shopify, bidirectional is an option.
Step 2: Plan Your Field Mapping
Customer → Contact Field Pairs
| Shopify Customer Field | HubSpot Contact Field | Notes |
|---|---|---|
first_name | firstname | Direct mapping |
last_name | lastname | Direct mapping |
email | email | Used for matching records |
phone | phone | Add phone_e164 transform |
default_address.company | company | From default address |
default_address.address1 | address | Street address |
default_address.city | city | City |
default_address.province_code | state | State/province code (e.g., "CA") |
default_address.zip | zip | ZIP/postal code |
default_address.country_code | country | Country code (e.g., "US") |
orders_count | num_orders (custom) | Create custom property in HubSpot |
total_spent | total_revenue (custom) | Create custom property in HubSpot |
Step 3: Create Custom HubSpot Properties (Optional)
If you want to sync order metrics from Shopify, create custom properties in HubSpot first:
- Go to HubSpot Settings → Properties → Contact Properties
- Create these custom properties:
num_orders(Number) – Total number of Shopify orderstotal_revenue(Number) – Total amount spent in Shopifyshopify_customer_id(Single-line text) – Shopify's internal customer IDaccepts_marketing(Checkbox) – Whether the customer opted into marketing
These properties enable segmentation in HubSpot (e.g., "customers with 3+ orders" or "customers who spent over $500").
Step 4: Create the Mapping
- Go to Mappings in FluxCascade
- Click New Mapping
- Configure the basics:
Source:
- Connection: Your Shopify connection
- Object: Customers
Target:
- Connection: Your HubSpot connection
- Object: Contacts
Direction: Shopify → HubSpot (one-way recommended)
- Click Continue
Step 5: Configure Field Pairs
Add these field pairs:
-
First Name
- Source:
first_name - Target:
firstname - Transform: None
- Source:
-
Last Name
- Source:
last_name - Target:
lastname - Transform: None
- Source:
-
Email (Matching Field)
- Source:
email - Target:
email - Transform:
lowercase - Mark as Matching Field
- Source:
-
Phone
- Source:
phone - Target:
phone - Transform:
phone_e164
- Source:
-
Company
- Source:
default_address.company - Target:
company
- Source:
Address Fields
-
Street
- Source:
default_address.address1 - Target:
address
- Source:
-
City
- Source:
default_address.city - Target:
city
- Source:
-
State
- Source:
default_address.province_code - Target:
state
- Source:
-
Postal Code
- Source:
default_address.zip - Target:
zip
- Source:
-
Country
- Source:
default_address.country_code - Target:
country
- Source:
Optional: Order Metrics
-
Order Count
- Source:
orders_count - Target:
num_orders(custom property)
- Source:
-
Total Spent
- Source:
total_spent - Target:
total_revenue(custom property)
- Source:
Step 6: Set Matching Strategy
- In mapping settings, find Matching Strategy
- Select Email as the primary matching field
- Enable Case Insensitive Matching
This prevents duplicate HubSpot contacts when a Shopify customer checks out with john@example.com and already exists in HubSpot as John@Example.com.
Step 7: Marketing Segmentation Setup
After syncing, use the custom properties to create HubSpot lists for targeted marketing:
Example segments:
- Repeat buyers:
num_ordersgreater than 1 - High-value customers:
total_revenuegreater than 500 - New customers:
num_ordersequals 1 - Marketing opt-in:
accepts_marketingis true
These lists feed into HubSpot email campaigns, workflows, and ad audiences.
Step 8: Test the Mapping
Before going live:
-
Click Test Sync
-
Review the preview showing what would sync
-
Check for:
- Correct name and email mapping
- Address fields populated from default address
- Custom properties receiving order data
- No duplicate contacts being created
-
Adjust configuration and test again if needed
Step 9: Run Initial Sync
Once testing looks good:
- Click Sync Now
- Choose Full Sync for initial population
- Monitor progress in real-time
- Review completion statistics
Expected Results:
- Shopify Customers created as HubSpot Contacts
- Existing HubSpot Contacts matched by email and updated with Shopify data
- Order metrics populated on custom properties
Step 10: Enable Scheduled Sync
Set up automatic syncing:
- Go to mapping Settings
- Enable Scheduled Sync
- Choose frequency: Every 15 minutes (or enable real-time webhooks)
- Save
For stores with high order volume, real-time sync via webhooks ensures new customers appear in HubSpot within seconds of their first purchase.
Verification
Check Shopify
- Note a recent customer's email and order count
Check HubSpot
- Search for that customer by email
- Verify name, phone, and address are populated
- Check custom properties (
num_orders,total_revenue) if configured
Review Sync Logs
- Go to Syncs
- Click on recent sync jobs
- Verify success rates and any errors
Common Issues & Solutions
Shopify Customers Without Email
Cause: Shopify allows checkout without an email (phone-only orders or draft orders).
Solution: HubSpot requires email for contact creation. These records are skipped during sync. Check sync logs for "missing required field" errors. To handle phone-only customers, set up a secondary matching strategy using phone number.
Address Fields Blank
Cause: The Shopify Customer has no default_address set. This happens when a customer creates an account but hasn't placed an order yet.
Solution: Only customers with at least one order have address data populated. Filter the sync to customers with orders_count >= 1 if you only want buyers.
Duplicate HubSpot Contacts
Cause: Email matching not finding existing records due to case differences or typos.
Solution:
- Enable case-insensitive matching
- Add
lowercasetransform to the email field - Run HubSpot's built-in deduplication tool after initial sync
Order Metrics Not Updating
Cause: Custom properties in HubSpot haven't been created, or property internal names don't match.
Solution: Verify the custom property internal names in HubSpot match what you configured in the field mapping. HubSpot auto-generates internal names from labels (e.g., "Total Revenue" becomes total_revenue).
Shopify API Rate Limits
Cause: Shopify's API allows 2 requests per second (REST) or 1,000 cost points per second (GraphQL).
Solution: FluxCascade handles rate limiting automatically. For stores with 100,000+ customers, the initial full sync may take several hours. Subsequent incremental syncs process only changes and complete quickly.
Best Practices
-
Use one-way sync (Shopify → HubSpot) – Shopify is the source of truth for e-commerce customer data
-
Create custom properties before your first sync – This ensures order metrics sync from the start
-
Sync order metrics, not individual orders – Aggregate fields (
orders_count,total_spent) are more useful for segmentation than raw order data -
Enable webhooks for high-volume stores – Real-time sync ensures new customers enter marketing workflows promptly
-
Filter out test orders – If you use Shopify's Bogus Gateway for testing, exclude test customers from the sync
-
Set lifecycle stage automatically – Use a static value to set
lifecyclestagetocustomerfor all synced Shopify customers
Next Steps
- Field Transformations – Advanced data transformation options
- Sync Scheduling – Configure sync frequency
- Custom Fields guide – Working with custom properties
- Error Handling – Handle sync failures