HubSpot + Shopify: pitfalls of the native integration and when custom development is needed

At first glance the native HubSpot and Shopify integration looks complete: orders sync, contacts are created, e-commerce analytics appear in dashboards. But in real use, issues emerge that break team workflows: duplicate contacts, resetting of custom funnel stages, missing metafields, and the inability to sync multiple stores. An honest breakdown follows.


What the native integration can do

The official HubSpot + Shopify connector covers basic e-commerce scenarios:

  • Syncing Shopify orders into HubSpot objects (Deals or Contacts)
  • Creating and updating contacts on new orders
  • Customer segmentation by purchase behavior: LTV, order count, average order value
  • E-commerce analytics in HubSpot: revenue, AOV, repeat purchase rate
  • Basic triggers for HubSpot Workflows based on Shopify events

For a small store with a simple data structure and standard products, this is sufficient. But as soon as customization appears — problems begin.


Where the native integration breaks

Metafields are not transmitted.
This is the most critical limitation for most Shopify stores. Metafields — custom attributes of products, orders, and customers — are a standard Shopify customization tool. Size, material, supplier SKU, loyalty program, dietary preferences — all of this is stored in metafields. The native integration does not transmit them. Only standard order fields reach HubSpot.

Duplicate contacts.
If a customer placed an order with one email and HubSpot already has a contact with a different email or no email — the integration creates a duplicate. With a base of several thousand customers, this quickly becomes a serious data quality problem.

Custom pipeline stages are reset.
A known issue: connecting Shopify to HubSpot can reset custom pipeline stages and replace them with standard e-commerce stages. Companies that invested time in configuring their funnel to match their processes discover this only after connecting.

Subscriptions through third-party Shopify apps do not sync.
Most Shopify stores with a subscription model use third-party apps: ReCharge, Bold Subscriptions, Smartrr. The native HubSpot integration cannot see data from these apps — subscription status, billing cycle, and churn are not passed to the CRM.

Shopify REST API is being deprecated.
Shopify is actively migrating from REST API to GraphQL API. Integrations built on REST via platforms such as Zapier or Make may stop working without notice when Shopify updates.

No multi-store sync.
The native integration supports only one Shopify store per HubSpot account. Brands with multiple stores — different regions or product lines — cannot get a unified view across all stores in one CRM.


What a custom integration from Exceltic.dev solves

  • Metafield transmission — custom attributes of products, orders, and customers from the Shopify Metafields API are mapped to custom properties of HubSpot contacts, companies, and deals
  • Contact deduplication — before creating a new contact the system checks for an existing one by email, phone, and custom identifiers; a found contact is updated, no duplicate is created
  • Custom pipeline stage preservation — the integration does not touch the existing funnel structure; new orders land in the correct pipeline with all custom stages intact
  • Subscription app sync — middleware connects directly to ReCharge, Bold, or Smartrr APIs and pushes subscription data to custom HubSpot properties
  • Multi-store architecture — multiple Shopify stores sync into one HubSpot account with order source tagging
  • GraphQL API — the integration is built on the Shopify GraphQL Admin API, guaranteeing long-term compatibility without risk of breakage when Shopify migrates
  • Reverse sync — updating customer data in HubSpot (e.g., loyalty segment) is pushed back to the corresponding Shopify metafield

How the integration works — technical process

Connection architecture

The integration is built on the Shopify Webhooks → Exceltic middleware → HubSpot CRM API v3 stack. Shopify sends real-time events: orders/create, orders/updated, orders/paid, customers/create, customers/update, refunds/create. To retrieve metafields, middleware performs an additional request via the Shopify GraphQL Admin API — the REST API does not return metafields in the webhook payload.

Shopify authentication is implemented via a Custom App with minimum required scopes: read_orders, read_customers, read_products, read_metaobjects. HubSpot authentication uses a Private App Token.

