QuickBooks Desktop and ShipStation integration
QuickBooks Desktop holds your accounting records, customers, items, and invoices. ShipStation manages order fulfillment, carrier selection, and shipment tracking. Connecting them keeps your accounting records aligned with what actually shipped. New orders entered in ShipStation pull in customer and item details from QuickBooks Desktop, and return shipment confirmation so QuickBooks Desktop reflects the revenue. ml-connector handles the customer-hosted QBWC polling architecture and ShipStation's cloud REST APIs on the same schedule.
What moves between them
Orders and shipment updates move bidirectionally. When new orders arrive in ShipStation, ml-connector resolves the customer and items against QuickBooks Desktop's customer and item lists to validate that the order references known entities and to pull invoice details. When ShipStation marks a shipment as complete, ml-connector posts the shipment confirmation back into QuickBooks Desktop as a linked transaction or invoice update, keyed by the order number. Item quantities in ShipStation orders are reconciled against QuickBooks Desktop inventory on a polling schedule tied to order receipt batches rather than per-order. Deletions and corrections flow as updates, not new transactions, using the order number as the deduplication key.
How ml-connector handles it
ml-connector runs a background poll that registers with QuickBooks Desktop's QBWC via the SOAP authenticate() method, receives a session token, and uses that token for all QBXML queries in that session. It queries for modified invoices, items, and customers in QuickBooks Desktop over a time window, and separately polls ShipStation's order list with a modifyDate filter and fetches full order payloads from webhook-delivered resource URLs. For each order in ShipStation, it looks up the customer and items in the QuickBooks Desktop query results. If the customer or item does not exist, the integration alerts rather than creating unknown entities. Once an order is validated, ml-connector fetches the shipment status via ShipStation's REST endpoint, and if the status is Shipped, it creates a QuickBooks Desktop invoice or journal entry to record the revenue and ship date. The challenge is that QuickBooks Desktop edits require the current EditSequence (a version counter), so ml-connector must re-query before updating, and QBXML requests time out at approximately 60 seconds, so large item lists are queried in pages. ShipStation's rate limit of 40 requests per minute on V1 means the integration spaces out polls and batches customer/item lookups to avoid throttling. Deduplication relies on the order number as the primary key in both systems.
A real-world example
A mid-sized e-commerce merchant fulfills orders from multiple online channels using ShipStation, and tracks inventory and revenue in QuickBooks Desktop. Before the integration, the fulfillment team entered each shipped order into QuickBooks Desktop by hand after packing it, which was error-prone and delayed revenue recognition. The finance team then spent hours at month-end reconciling revenue in QuickBooks Desktop against actual shipments from ShipStation. With the integration, each order that ships in ShipStation automatically flows into QuickBooks Desktop with the correct customer, items, amounts, and ship date, so the two systems stay in sync. Revenue is recognized on the ship date, not the data-entry date, and month-end reconciliation is now a quick audit of any orders that failed to sync.
What you can do
- Pull customer and item details from QuickBooks Desktop to validate orders created in ShipStation, preventing orphaned or unknown-entity orders.
- Post shipment confirmations from ShipStation into QuickBooks Desktop as revenue journal entries or invoice updates, keyed by order number.
- Manage QBWC session tokens on a polling schedule and handle the EditSequence version counter when updating QuickBooks Desktop records.
- Poll both QuickBooks Desktop and ShipStation on a schedule that respects rate limits and QBXML query timeouts, with automatic pagination for large item lists.
- Detect and deduplicate orders by order number and maintain a full audit trail of every order sync, shipment confirmation, and validation failure.
Questions
- How does the integration handle the customer-hosted QBWC requirement?
- QuickBooks Desktop requires QBWC, a Windows agent running on the customer's machine with QuickBooks open and logged in. ml-connector acts as the remote SOAP endpoint that QBWC calls on a configurable poll interval. The integration registers with QBWC using a session-token handshake and receives a token for use in all subsequent QBXML queries during that session. This means the customer must set up QBWC once and keep QuickBooks running; ml-connector handles the server side.
- Which direction does data flow between QuickBooks Desktop and ShipStation?
- Orders and shipments flow both directions. When a new order arrives in ShipStation, ml-connector validates the customer and items against QuickBooks Desktop and pulls invoice details. When ShipStation marks a shipment as complete, ml-connector posts the confirmation back into QuickBooks Desktop as a revenue entry or invoice update, using the order number as the deduplication key. Item quantities in ShipStation are reconciled against QuickBooks Desktop inventory on a polling schedule.
- What happens if an order in ShipStation references a customer or item that does not exist in QuickBooks Desktop?
- ml-connector queries QuickBooks Desktop for the customer and item in the order and alerts if either is missing rather than creating unknown entities. The order is flagged for manual review, and the integration continues with the next order in the batch. This prevents silent corruption of QuickBooks Desktop with orphaned data and ensures accounting integrity.
Related integrations
More QuickBooks Desktop integrations
Other systems that connect to ShipStation
Connect QuickBooks Desktop and ShipStation
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started