Connect and disconnect QuickBooks

A standard consent flow connects your QuickBooks company, and disconnecting revokes access at Intuit as well as wiping it locally.

What it is

OAuth with CSRF protection: a one-time state token is stored before redirecting to Intuit and validated on the way back, so the callback can be proved to answer a request this system initiated. On success the tokens and the company id are stored encrypted and the company name and plan tier are fetched. Disconnect revokes at Intuit first, then wipes locally.

Also called: link quickbooks · authorise quickbooks · disconnect quickbooks · revoke access

See it
QuickBooks Online
QuickBooks Online

Sync customers, estimates, invoices, change orders, and payments with QuickBooks Online. When connected, your platform Send-Invoice button creates and sends the invoice through QB so your accountant sees it in real time.

Connected
Company
Yoder Post-Frame Buildings LLC
Plan
Essentials
Upgrade to Plus for per-job profitability (Class tracking) and native ChangeOrder support.
Environment
Production
Realm ID
9341780255106634
Connected
Mar 12, 2026, 9:04 AM
Last synced
Aug 26, 2026, 7:41 AM
Disconnect QuickBooksOpen QuickBooks ↗
The not-connected state with a single Connect QuickBooks button, and the connected state beside it. src/components/settings/QuickBooksIntegrationSection.tsx. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
How it works
  1. 1Auth start stores a state row and redirects to Intuit with the requested scopes.
  2. 2The callback validates state and expiry, exchanges the code for tokens, stores them encrypted, fetches company info, deletes the consumed state row and redirects back with a success or error flag.
  3. 3Missing metadata self-heals: the status endpoint backfills company name and plan tier once if the callback did not capture them.
  4. 4Disconnect swallows a revoke failure so the user is never left stuck showing 'connected'.
Why we built it

Disconnecting an accounting integration has to actually revoke access, and it has to happen within a day of being asked — so a disconnect completes there and then instead of being queued and hoped for. The optional project-tracking permission is opt-in for a hard reason: if a company file does not have project tracking enabled, asking for it does not degrade gracefully, it rejects the entire connection. The base connection therefore asks only for what every company file can grant.

The problem
  • A connect flow that fails entirely because of an optional permission.
  • Disconnects that only cleaned up locally, leaving access live at Intuit.
  • A connection stuck without its company name.
Sound familiar?
What you get
Connect in a normal consent flow with no key copying.
Disconnect genuinely revokes, in seconds.
A partially-captured connection repairs itself.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →