ml-connector
QuickBooks OnlineCin7

QuickBooks Online and Cin7 integration

QuickBooks Online runs your accounting. Cin7 runs your inventory and procurement. Connecting the two keeps your bills and purchase orders synchronized without manual re-entry. Vendor bills created in Cin7 flow into QuickBooks Online's accounts payable, tied to the right supplier and GL account. Purchase order changes in either system stay in sync, so your committed spend is always accurate in your financial close. ml-connector handles the different authentication schemes on each side and moves the data on a schedule you control.

How QuickBooks Online works

QuickBooks Online exposes vendors, bills, bill payments, purchase orders, accounts, departments, items, employees, and journal entries through the QuickBooks Online Accounting API, a REST service accessed via OAuth 2.0 Authorization Code flow. Access tokens expire in one hour, and refresh tokens rotate every 24-26 hours; stale tokens revoke the entire auth chain and force re-authentication. QuickBooks Online supports both webhooks for real-time push notifications and a CDC polling endpoint with 30-day history. Webhook payloads contain only the entity ID, name, and operation type, so full record details must be fetched via a separate GET request. All creates and updates require the exact object representation including a SyncToken field for concurrency control.

How Cin7 works

Cin7 Core exposes suppliers, purchases, sales, customers, products, and chart of accounts through a REST API using custom API key headers for authentication (api-auth-accountid and api-auth-applicationkey, not OAuth). Cin7 supports webhooks configured through the UI Automation module for outbound events such as sales, purchases, supplier changes, and stock level updates. Webhook payloads are not HMAC-signed; there is no documented webhook signing scheme, so Cin7 recommends mutual TLS or a query-parameter token for security. The chart of accounts is read-only via API. Purchase records in Cin7 progress through the procure-to-pay lifecycle via the Approach field (ORDER, INVOICE, RECEIVE).

What moves between them

The main flow runs from Cin7 into QuickBooks Online. When a purchase is invoiced in Cin7, ml-connector reads the purchase record and creates or updates a bill in QuickBooks Online, mapped to the matching vendor and GL account. Supplier changes in Cin7 sync to vendor records in QuickBooks Online so that new suppliers are registered before their first bill arrives. Purchase orders in Cin7 that reach the INVOICE approach trigger a bill create in QuickBooks Online with line items mapped to the purchase order details. Changes in either system are polled on a schedule you define, typically aligned with your procurement workflow.

How ml-connector handles it

ml-connector stores the QuickBooks Online refresh token encrypted and refreshes the OAuth 2.0 access token before each request, capturing the new refresh token when the OAuth server rotates it every 24-26 hours. For Cin7, it stores the two API keys encrypted and presents them as headers on every request. Because both systems have no single shared event source, ml-connector polls both systems on your schedule: QuickBooks Online via the CDC endpoint for account and bill changes, and Cin7 via list endpoints for suppliers and purchases. When a new Cin7 supplier arrives, it creates or updates the matching QuickBooks Online vendor before any bill references that vendor. Purchase invoices are fetched from Cin7 with the Approach field set to INVOICE, mapped to QuickBooks Online bill line items with SyncToken concurrency control, and posted. Because QuickBooks Online webhook payloads are best-effort and may arrive out-of-order or duplicated, and Cin7 webhooks are unsigned, ml-connector uses polling as the source of truth and treats webhooks as a cache-invalidation signal. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A small-to-mid-market e-commerce and wholesale distributor runs Cin7 for inventory management and purchase orders and QuickBooks Online for accounting and tax reporting. Before the integration, the procurement team entered purchase invoices in Cin7 and the finance team manually keyed those invoices into QuickBooks Online, and supplier data had to be maintained in both systems. With Cin7 and QuickBooks Online connected, each invoice created in Cin7 flows into QuickBooks Online as a bill on the next sync, and new suppliers are automatically registered so that vendor names and account assignments stay consistent. The finance team no longer re-keys invoices, and the procurement team can be confident that their committed spend in Cin7 matches what the accountant sees in QuickBooks Online.

What you can do

  • Sync Cin7 purchase invoices into QuickBooks Online as bills, mapped to the correct vendors and GL accounts.
  • Keep QuickBooks Online vendors aligned with Cin7 suppliers so new suppliers are registered before their first bill.
  • Map Cin7 purchase line items to QuickBooks Online bill line items with proper account and department allocation.
  • Handle QuickBooks Online OAuth 2.0 token refresh and expiry, and Cin7 custom API key authentication.
  • Poll on a schedule you control with retries, audit trails, and the ability to replay failed records.

Questions

Which direction does data move between QuickBooks Online and Cin7?
The main flow is from Cin7 into QuickBooks Online. Purchase invoices and supplier data move from Cin7 into QuickBooks Online, so bills and vendors stay synchronized. QuickBooks Online chart of accounts is read-only, and vendors created in QuickBooks Online do not push back to Cin7.
How does the integration handle QuickBooks Online OAuth refresh tokens and Cin7 API keys?
ml-connector stores both credential sets encrypted and refreshes the QuickBooks Online OAuth 2.0 access token before each request, capturing the new refresh token when Intuit rotates it every 24-26 hours. For Cin7, it presents the API key headers on every request and maintains the account ID and application key in encrypted storage.
Why does ml-connector poll both systems if they both support webhooks?
QuickBooks Online webhooks are best-effort and may arrive out-of-order or duplicated, and Cin7 webhooks are unsigned with no documented signing scheme. ml-connector uses polling as the source of truth to ensure every record is fetched exactly once, and treats webhooks as a cache-invalidation signal to accelerate syncs when events arrive.

Related integrations

Connect QuickBooks Online and Cin7

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

Get started