First decide which system owns the data
The most important decision happens before the first line of code. For every kind of data it must be clear which system holds the truth and which only mirrors it.
Usually the inventory system owns articles, prices and stock; Shopify owns orders and customer accounts. Letting both sides maintain the same thing creates conflicts nobody can resolve later — and you usually notice only after an item was sold twice.
Which data flows where
A typical integration consists of four routes. Rarely more at the start:
- Articles and prices from the inventory system into the store — usually daily or on change.
- Stock levels the same way but more often. The scarcer the goods, the shorter the interval.
- Orders from the store into the inventory system, right after payment.
- Shipping and tracking data back into the store so the customer sees status.
The key decides everything
Every sync needs a unique match between both sides. In practice that is the article number, in Shopify usually the SKU field.
This is exactly where most projects fail: numbers do not match, variants have no number of their own, or the same number was issued twice. That is master-data cleanup — and it belongs before the integration, not after.
Ready-made connector or custom integration
Common systems have connectors in the App Store. If yours is among them and your process matches the standard, that is the fastest and cheapest route — building against it would be uneconomical.
The calculation flips once your process deviates: custom pricing rules, bills of materials, batches, several warehouses with priorities, or a system nothing exists for. Then the connector turns into workarounds and manual steps that cost more over time than an integration built for the process.
What Shopify provides
Shopify offers an Admin API to read and write products, stock and orders. On top of that come webhooks: Shopify actively reports when an order arrives or something changes, instead of a system polling constantly.
In practice that means orders reach your inventory system in seconds rather than in a batch run. That is not a detail — it is the difference between a warehouse that keeps up and one that lags.
What an integration has to survive
Integrations do not run undisturbed — a system is in maintenance, a response never arrives, a number does not match. What matters is what happens then.
A usable integration retries failed transfers automatically, logs what was transferred in a traceable way, and raises an alarm when something stays stuck. Without that you learn about the outage when a customer calls.
We build our integrations with logging and retries for exactly that reason. The same principle sits inside our own apps — for example zrapp, which transfers paid orders to sevdesk and Lexware Office.