Skip to content
Knowledge ERP Docs

API Reference ↗
Integrations

QuickBooks Online

Keep accounting in sync — customer and vendor records pushed to QuickBooks (and changes pulled back), customer invoices synced as QBO invoices, vendor invoices as bills, and inventory adjustments as journal entries, to the accounts you choose.

Availability — Included with the Sales or Purchasing module. Manage modules and your plan tier in Account & Billing.

The QuickBooks Online integration keeps Knowledge ERP and your books aligned so you're not double-entering financial data.

Connecting #

From the QuickBooks settings page, connect via the OAuth flow — you'll authorize Knowledge ERP against your QuickBooks company once, and the connection is stored for your account.

Connecting a different QuickBooks company. If you connect again and choose a different company from the one connected before, Knowledge ERP treats it as a new company. Nothing counts as sent to it yet. A customer or vendor that comes in from it is matched to yours by email or name. When you send a customer or vendor that was linked in the company connected before, it's linked to the new company's customer or vendor with exactly the same name, if that one isn't already linked to another of yours, so a company copied from the old one picks them up. Anything else you send is added to it as new: QuickBooks refuses a customer or vendor whose name the company already uses, and it's listed under Not sent to QuickBooks with QuickBooks' reason (see When something isn't sent). Invoices and bills aren't matched this way. The accounts that bills and inventory adjustments post to are reset and filled in from the new company, as when you first connect, so check them. Your records stay linked to the company connected before, so if you connect that one again, they carry on where they left off; its accounts are reset again in the same way.

What syncs #

You choose what is sent, per record type, and everything starts off. After connecting, the QuickBooks settings page lists five switches — Customers, Vendors, Customer Invoices, Vendor Bills, Inventory Adjustments — all off until you turn them on. Connecting QuickBooks gives Knowledge ERP permission to reach it, not permission to send it everything.

The switches decide what is sent to QuickBooks automatically. A customer or vendor created or changed in QuickBooks still comes back here through the webhook, whichever switches are on.

Two of them depend on others: an invoice has to name a customer, and a bill has to name a vendor, so Customer Invoices needs Customers and Vendor Bills needs Vendors. Turn the directory on first, or the documents will have nothing to attach to.

Worth a moment's thought before switching Customers on: it sends names, contact details, both addresses and your free-text notes to Intuit in the United States, including for people added automatically — a customer created when somebody books online, or signs in to the portal with a new address, is a customer like any other.

  • Customers and vendors (ERP → QBO) — when the matching switch is on, pushed to QuickBooks whenever a customer or vendor record is created or updated. A vendor set to a currency other than your home currency is not sent, nor is a bill in another currency: enter those in QuickBooks by hand. Each is listed under Not sent to QuickBooks, with the reason. A vendor that is linked to QuickBooks can't change currency here.
  • Customers and vendors (QBO → ERP) — whichever switches are on, when a customer or vendor is created or updated in QuickBooks, the change flows back via webhook: the matching record is updated (matched by the sync map, then email, then name), or a new one is created. A record already linked to a different QuickBooks customer or vendor isn't matched by email or name, so two that share them each get their own record here. A customer or vendor you deleted here isn't brought back by a change to the QuickBooks record it was linked to: that change is skipped. Configure the webhook URL (shown below) and verifier token in your Intuit app's webhook settings.

Customer names map straight across, in both directions: Company Name ↔ QuickBooks' CompanyName, First Name ↔ GivenName, Last Name ↔ FamilyName, and the derived display name ↔ DisplayName. So a QuickBooks company arrives here as a company rather than as a person with an odd first name.

  • Customer invoices → QBO invoices — a customer invoice is pushed to QuickBooks as an invoice in your AR when its status changes to Sent, Partially Paid, Paid, or Overdue.
  • Vendor invoices → bills — a vendor invoice is sent to QuickBooks AP as a bill when it is approved, once a bill expense account is chosen (see Accounts below). The bill has a single line for the invoice's amount due: its product lines, freight and other charges are not sent as separate lines.
  • Inventory adjustments → journal entries — adjustment, discard, and "used" movements are sent as journal entries so stock value stays reconciled, once the inventory accounts are chosen (see Accounts below). That includes the unit list's Change Status bulk action: moving units on or off In Stock is stock arriving or leaving, and it posts for the value of what moved. Two cases post nothing, both correctly — a change between two statuses that are both off the shelf (Missing to Out of Stock, say) moves no stock, and a unit that Mark missing emptied cannot be restored by that action, because marking it missing leaves it in no bin. Use Mark as Found for those. Stock booked in through POST /api/v1/inventory/units is the other exception: it is recorded in the movement log like any other stock-in, but it is not posted to QuickBooks, so loading stock from a script or an integration never writes into your books on its own.

Accounts #

Bills and inventory adjustments post to accounts in your QuickBooks company, and you choose which ones on the QuickBooks settings page. Each list shows only your company's accounts of the right type.

Account Used for Offered
Bill expense account the line of every vendor bill Expense, Other Expense and Cost of Goods Sold accounts
COGS account debited when stock leaves (adjustment down, discard, used) Cost of Goods Sold accounts
Inventory Asset account credited when stock leaves, debited when it arrives Other Current Asset accounts of the Inventory kind
Inventory Adjustment account credited when stock arrives Cost of Goods Sold, Other Expense and Other Income accounts

The Inventory Adjustment account can't be the same as the COGS account.

When you connect, if QuickBooks can be reached, the COGS and Inventory Asset accounts are filled in with the first account of each type in your company. The Inventory Adjustment account is filled in with your Inventory Shrinkage account if your company has one, unless that is the account chosen for COGS. The bill expense account is left for you to choose. You can change any of them.

Until the accounts a bill or adjustment needs are chosen, it is not sent. The settings page lists the accounts still to choose, and the record under Not sent to QuickBooks (below). The same happens if a chosen account has since been deleted or made inactive in QuickBooks: choose another one. A connection made before these settings existed has none chosen, so bills and inventory adjustments wait until you choose them. When you save the accounts, if any items can be sent now, the page says how many and offers Send now. Saving doesn't send anything by itself.

When something isn't sent #

The QuickBooks settings page lists, under Not sent to QuickBooks, every customer, vendor, invoice, bill and inventory adjustment that couldn't be sent, newest first, with the reason QuickBooks or Knowledge ERP gave. It shows the latest 50 and counts the rest.

  • Send again sends an invoice, a bill or an inventory adjustment once more, and Send all again sends every one that can be sent now, except the kinds whose switch is off: the list says so on those, and Send again still sends one. Send all again is shown only when there is something it can send. Customers and vendors are listed but can't be sent again from here yet.
  • If a send of a customer, vendor, invoice or bill was interrupted before QuickBooks answered, it may already be in QuickBooks. The next send looks for it first, as it was when it was sent, even if you have changed it since: a customer or vendor by its name then, and an invoice or bill by its number then, or by its date then when it had no number. When it finds the same record, it links to that record instead of adding it again. The same record means: for a customer or vendor, the same name, added to QuickBooks no earlier than a few minutes before the send, and not linked to anything else here; for an invoice, the same customer and total of its lines as they are now; for a bill, the same vendor and amount as they are now; and for both, the same number and date it was sent with, whichever it had, and not linked to anything else here. If QuickBooks has more than one record it could be, nothing is sent: the reason says so, and you check QuickBooks before sending it again.
  • An inventory adjustment, or an invoice or bill with neither a number nor a date, can't be looked up that way. If its send was interrupted, it isn't sent again by itself: the row asks you to check QuickBooks for it first, and offers only I've checked QuickBooks: send again. Use that button only once you've seen the record isn't in QuickBooks, or it will be added twice. Who confirmed it, and when, is recorded. An invoice or bill sent from now on with neither a number nor a date stays this way even if you add a number or date to it later, because the copy in QuickBooks, if there is one, still has neither.

What the look-up can't catch:

  • A bill's vendor or amount, or an invoice's customer or the total of its lines, changed in between. If they are changed after an interrupted send, the copy in QuickBooks no longer matches, and the bill or invoice is added again. That includes a bill moved to another vendor, or an invoice to another customer. A changed number or date doesn't matter for one sent from now on, because it is looked for by the ones it was sent with; a bill whose interrupted send was before this release is looked for by its number and date as they were when this release was installed.
  • A name, number or date changed in QuickBooks in between. A record is looked for by what it was sent with: a customer or vendor by its name, and an invoice or bill by its number and date. If any of those is changed on the copy in QuickBooks before the next send, it isn't found, and it is added again.
  • A customer or vendor of the same name added in QuickBooks by someone else, at any time after the send or in the few minutes before it, can be taken for the one the send added, unless it is already linked to something here.
  • A changed name, number, date or invoice line isn't sent to QuickBooks by itself. When the look-up finds the copy, the record is linked to it as it is in QuickBooks: with the name, or the number and date, it was sent with, and for an invoice, the lines it was sent with, even if they have changed since without changing their total. Change them in QuickBooks too if you need them to match.
  • Retries an administrator starts outside this page (re-running a failed background job by hand) are covered by the same look-up, but two of them for the same record at the same moment are not prevented from running together.

Receiving changes from QuickBooks #

Inbound customer/vendor sync arrives through an Intuit webhook. In your Intuit app's webhook settings, point the notification URL at https://your-domain.com/quickbooks/webhook and copy the verifier token into the QUICKBOOKS_WEBHOOK_VERIFIER_TOKEN environment variable — every inbound notification's signature is validated against it before anything is imported. Subscribe to the Customer and Vendor entities; create and update events are honored (deletes are ignored).

Scope #

This integration is the bridge to accounting, not a replacement for it. Knowledge ERP deliberately does not run its own general ledger — QuickBooks remains the system of record for double-entry accounting.