ml-connector
Sage IntacctShipBob

Sage Intacct and ShipBob integration

Sage Intacct runs your accounting and GL; ShipBob runs your fulfillment. Connecting them keeps your inventory records and fulfillment costs accurate in Intacct without manual re-entry. Shipments processed by ShipBob flow back to Intacct as GL postings allocated to the right cost center, and inventory levels stay in sync. ml-connector manages the very different APIs on each side and handles the auth complexity both systems require.

How Sage Intacct works

Sage Intacct exposes vendors, payable bills, payments, GL accounts, and financial dimensions through an XML gateway endpoint over HTTPS POST. Authentication is session-based: a pair of partner and user credentials exchanges for a sessionid in an initial getAPISession call, and that sessionid is cached for 50 minutes before automatic refresh. All operations serialize through the single XML gateway endpoint, and responses are HTTP 200 even on application-level errors, so error detection requires parsing the XML body for errormessage tags. Intacct does not publish webhooks, so all integrations poll on a schedule.

How ShipBob works

ShipBob exposes orders, shipments, products, inventory, fulfillment center locations, and billing through a REST API at https://api.shipbob.com with a /2026-01 version path. Authentication is OAuth2 with a 1-hour access token lifetime and a 30-day refresh token lifetime, or a Personal Access Token for single-merchant integrations. Every API call requires an Authorization Bearer header and a shipbob_channel_id header to identify the application channel. ShipBob supports webhooks on order shipped, shipment tracking updated, inventory moved, and warehouse receiving events, with HMAC-SHA256 signature verification using a v1 envelope.

What moves between them

ShipBob shipments and warehouse receiving events flow into Sage Intacct on every webhook notification. ml-connector reads the shipment detail, extracts fulfillment cost, inventory weight, and storage location, then posts the corresponding GL journal entries into Intacct cost centers mapped to ShipBob fulfillment centers. Inventory movements sync bidirectionally: ShipBob warehouse receiving orders trigger Intacct inventory item adjustments, and Intacct stock transfers can trigger ShipBob receiving operations if your Intacct workflow includes warehouse receiving.

How ml-connector handles it

ml-connector stores Sage Intacct partner credentials and ShipBob OAuth tokens encrypted and refreshes the Intacct sessionid before it expires every 50 minutes by requesting a new getAPISession call. On the ShipBob side, it refreshes the OAuth2 access token on every 401 response and tracks the 30-day refresh token expiry to avoid a hard failure. Every ShipBob webhook payload is verified against the HMAC-SHA256 signature in the webhook-signature header before processing, using the Webhook shared secret per the v1 envelope spec. Shipment costs are mapped to Intacct GL accounts and cost centers based on the ShipBob fulfillment center location, and inventory adjustments are mapped to Intacct DIMENSION vendor tables for multi-warehouse tracking. Intacct's lack of native idempotency is handled by including a uniqueid in the control block of every XML request, so retried operations deduplicate server-side. All records carry a full audit trail and can be replayed if an Intacct GL posting fails.

A real-world example

A mid-market e-commerce company operates inventory across two ShipBob fulfillment centers and runs Sage Intacct for accounting and financial reporting. Before the integration, fulfillment costs and inventory movements from ShipBob were exported monthly and manually posted to Intacct GL accounts and cost centers, creating delays in inventory valuation and month-end close. With Sage Intacct and ShipBob connected, every shipment and warehouse receiving event automatically posts to the right GL account and cost center in real time, inventory is reconciled daily against ShipBob stock levels, and financial close starts with fulfillment costs already recorded and fully auditable.

What you can do

  • Post ShipBob fulfillment costs into Sage Intacct's general ledger, allocated by ShipBob fulfillment center location to the matching Intacct cost center.
  • Sync ShipBob inventory movements and warehouse receiving events into Intacct inventory item adjustments and dimension updates in real time.
  • Map ShipBob fulfillment centers and channels to Intacct GL accounts and cost centers without code changes.
  • Authenticate ShipBob with OAuth2 token refresh and Sage Intacct with session-based XML gateway authentication, and verify every ShipBob webhook signature.
  • Process ShipBob webhooks and defer Intacct posts until credentials and mappings are available, with automatic retries and a full audit trail on every transaction.

Questions

How does ml-connector handle Sage Intacct's session-based authentication and 50-minute expiry?
ml-connector requests a fresh getAPISession call before the 50-minute expiry by caching the sessionid and refreshing it on a timer. If a call returns an error indicating the session has expired, the next call automatically initiates a new getAPISession to restore access without interrupting the webhook processing queue.
Does ml-connector support ShipBob's OAuth2 and Personal Access Token options?
Yes. For multi-merchant integrations, ml-connector uses OAuth2 Authorization Code flow and automatically refreshes the access token when a call returns 401, tracking the 30-day refresh token expiry. For single-merchant integrations, Personal Access Tokens are supported but do not require refresh since they do not expire.
How are ShipBob fulfillment costs mapped to Sage Intacct GL accounts and cost centers?
ml-connector maintains a mapping table between ShipBob fulfillment center location and Intacct GLACCOUNT and DIMENSION identifiers. When a shipment webhook arrives, the fulfillment center location is looked up in the mapping table, and the GL posting is constructed with the matched Intacct GL account and cost center codes, ensuring costs land on the right financial dimension.

Related integrations

Connect Sage Intacct and ShipBob

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started