Step-by-step scenario: new order with metafields

  1. Customer places an order in Shopify — webhook orders/create is sent
  2. Middleware receives basic order data: customer_email, total_price, line_items
  3. Additional request to Shopify GraphQL API to retrieve order and customer metafields
  4. System looks up an existing contact in HubSpot: GET /crm/v3/objects/contacts?email={email}
  5. If contact found — properties updated: LTV, order count, last purchase date, metafields
  6. If not found — new contact created with full data set including metafields
  7. A Deal is created in the correct pipeline with the order amount and line items
  8. Deal is associated with the contact via the Association API
  9. On paid status — Deal moves to the “Paid” stage
  10. Segmentation data is updated in HubSpot for Workflow triggers

Multi-store sync

Each Shopify store is registered in middleware as a separate source with a unique store_id. When creating a contact and deal in HubSpot, a Shopify Store Source property is added with the store name. This enables customer segmentation by store, building separate funnels, and launching personalized Workflows for each store from a single HubSpot account.

What happens on error

Shopify guarantees webhook re-delivery on errors up to 19 times within 48 hours. Middleware uses idempotency keys based on shopify_order_id — each order is processed exactly once. If the HubSpot API is unavailable, the event is saved to a queue with exponential backoff.


Real-world case

Wholesale distributor of sports nutrition, 10 account managers, ~200 orders per month, two Shopify stores: EU and UK.

The company faced the classic multi-store problem: the native HubSpot integration supported only one store. UK store data was entered manually. Additionally, Shopify metafields were heavily used to store customer dietary preferences (vegan, gluten-free, lactose-free) — key data for personalizing email campaigns. The native integration did not transmit them.

After connecting the native connector, another problem appeared: the custom funnel for wholesale account managers was reset to standard e-commerce stages. The team lost settings that had taken months to build.

The custom integration solved all three problems: both stores sync into one HubSpot with source tagging, dietary preference metafields are pushed to contact properties, and the custom wholesale sales funnel is preserved and untouched.

Result: a unified customer base from both stores in HubSpot, personalized email campaigns based on metafields increased CTR by 34%, 0 manual data entry for the UK store.


Which businesses benefit most

The custom integration is most relevant for e-commerce brands with multiple Shopify stores — different regions, languages, or product lines. The native HubSpot integration physically does not support this scenario.

Critical for stores with a subscription model through ReCharge or similar — without a custom integration, subscription status, churn, and renewal data never reach HubSpot, making retention segmentation and automation incomplete.


Frequently asked questions

Why does the native HubSpot + Shopify integration not transmit metafields?
The native integration uses standard Shopify Webhook payload objects, which do not include metafields. Retrieving metafields requires an additional request to the Shopify GraphQL Admin API after receiving the webhook event. This is an architectural decision of the native connector — it does not make additional API requests after receiving an event.

Can multiple Shopify stores be connected to one HubSpot via a custom integration?
Yes. Middleware supports an unlimited number of Shopify stores with a single HubSpot account. Each store receives a unique source identifier that is written to contact and deal properties — this provides complete segmentation and per-store analytics.

How is the duplicate contact problem solved across multiple stores?
Before creating a contact, middleware checks for an existing one by email (primary), phone, and custom identifier. If a match is found — the existing contact’s properties are updated, information about the new order and source is added. No duplicate is created.

Does the integration support ReCharge and other Shopify subscription apps?
Yes. Middleware connects directly to the ReCharge Webhooks API, Bold Subscriptions API, and Smartrr API. Subscription events (activation, pause, cancellation, failed payment) are pushed to custom HubSpot contact properties and trigger the corresponding Workflows.

How long does HubSpot + Shopify integration development take?
A base integration with metafields and deduplication — 4–6 business days. The multi-store version with subscription apps and reverse sync — 10–14 business days. Exceltic.dev sets exact timelines after a technical brief.

If the native HubSpot + Shopify integration does not cover your scenarios — describe your requirements to the Exceltic.dev team. We will review the architecture and propose a solution tailored to your e-commerce structure.

More articles

All →