QAD and ShipBob integration
QAD Adaptive ERP runs manufacturing, procurement, and finance. ShipBob runs e-commerce fulfillment across distributed warehouses. Connecting the two keeps the catalog, inbound stock, on-hand inventory, and fulfillment charges in agreement without re-keying. QAD items become ShipBob products, QAD purchase orders become ShipBob warehouse receiving orders, and ShipBob inventory, shipments, and billing invoices flow back into QAD. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.
What moves between them
Two directions. From QAD into ShipBob, item masters publish into the ShipBob product catalog, and purchase orders for stock headed to ShipBob warehouses become warehouse receiving orders so the inbound shipment is expected. From ShipBob into QAD, inventory levels per fulfillment center update QAD on-hand quantities, shipment confirmations with tracking record fulfillment against the originating QAD order, and ShipBob billing invoices post as supplier invoices in QAD AP. Reference data such as SKUs and fulfillment center identifiers is aligned so quantities and charges land on valid QAD items and accounts.
How ml-connector handles it
ml-connector stores both credential sets encrypted, presents the QAD tenant URL per customer since QAD publishes no shared base address, and refreshes the ShipBob OAuth access token when a call returns 401, replacing the rotating refresh token on each use. On every ShipBob write it sets the shipbob_channel_id header read from the channels endpoint, because writes are rejected without it. QAD item numbers are mapped to ShipBob SKUs first, so products, inbound receiving, and inventory all reconcile on the same part. Because QAD cloud is pull-only, ml-connector polls QAD items and purchase orders on a schedule, while ShipBob shipment, billing, and receiving events arrive over signed webhooks whose HMAC-SHA256 signature is verified before use. Posting a ShipBob billing invoice into QAD AP respects QAD's three-way match, so a receipt is recorded before the invoice. ShipBob weights are in ounces and dimensions in inches and are converted before they reach QAD, and ml-connector backs off when the ShipBob rate-limit header runs low. Inventory distribution across fulfillment centers is only read after a receiving order completes. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A direct-to-consumer brand of roughly 80 staff manufactures and assembles goods in QAD Adaptive ERP and outsources e-commerce fulfillment to ShipBob across several fulfillment centers. Before the integration, an operations clerk re-entered new SKUs into ShipBob by hand, emailed spreadsheets of inbound purchase orders to the warehouse team, and reconciled ShipBob fulfillment invoices against QAD by exporting reports each month. With QAD and ShipBob connected, items publish automatically, purchase orders create warehouse receiving orders so inbound stock is expected, and inventory, shipment confirmations, and ShipBob billing invoices flow back into QAD. Inventory in the ledger matches what is on the shelf, and fulfillment charges land in AP without the monthly spreadsheet chase.
What you can do
- Publish QAD item masters into the ShipBob product catalog so SKUs stay consistent across both systems.
- Turn QAD purchase orders into ShipBob warehouse receiving orders so inbound stock is expected at the right fulfillment center.
- Read ShipBob inventory levels per fulfillment center back into QAD to keep on-hand quantities accurate.
- Post ShipBob billing invoices into QAD AP through its three-way match, after the matching receipt is recorded.
- Authenticate ShipBob with OAuth2 or a personal access token and the required channel id header, and QAD with its tenant-specific token.
Questions
- Which direction does data move between QAD and ShipBob?
- Both directions. QAD items publish into ShipBob as products, and QAD purchase orders become ShipBob warehouse receiving orders. ShipBob then sends inventory levels, shipment confirmations, and billing invoices back into QAD so on-hand counts and fulfillment charges stay current.
- Does ShipBob require the channel id header on every call?
- ShipBob requires the shipbob_channel_id header on every write call, and rejects writes without it. ml-connector reads the channel id from the ShipBob channels endpoint after OAuth completes and sets it on each write. The header is ignored on read-only calls but is included everywhere to keep behavior uniform.
- How does the integration handle QAD's tenant-specific URL and lack of webhooks?
- ml-connector accepts the full QAD instance URL per customer, since QAD publishes no shared base address. Because QAD cloud is pull-only, it polls QAD items and purchase orders on a schedule, while ShipBob fulfillment, return, and billing updates arrive over signed HMAC-SHA256 webhooks that are verified before posting into QAD.
Related integrations
More QAD integrations
Other systems that connect to ShipBob
Connect QAD and ShipBob
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started