Skip to content
BlackBadger

Integrations. Shopify

Shopify integration that keeps orders, inventory, and the books in agreement.

Shopify runs the storefront and the checkout well. The trouble starts where the order leaves Shopify. The warehouse works from a printout, inventory lives in a spreadsheet as well as in the store, the accountant gets a monthly export, and if you ask which wholesale accounts also buy online, nobody's sure. Each of those is a copy of Shopify's data. Copies go stale.

We connect Shopify to the systems around it through its Admin API and webhooks. An order placed online, or taken at the counter through Shopify POS, shows up in fulfillment, in accounting, and in your customer records within moments, and stock sold in one place is stock deducted everywhere. Shopify stays the store. Everything else keeps up with it.

What we connect

What gets connected between Shopify and your other systems?

The flows below are the ones we build most often. The scope for your integration names exactly which of them apply, in which direction, and which system wins when the two disagree.

  • Orders, edits, cancellations, and refunds, pushed into your operations, warehouse, or ERP system with the line items, discounts, taxes, and shipping intact. The Shopify order number stays on both sides.
  • Inventory per location. Shopify gets updated when your warehouse or ERP moves stock, your system gets updated when Shopify sells, and you stop overselling what you no longer have.
  • Products and variants published to Shopify from wherever the catalog is maintained, or pulled the other way, matched on SKU and never on title.
  • Customers, with online buyers and wholesale accounts matched into your CRM and their order history attached, so a repeat buyer gets recognized as one.
  • Fulfillment and tracking. A shipment created in your warehouse system goes back to Shopify with its tracking number, which lets Shopify send the customer its own shipping notification.
  • Payouts and accounting, with Shopify Payments payouts broken out into orders, refunds, and fees, and sales posted to QuickBooks Online either as a daily summary or one entry per order, whichever your accountant prefers.

How it works

How does a Shopify integration work?

Shopify's Admin API reads and writes orders, products, inventory, and customers. Its webhooks announce what just happened, an order created or paid, a fulfillment, an inventory change, a refund. Every one of them gets verified against your app's secret before we trust it. We also back the webhooks with a scheduled sweep, because a delivery can go missing and Shopify stops sending to an endpoint that keeps failing.

Writes are keyed to the Shopify order or product ID plus a stable reference on your side, so a retried call can't create a second fulfillment or deduct the same stock twice. Calls respect Shopify's rate limits and back off when they're told to. Large catalog and order-history syncs go through Shopify's bulk operations, which is what they're there for.

Anything that fails gets queued with its payload and raised to a person. A reconciliation report compares Shopify against your system and lists the orders missing on either side, the inventory counts that disagree by SKU and location, and the payouts that don't sum to the bank deposit. All of it is built against a development store first, with test orders. It only touches your live store after you've checked the mapping.

The stakes

What does a bad Shopify integration cost you?

More than the build, because integrations fail without setting off an alarm. Nobody gets a message saying the numbers stopped agreeing. Somebody notices at month end, and then nobody trusts either system until it is proven again. The failures below are the ones worth designing against from the start.

  • Inventory drifts and somebody oversells. A missed webhook or a one-way sync leaves stock counts that look right in Shopify and are wrong in the warehouse. You find out when a customer buys something that shipped out an hour earlier.
  • An order webhook lands twice and the warehouse gets two fulfillments for one order. Two boxes go out. The second comes back as a return, and now the stock, the shipping cost, and the payout reconciliation are all wrong for that order.
  • Tax, shipping, and discount lines land in the wrong accounts. Shopify separates them on every order, so a summary posting that lumps them together leaves the sales figure looking fine while the tax liability and the margin are both misstated. Fixing it takes a stack of journal entries.

The order of work

What happens, in what order, on a Shopify integration?

In this order, every time. The mapping comes before the code, and the reconciliation comes before we call it done. Nothing here is a date. The sequence is fixed, and the runway is set in your written scope once we have seen your actual data.

  1. 01

    Match on SKU, not title

    The first argument to settle is identity. Products match on SKU, customers on email or an ID you control, orders on the Shopify order number. Then we write down which system owns stock per location, which one owns the catalog, and what happens when a title, a price, or a variant changes on the side that doesn't own it.

  2. 02

    Build on a development store

    A Shopify development store gets loaded with your real catalog shape. The variants, the multi-location stock, the discount codes, the wholesale accounts. We install a custom app scoped to only the data the integration touches, then run test orders through the online checkout and through Shopify POS so both paths get exercised.

  3. 03

    Handle the retries first

    Webhooks are verified against the app secret and recorded by their delivery ID, so a repeat can't create a second fulfillment or deduct the same stock twice. Shopify stops delivering to an endpoint that keeps failing, so a scheduled sweep re-reads changed orders and inventory as a backstop. Bulk operations handle the large catalog and order-history pulls instead of thousands of small calls.

  4. 04

    Count everything twice

    Before go-live the reconciliation pass compares the two sides item by item. It lists orders missing on either side, inventory that disagrees by SKU and location, refunds applied in one place only, and payouts that don't sum to the deposits. Your operations lead reads it and so does your accountant. Anything left over gets a written reason.

  5. 05

    Cut over and monitor

    The app goes on the live store and gets watched from the first order. The monitor alerts on failed webhook deliveries, on a queue that stops draining, on an access scope that needs re-approval after an app update, and on a quiet stretch with no orders while the store is open. A sale that never reached the warehouse should set off an alarm before it turns into a support ticket.

Limits

What we will not do

Cheaper to hear now than to discover halfway through. If one of these is what you are actually after, we will say so on the first call rather than take the work.

  • We won't build a one-way inventory sync and let someone assume it runs both ways. If stock only flows from the warehouse to Shopify, the scope says so and the reconciliation report proves it. That assumption is how an oversold order happens.
  • We won't sync a product catalog that doesn't have reliable SKUs. Matching on title is how two products become one and one becomes three. Fixing the SKUs is your team's job, and it comes before anything gets connected.
  • We won't build a custom app where a supported connector already does the job. If an existing one covers your mapping and your volume, we'll set it up and tell you that's what we did, even though building from scratch would have been the bigger job.

Questions

What people ask about Shopify integrations

Does this work with Shopify POS as well as the online store?

Yes. An order taken at the counter through Shopify POS arrives on the same orders API and the same webhooks as an online one, and it's tagged with its location, so the integration handles it the same way and the stock comes off the right place.

Can it keep inventory in sync with our warehouse or ERP?

Yes, per location. The scope says which system is the source of truth for stock and which way each change flows. Events drive the sync from both sides, so a sale or a receipt lands in the other system as soon as its webhook arrives. And if a count still drifts, that's what the reconciliation report is for.

How do Shopify sales get into QuickBooks Online?

Two ways, and it's your accountant's call. A daily summary entry that books sales, taxes, discounts, refunds, and fees, or one invoice or sales receipt per order. Either way, Shopify Payments payouts are matched to the deposits in your bank feed so the books reconcile.

Do you build a Shopify app or use an off-the-shelf connector?

If a connector already does what you need and does it reliably, we'll say so and set it up. When the mapping, the volume, or the system on the other end is specific to you, we build a custom app that installs in your store with only the access scopes it needs. Either way the connection is in your name and you can pull it out.

Do you need access to our store?

Only through a custom app you install, scoped to the data the integration touches, with its token kept in a secrets vault. We don't need staff logins. You can revoke the app from your Shopify admin whenever you want.

How are refunds, returns, and canceled orders handled?

They come through the same webhooks as the order itself, and each one gets an outcome you agreed to in the scope. Shopify sends a refund event with the line items and amounts on it, so a partial refund reduces the right lines and leaves the order standing. Returned stock only goes back to the location it came from if the return was restocked, because Shopify records those as two separate decisions, and treating them as one is how phantom inventory shows up. A canceled order comes out of the fulfillment queue and gets flagged in accounting. Nothing is deleted.

What about our order history from before go-live?

Some of it should come across, and usually not all of it. Shopify bulk operations pull historical orders and customers, and that part's worth doing, because it's what makes a repeat buyer recognizable and lifetime value in your CRM correct. Posting years of old orders into accounting is a different question. Those periods are closed and the numbers are already filed, so we normally bring history in as reference records and start the accounting sync from a cutover date. Which history actually matters is a business decision, and it gets made before the import runs.

Who fixes it when Shopify changes their API?

We do while we're engaged, and after that anyone can, because the app and the code are yours. Shopify versions its Admin API and retires the older versions on a published schedule, so an upgrade is planned work you can see coming. New access scopes need a store admin to re-approve them, and the monitor flags that the moment a call starts failing on permissions. What doesn't survive neglect is an integration nobody watches. A retired API version stops answering, and with no alert on it the store keeps selling while the warehouse hears nothing.

Related

Where this fits

An integration is rarely the whole job. Usually it is one part of a CRM, an operations system, or a client portal that needs Shopify to agree with it.

Tell us which two systems disagree

Book a strategy call, or send a short note about what gets retyped today and where the numbers stop matching.

No newsletter, no drip sequence. One reply from a person.