QuickBooks Online and ShipStation integration
QuickBooks Online tracks your company's invoices, bills, customers, and accounts. ShipStation manages your orders across multiple sales channels and generates shipping labels. Connecting the two keeps your accounting records in sync with what you actually shipped. Orders placed in your sales channels flow into ShipStation, and ml-connector automatically creates or updates QuickBooks customers and sales records so your accounts receivable and revenue recognize what went out the door, complete with shipping costs posted to the right accounts.
What moves between them
Orders created in ShipStation fire ORDER_NOTIFY webhooks. ml-connector receives the webhook, fetches the full order details via ShipStation API, creates a corresponding QuickBooks customer (if not already present), and posts an invoice with line items for order charges and a separate line for shipping cost. Shipment notifications (SHIP_NOTIFY, FULFILLMENT_SHIPPED) trigger updates to the QuickBooks invoice status. Reference data such as products and shipping methods are polled periodically and mapped to QuickBooks items and accounts. All syncs flow from ShipStation into QuickBooks; QuickBooks invoices and payments are not written back to ShipStation.
How ml-connector handles it
ml-connector stores ShipStation API keys encrypted and presents them on every request via the API-Key header for V2 (or Basic Auth for V1). It stores QuickBooks OAuth credentials encrypted and refreshes the access token when it expires or returns 401. Because ShipStation webhook payloads contain only resource pointers, ml-connector fetches full order and shipment data via authenticated GET requests immediately after receiving each webhook. Customer creation is implicit in ShipStation (via orderUsername in the order payload), so ml-connector creates QuickBooks customers with email and name extracted from the order. Shipping costs are routed to a configurable QuickBooks account per shipping method so they are recognized separately from product revenue. ml-connector detects ShipStation rate limit responses (429 headers with X-Rate-Limit-Remaining and X-Rate-Limit-Reset) and backs off before retrying. QuickBooks requires SyncToken on every update, so ml-connector fetches the current invoice SyncToken before posting updates. Orders that are shipped or cancelled in ShipStation cannot be modified via API, so ml-connector treats those as terminal and does not attempt further syncs. Every order, customer, and invoice carries a full audit trail with timestamps and error details, so if a downstream QuickBooks POST fails, the record can be replayed once the issue is resolved.
A real-world example
A mid-sized e-commerce business selling through Shopify, Amazon, and their own website uses ShipStation as the order and fulfillment hub. Before the integration, their accounting team received ShipStation shipment reports daily, manually entered each order as an invoice in QuickBooks, and allocated shipping costs to the correct accounts. Reconciliation at month-end took two days because orders in ShipStation, actual shipments, and QuickBooks invoices were not automatically aligned. With QuickBooks Online and ShipStation connected, each order that ships automatically creates an invoice in QuickBooks with the customer, line items, and shipping cost posted to the revenue and shipping accounts. The team no longer re-enters data, and month-end reconciliation is complete within hours.
What you can do
- Create QuickBooks customers automatically from ShipStation orders, using email and order details from the webhook.
- Post ShipStation orders as QuickBooks invoices with line items for products and a separate line for shipping, allocated to the correct accounts.
- Update QuickBooks invoice status when ShipStation marks orders as shipped or fulfilled, keeping the two systems in sync.
- Authenticate ShipStation with API Key headers and QuickBooks with OAuth 2.0, handling token refresh and rate limits transparently.
- Maintain a full audit trail of every order, customer, and invoice, with error replay so failed syncs can be retried without re-processing successful ones.
Questions
- What data flows from ShipStation into QuickBooks Online?
- Orders and shipments from ShipStation become customers and invoices in QuickBooks Online. When a new order is created in ShipStation, ml-connector creates a QuickBooks customer (if not already present) and posts an invoice with product line items and a separate line for shipping cost. Shipment confirmations update the invoice status in QuickBooks. Reference data such as products and shipping methods are polled periodically and mapped to QuickBooks items and accounts.
- Does ml-connector handle ShipStation's API Key authentication and QuickBooks OAuth?
- Yes. ml-connector stores both credential sets encrypted, presents the ShipStation API Key on every request, and refreshes the QuickBooks OAuth token when it expires or is rejected. It also monitors ShipStation rate limit headers (X-Rate-Limit-Remaining, X-Rate-Limit-Reset) and backs off before retrying, so neither system is overwhelmed.
- How does ml-connector handle ShipStation webhook payloads that contain only pointers?
- ShipStation webhooks for orders and shipments include only the resource URL and type, so ml-connector immediately fetches the full order or shipment data via an authenticated GET request. This ensures the invoice posted to QuickBooks has complete and current information, including customer details, line items, and shipping cost.
Related integrations
More QuickBooks Online integrations
Other systems that connect to ShipStation
Connect QuickBooks Online and ShipStation
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started