HubSpot + Shopify integration
Shopify holds the order, the shopper and the catalogue, and HubSpot publishes the app that carries all three into a portal at no cost.
Native app- Into HubSpot
Is there a native Shopify + HubSpot integration?
Yes. HubSpot publishes the Shopify app itself, listed in the HubSpot App Marketplace as of September 2026, and for a single store it is the right first move: 8 to 24 hours of setup and mapping, not a build. It stops being enough at a second store, at business to business catalogues, or when order data has to land on a custom object rather than a deal.
- Recommended route
- Native app
- Build effort
- 8 to 24 hours
- In the HubSpot App Marketplace?
- Yes, Shopify by HubSpot
- Typical elapsed time
- 1 to 2 weeks
Marketplace checked September 2026.
Why teams connect Shopify to HubSpot
Most Shopify merchants arrive at this question from the marketing side. They are already sending campaigns, and the segment they want does not exist: people who bought a particular product, once, more than ninety days ago, and have not been back. The store knows all of that. The email tool knows an address and a signup date. Bridging the two is the whole job.
The second group arrives from service. A customer writes in about an order, and the agent has two tabs open, copying an order number from one to the other. It is a small tax, paid many times a day, and it grows with the catalogue. Once order history sits beside the conversation, most of those lookups disappear and the answers get faster.
The third group has outgrown something. They started on the free app, and then the business changed shape: a second storefront for a different region, a wholesale channel with negotiated pricing, a subscription product whose renewal date needs to drive a workflow. These merchants know the integration exists, because they are using it, and they have found the specific thing it will not do. The answer for them is rarely replacing the app and usually extending it.
What syncs
Customers become contacts, orders become deals or a custom object, line items become line items, product variants become products, and business to business companies become companies.
The keys are all platform identifiers held in custom HubSpot properties. Email is not a key. Guest checkouts, account merges and shared household addresses all produce cases where the same email is two shoppers or one shopper is two emails, and a sync keyed on email will quietly pick the wrong one. Products key on the variant id rather than the stock keeping unit, because merchants reuse and retype stock keeping units between seasons, and a reused code overwrites the previous product’s history.
The choice worth arguing about is orders. A deal is a pipeline record that closes once, which suits a business with a real sales process. A high volume direct to consumer store with thousands of orders a month usually wants a custom object instead, so the forecast is not buried under completed baskets.
Traffic runs one way. Shopify owns the order.
| | | Direction | Match key | Notes |
|---|---|---|---|---|
| Customer | Contact | Into HubSpot | Shopify customer id held in a custom HubSpot property | Email is a display field. A guest checkout can share an email with an account. |
| Order | Deal | Into HubSpot | Order id | A custom object suits stores where an order is not a sales opportunity. |
| Line item | Line item | Into HubSpot | Order id plus line item id | |
| Product variant | Product | Into HubSpot | Variant id, not the stock keeping unit | Merchants reuse and retype stock keeping units. The variant id is stable. |
| Company | Company | Into HubSpot | Company id, with contacts associated through their company contact records | Business to business only, and outside what the HubSpot app carries. |
Architecture
The pattern is a webhook queue with a reconciliation sweep. Shopify webhooks fire on the events that matter, a small endpoint accepts them, and the work happens off the request so a slow HubSpot call never causes a delivery failure. Writes into HubSpot are batch upserts keyed on the Shopify identifier, followed by a separate associations pass, with API paths pinned to version 2026-03.
Shopify’s own documentation says webhook delivery is not always guaranteed and advises a reconciliation job that periodically refetches, so the sweep is part of the build rather than an extra. A scheduled query pulls everything changed since the last watermark and fills the gaps. The Admin API supports that directly: the customers and orders queries both filter on an updated timestamp, which is what makes a watermark cheap here and expensive on systems that lack it.
Reads use the GraphQL Admin API, where cost is calculated per query against a point bucket rather than counted per request, so a backfill is paced by query shape rather than by a request per second figure.
What the API allows
- API style
- GraphQL
- Authentication
- OAuth 2.0
- Webhooks
- Yes
- Changed-since filter
- Yes
- Sandbox
- Yes
- Rate limit
- Calculated query cost against a point bucket, with the bucket size and restore rate varying by API and by plan
Developer documentation shopify.dev
Three ways to connect
Start with the app. It is free, HubSpot publishes it, and for a single store that wants customers, orders and products visible, it is finished work. Connecting it properly, including the field mapping and the first reconciliation, runs 8 to 24 hours. The question is only what happens at the edges. A second storefront, business to business companies and locations, a custom object for orders, or a field the app’s mapping does not carry: each of those is a reason to add a service beside the app rather than instead of it. As a fallback, that service is a further 40 to 60 hours. An automation platform is the route to avoid here, because it bills per order to do less than the free app already does.
-
Native app
RecommendedThe HubSpot built app connects a store with no code, carries customers, orders and products, and is the honest first answer for a team that wants commerce data in the portal this week.
-
Custom middleware
PossibleA keyed service earns its cost at a second storefront, at business to business companies and locations, or when orders belong on a custom object with fields the app's mapping cannot carry. Budget 40 to 60 hours for that fallback, on top of the app.
-
Automation platform
AvoidA per task automation platform bills every order as a run, so the cost climbs with volume while the coverage stays behind what the free app already does.
What breaks and how we prevent it
Missed webhooks, duplicate contacts, reused stock keeping units and multi store identity are the failures that come up repeatedly.
Missed webhooks
Missed webhooks are the most common cause of a merchant losing faith in a sync. Deliveries fail, handlers throw, deploys drop events. The defence is the reconciliation sweep, run often enough that the worst case gap is measured in minutes.
Guest checkouts and duplicate contacts
Guest checkouts create a customer record that later merges with an account, and a sync keyed on email produces two contacts for one person. The defence is to key on the customer id and to decide in advance what happens when two Shopify records carry the same address.
Stock keeping units reused next season
A merchant retires a product and reuses its stock keeping unit next season, and a catalogue keyed on that code silently rewrites last year’s history. The defence is the variant id.
One shopper in two storefronts
Two storefronts produce two identifier spaces, and a shopper in both is one contact with two histories. The defence is to carry the store on every record and to agree what a shared email means before the first load, not after somebody notices a merged order list.
Our approach
- Scope. We start by asking what the app already does for you, then write down only the things it does not, because that list is the actual project.
- Architect. We fix the order model first, deal or custom object, then the keys, then whether business to business companies are in play.
- Build. A webhook endpoint that acknowledges quickly and queues, batch upserts keyed on Shopify identifiers, a separate associations pass, and a watermarked sweep from day one rather than after the first gap.
- Validate. Development store on one side, sandbox portal behind a fail closed allowlist on the other, then a production cutover that swaps credentials against proven code.
- Operate. The sweep reports what it had to repair each run, which is the earliest warning that something upstream has changed.
Common questions
Is there an official HubSpot app for Shopify?
Yes. HubSpot publishes the Shopify app itself, and several third party connectors sit alongside it in the App Marketplace. The first party app is free, connects with an authorization given from inside HubSpot, and needs an administrator on both sides to install it.
When does a Shopify store outgrow the HubSpot app?
At the second storefront, at business to business, and at custom objects. Merchants running separate stores per region or per brand need one customer identity across all of them. Companies, company locations and catalogue pricing sit outside the app's mapping. So does any design where an order should not be a deal.
Can one HubSpot portal receive data from several Shopify stores?
Yes, with a build. Each store authorizes separately and each has its own customer and order identifiers, so the integration has to carry the store along with the record identifier and decide what a shared email means. A shopper who buys from two of your storefronts is one contact and two order histories.
Does the Shopify API support business to business companies?
Yes. The Admin API documents a Company object representing a business that purchases from the shop, with contacts who order on its behalf and locations that carry their own billing and shipping addresses. It needs the customer or company read scope and a shop with business to business enabled.
Can you rely on Shopify webhooks alone to keep HubSpot current?
No, and Shopify says so. Its own documentation states that webhook delivery is not always guaranteed and that an app should not rely on receiving data from webhooks, recommending a reconciliation job that periodically refetches. We build both: webhooks for speed, a scheduled sweep for truth.
How fresh is Shopify data once it reaches HubSpot?
Plan for minutes, not seconds. HubSpot does not publish a sync cadence for its Shopify app, so the safe assumption is that an order appears within minutes of being placed. A custom webhook build is faster, and it still needs the scheduled sweep behind it, because Shopify states that webhook delivery is not always guaranteed.
What should a Shopify to HubSpot sync key on?
Platform identifiers, stored in custom HubSpot properties. Customers key on the Shopify customer id rather than email, because guest checkouts and account merges make email unreliable. Products key on the variant id rather than the stock keeping unit, because merchants reuse and retype stock keeping units across seasons.
What does a Shopify to HubSpot connection take to set up?
Connecting the HubSpot built app is configuration rather than code: 4 to 8 hours of discovery and 8 to 24 hours of setup and mapping. Extending it with a keyed service for a second store or business to business data is a separate 40 to 60 hours. Both are rehearsed on a Shopify dev store and a HubSpot sandbox portal first.
Also in Retail, POS and e-commerce
Related reading
Partnerships and accreditations
HubSpot accreditations
Industry specializations
Partnerships
Scope a Shopify integration
Send the systems, the direction and the record volume. We reply with a scope and an effort band within one business day.
Thanks, we will reply within one business day
Prash or Sean reads every one of these and comes back with a scope, or with the one question we need answered first.
Where these facts come from
- GraphQL Admin API reference shopify.dev
- customers - GraphQL Admin shopify.dev
- orders - GraphQL Admin shopify.dev
- Company - GraphQL Admin shopify.dev
- About webhooks shopify.dev
- Shopify API limits shopify.dev
- Dev stores shopify.dev