ml-connector
Zoho BooksShipBob

Zoho Books and ShipBob integration

Zoho Books handles your multi-currency accounting. ShipBob handles your fulfillment and storage. When they are connected, fulfillment orders and charges flow from ShipBob into Zoho Books automatically, mapped to the items and currencies you use. No manual re-keying of shipment costs or inventory handoffs. ml-connector bridges the two systems, handling their different auth schemes, webhook signatures, and regional endpoints so you can focus on the business.

How Zoho Books works

Zoho Books is a cloud-based accounting platform for SMBs covering invoicing, bills, purchase orders, expenses, and multi-currency accounting. It exposes invoices, bills, items, charts of accounts, journals, contacts, and payments through a REST API with region-specific base URLs and OAuth2 authentication. Every API call requires an organization ID query parameter, and the region field in the token response determines which regional URL to use (US, EU, India, Australia, Japan, Canada, China, Saudi Arabia). Zoho Books supports both outgoing webhooks (configured via Settings > Automation > Webhooks) and polling via list endpoints with offset-based pagination. Webhooks are signed with HMAC, and webhook history is available for debugging. Access tokens expire after 1 hour and must be refreshed proactively.

How ShipBob works

ShipBob is an e-commerce fulfillment platform where merchants deposit inventory in fulfillment centers and ShipBob picks, packs, and ships orders. The REST API covers orders, shipments, products, inventory, warehouse receiving, returns, and billing. ShipBob uses OAuth2 with 1-hour access tokens and 30-day refresh tokens, with all calls requiring an Authorization Bearer header and a shipbob_channel_id header to identify the merchant channel. ShipBob supports webhooks only for outbound notifications (order.shipped, order.delivered, return.created, billing.charge.created, and others) with HMAC-SHA256 signature verification. Write operations on inventory and orders require the shipbob_channel_id header and are scoped to the merchant's own channel.

What moves between them

Fulfillment data flows from ShipBob into Zoho Books. When ShipBob completes shipments, fulfillment orders and associated charges are written to Zoho Books as invoices or expense entries, mapped to the correct items and cost centers. Shipment tracking and return events are also recorded. The sync is event-driven: ShipBob webhooks trigger ml-connector to pull the shipment details and post them to Zoho Books, typically within seconds of ShipBob's warehouse events.

How ml-connector handles it

ml-connector stores OAuth2 credentials for both Zoho Books and ShipBob encrypted, and manages token refresh independently on each side. For Zoho Books, ml-connector caches the organization ID and regional base URL from the initial OAuth token response so all subsequent calls route to the correct regional endpoint. For ShipBob, ml-connector validates incoming HMAC-SHA256 webhook signatures on the v1 envelope and verifies that the webhook-id, webhook-timestamp, and webhook-signature headers match before processing. When writing shipment costs to Zoho Books, ml-connector resolves the correct currency from Zoho Books Chart of Accounts and applies exchange rates if needed. Both systems have rate limits (Zoho at 100 requests per minute, ShipBob subject to their gateway limits), so ml-connector queues writes to Zoho Books and implements exponential backoff on 429 responses. OAuth tokens are refreshed proactively before expiry, and every record carries a full audit trail for replay if a downstream write fails.

A real-world example

A mid-sized e-commerce company sells direct-to-consumer and uses ShipBob to store inventory across three fulfillment centers and Zoho Books to manage accounting and multi-currency invoicing for international customers. Before the integration, the operations team tracked shipments in ShipBob and manually entered fulfillment costs and shipment data into Zoho Books invoices at month-end, leading to delays and discrepancies between fulfillment records and the general ledger. With ShipBob and Zoho Books connected, each shipment event and fulfillment charge automatically creates or updates the correct invoice in Zoho Books in the customer's currency, and the finance team has a complete, up-to-date record of fulfillment costs tied to each order.

What you can do

  • Automatically create or update Zoho Books invoices when ShipBob completes shipments, with fulfillment costs mapped to the correct items and currency.
  • Log fulfillment charges and returns to Zoho Books expense entries with full shipment tracking data and warehouse location details.
  • Validate ShipBob HMAC-SHA256 webhook signatures and route Zoho Books API calls to the correct regional endpoint based on the account region.
  • Manage OAuth2 token refresh on both sides, with proactive refresh before expiry to prevent outages and enforce rate limits.
  • Maintain a complete audit trail of every shipment event and expense posting, with the ability to replay failed records without duplicate entries.

Questions

How does ml-connector handle Zoho Books multi-region deployments?
ml-connector extracts the region field from the Zoho Books OAuth token response at the start of the integration and caches it. All subsequent API calls route to the correct regional base URL (US, EU, India, Australia, Japan, Canada, China, or Saudi Arabia). If a customer's Zoho Books account moves to a different region, updating the credential re-reads the region from the token and updates the routing automatically.
What ShipBob events trigger the sync to Zoho Books?
ShipBob webhooks for order.shipped, order.delivered, return.created, return.updated, and billing.charge.created trigger the sync. ml-connector validates the HMAC-SHA256 signature on each webhook, ensures the shipbob_channel_id matches the configured channel, and then queries ShipBob for the full shipment details. Those details are then mapped to Zoho Books invoices or expenses with the customer's currency applied.
How are fulfillment costs and currency handled between the two systems?
ml-connector pulls fulfillment charges from ShipBob and resolves the correct invoice or expense account and currency in Zoho Books by looking up the customer in Zoho's Chart of Accounts. If the customer transacts in a non-default currency, ml-connector applies the exchange rate from Zoho's currency settings. Every cost entry is recorded with full shipment tracking data and a reference back to the ShipBob order for audit and reconciliation.

Related integrations

Connect Zoho Books and ShipBob

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

Get started