QuickBooks integration
How OAuth, purchase order sync, and QuickBooks Online mapping work for your shop.
The QuickBooks integration links Inventory Mate to QuickBooks Online so purchase orders (POs) you create or update in Inventory Mate can be reflected as QuickBooks Purchase Orders in the connected company (or QuickBooks sandbox, when using sandbox mode).
End-to-end workflow
Here is the complete flow from creating a PO to having it ready for your bookkeeper:
- Create a PO in Inventory Mate — a matching Purchase Order is automatically created in QuickBooks.
- Receive the PO in Inventory Mate — your Shopify inventory levels update automatically.
- Mark the order delivered in Inventory Mate — then go into QuickBooks, open the PO, and click Copy to Bill. This creates an open Bill in Accounts Payable and closes the QuickBooks PO, ready for your bookkeeper.
- Your bookkeeper pays the Bill when the vendor invoice arrives — this is what posts to your inventory asset account.
The Copy to Bill step is a single click in QuickBooks. It keeps everything clean and ensures the PO hits your books correctly before your bookkeeper closes it out.
What you set up in the app
- Connect — On Dashboard → Integrations, use Connect for QuickBooks. You are sent through Intuit’s OAuth sign-in to authorize Inventory Mate with the
com.intuit.quickbooks.accountingscope. The connection is stored per shop and tied to your QuickBooks company (realmId). - Purchase order sync — After you are connected, turn on PO sync for that shop. That enables both:
- Syncing POs to QuickBooks, and
- Auto sync on save (when you save a PO, the app attempts a sync automatically if these are on).
If PO sync is off, Inventory Mate does not call QuickBooks for your POs, even if you stay connected.
When a PO is synced
With PO sync and auto sync on save enabled, saving a purchase order from the PO flow triggers a sync to QuickBooks (after a successful save). The integration checks that QuickBooks is still connected and that sync is allowed for the shop before calling the sync API. Each run is tagged for logs (for example as automatic when it follows a save).
What gets created or updated in QuickBooks
Each sync sends your PO to QuickBooks as a Purchase Order transaction (API minorversion=70).
- Document number — QuickBooks receives a document number of the form
PO-{number}, using your user-facing PO number when available (so it lines up with what you see in Inventory Mate). This helps match and update the right object in QuickBooks on later saves. - Vendor — The supplier on the PO is resolved to a QuickBooks vendor. If a matching vendor is not found, the integration can create one using the supplier name. Mappings can be stored so repeat syncs stay consistent.
- Line items — Product lines are sent as item-based expense lines: quantity, unit cost, and line totals follow your PO (including tax as described on the line). Products are mapped to QuickBooks items (products/services) as needed, using your chart of accounts (income/expense-style accounts) so new items can be created when required.
- Cost lines — Additional cost rows on the PO (fees, adjustments, etc.) are sent as account-based lines against a suitable expense account.
- Addresses and email — If your supplier record has a usable address, it can be sent as vendor address on the PO. A valid supplier email can be attached for PO email in QuickBooks. The destination (ship-to) on the PO is resolved to a ship-to address in QuickBooks when configuration allows.
- Dates and notes — Transaction date, due date (when set), internal reference in Private Note, and your memo / reference fields are passed through where the API supports them.
Create vs update
- The first time a given Inventory Mate PO syncs, QuickBooks creates a new purchase order (unless one is already found by document number).
- Inventory Mate stores a link between the PO id and the QuickBooks Purchase Order id. The next time you save, the integration updates that same QuickBooks PO (using QuickBooks’
SyncTokenrules). - If the link is missing but a PO with the same document number already exists in QuickBooks, the integration can reattach to that record and then keep it updated.
Environments (sandbox vs production)
The app uses Intuit’s sandbox or production QuickBooks API base URL based on server configuration (QUICKBOOKS_ENV). Your OAuth app in the Intuit Developer portal, redirect URI, and company (sandbox vs live) should match how the app is deployed.
If something goes wrong
- Reconnect — If the access or refresh token can no longer be refreshed (for example after long disconnection or revoked access), sync may fail with a message to open Integrations and connect QuickBooks again. Disconnecting in the app clears the stored connection for that shop.
- Logging — Successful and failed sync attempts can be recorded for troubleshooting; error responses may include an Intuit transaction id (
intuit_tid) that Intuit support can use. - Validation — A PO with no line items and no positive cost lines cannot be synced (there is nothing valid to send as purchase order lines).
Related
- Purchase Order Management — how POs work inside Inventory Mate.
- Suppliers — supplier records used for vendor name and address on the QuickBooks side.