QuickBooks Integration for Custom Business Software: What US Companies Need
QuickBooks integration for custom business software: record ownership, OAuth tokens, API limits and pricing tiers, sales tax traps, and what a project involves.
- Published
- Updated
- Reading time
- 7 min
Most custom business software that touches money needs to send invoices, payments, customers and products into QuickBooks so the accountant works in one place. A dependable QuickBooks integration decides up front which system owns each record, handles Intuit's OAuth connection lifecycle, stays inside the API limits and pricing tiers, and lets QuickBooks calculate sales tax where it is set up to. Skip those decisions and you get duplicate customers, invoices that do not reconcile, and a connection that silently stops syncing.
This guide is for US companies commissioning custom software, or adding QuickBooks to software they already run. It covers the choices, the technical traps, build-versus-platform options, and what a project looks like.
First question: which QuickBooks?
QuickBooks Online has a REST Accounting API with OAuth 2.0, webhooks and sandbox companies for testing. Most new integrations target it.
QuickBooks Desktop uses a different integration approach, built around the QuickBooks Web Connector and qbXML. According to Intuit's support article, Intuit stopped selling new subscriptions to Desktop Pro Plus, Premier Plus, Mac Plus and Enhanced Payroll to new US customers after September 30, 2024; existing subscribers can renew, and QuickBooks Desktop Enterprise is still sold. If your company runs Enterprise, plan a Desktop integration. Otherwise, build for QuickBooks Online and treat Desktop as a separate project.
Decide which system owns each record
The most common integration failure comes from two systems both believing they own the same data. Settle it in writing before any code:
- Customers: usually created in your app and pushed to QuickBooks, with the QuickBooks ID stored against your record.
- Products and services: often owned in QuickBooks, so the accountant controls income accounts, and pulled into your app.
- Invoices: created in your app, pushed to QuickBooks once final, and not edited in QuickBooks afterwards.
- Payments: recorded wherever the money is received, then applied to the matching invoice in the other system.
- Chart of accounts, classes and locations: owned by QuickBooks and mapped once in an admin screen in your app.
Prefer one-way flows for transactions and a narrow, controlled two-way sync for master data. Store the QuickBooks ID and SyncToken for every synced record, make every push idempotent so a retry cannot create a duplicate, and remember that QuickBooks requires display names to be unique across customers, vendors and employees.
Tokens, limits and pricing tiers
The connection lifecycle
QuickBooks Online uses OAuth 2.0. Access tokens last one hour and are renewed with a refresh token, and a refresh can return a new refresh token that you must store in place of the old one. Under the refresh token policy Intuit announced in November 2025, refresh tokens now have a maximum validity of five years. For apps using the accounting scope, the first tokens start expiring in October 2028, and Intuit notifies customers 30 days and seven days before a connection expires.
Build for it:
- encrypt tokens at rest and refresh them from one place in your code, so two processes never race;
- store the QuickBooks company ID with each connection, one connection per client company;
- show connection status in your admin screen and alert someone when a refresh fails;
- give users a one-click reconnect flow, because every connection eventually ends.
Limits, pricing tiers and polling
Throttles. Intuit's published limits for QuickBooks Online production are 500 requests per minute per company, 10 requests per second per company and app, and 40 batch requests per minute, with up to 30 operations recommended per batch. A throttled call returns HTTP 429, and Intuit advises waiting 60 seconds before retrying. Queue your writes and retry with backoff rather than calling the API from inside a web request.
The Intuit App Partner Program. Since July 28, 2025, apps on the Intuit platform sit in Builder, Silver, Gold or Platinum tiers, as the Intuit App Partner Program FAQ describes. Core API calls, covering most data-in operations such as creating or updating invoices, customers and bills, are not metered. CorePlus calls, covering most data-out operations such as reads, queries and reports, are metered. The free Builder tier includes 500,000 CorePlus credits a month and blocks CorePlus calls above that; paid tiers carry monthly fees and usage pricing.
The design consequence: an integration that mostly writes invoices and payments costs little to run, while one that polls QuickBooks for changes every few minutes burns metered calls. Use webhooks to learn what changed and the change data capture endpoint to catch up after an outage, instead of querying everything on a timer.
API versions. Intuit versions the Accounting API with minor versions and retires old ones. Pin the minor version your code was tested against, and put Intuit's release notes on someone's monthly checklist.
Sales tax and other data traps
- Sales tax: if the company uses QuickBooks Online's automated sales tax, QuickBooks works out tax from the customer's address and each item's tax category. Mark lines as taxable or non-taxable, let QuickBooks calculate the amount, and compare it with your app's quote during testing. Fighting the tax engine with your own amounts creates reconciliation work every month.
- Rounding and discounts: decide whether discounts apply per line or per invoice, and test totals to the cent across a few hundred real invoices.
- Voids and edits: define what happens when an invoice is voided or changed in your app after it has synced.
- Multicurrency: if you invoice in more than one currency, confirm the QuickBooks company has multicurrency turned on before you design the flow, because the setting cannot be switched off once enabled.
- Payroll and banking: most custom apps should leave payroll and bank feeds inside QuickBooks rather than try to sync them.
Build it directly, or use a unified API or integration platform?
- Direct QuickBooks Online API: best when QuickBooks is the only accounting system you need, the sync is central to your product, and you want full control over mapping and error handling.
- A unified accounting API such as Merge, Apideck or Codat: worth it when your customers use different accounting systems, for example QuickBooks, Xero and NetSuite, and you want one integration to maintain. You trade some depth and add a subscription cost.
- An integration platform such as Zapier, Make or Workato: fine for simple, low-volume flows inside one company, such as creating a QuickBooks customer when a deal closes in your CRM. A poor fit for core invoicing at volume.
What an integration project looks like
- Mapping workshop: one session with your accountant and operations lead to agree record ownership, account mapping, tax handling and what happens on edits and voids.
- Connection and sync engine: OAuth flow, token storage, a job queue with retries, webhooks and change data capture.
- Admin screen: connection status, last sync time, a list of failed records with the reason, and a retry button.
- Reconciliation report: daily totals in your app against QuickBooks, so differences surface in days rather than at month end.
- Testing: an Intuit sandbox company first, then a pilot on one real company through a full month-end close.
A focused one-way integration for customers, invoices and payments commonly takes four to eight weeks, including testing through a month-end. Two-way sync, several companies per customer and Desktop support each add time. The work sits between system integration and API development, usually inside a larger custom software development project.
On accounting logic itself, we built AccVora, GST billing, inventory and accounting software for Indian shops, wholesalers and small manufacturers, on web, Windows and Android. It works with Indian GST rather than US sales tax, but the habits carry over: invoices that balance to the cent and records that never post twice.
For scheduling, India is 9.5 hours ahead of US Eastern in October and 10.5 hours ahead from November 1, 2026. We work over video calls and shared project boards, deliver to a staging server every two weeks, and keep the code and the Intuit developer account in your company's name.
FAQs
Should the integration sync both ways?
Only where it has to. Push transactions one way, from the system where they are created, and limit two-way sync to a few master records such as customers. Every two-way field needs a rule for which edit wins.
Does Intuit charge for API access?
The Builder tier is free and does not meter data-in calls, but it caps metered data-out calls at 500,000 credits a month and blocks anything beyond that. Paid tiers add monthly fees. Design your integration to write more than it reads.
What happens when a customer's connection expires?
Syncing stops until someone reconnects. Your app should detect the failed refresh, alert an admin, queue changes made in the meantime, and push them once the connection is restored.
Can you integrate with QuickBooks Desktop?
Yes, through the Web Connector for Desktop editions, including Enterprise. It needs a separate build from a QuickBooks Online integration, so scope it on its own.
Next step
Send us the records you need in QuickBooks, which system creates each one, and roughly how many transactions you process a month. Discuss your project with us and we will map the integration, then follow a short discovery call with a written scope and fixed quote.
Key takeaways
- Agree in writing which system owns customers, items, invoices and payments before any sync code is written.
- Store the newest refresh token every time and build a reconnect flow, because every QuickBooks connection eventually expires.
- Data-in calls are unmetered under the Intuit App Partner Program; reads and queries are metered, so avoid polling.
- Let QuickBooks calculate sales tax when the company uses automated sales tax, and reconcile against your quotes.
- A focused one-way integration commonly takes four to eight weeks, including testing through a month-end close.
Ready to put this into practice?
Let’s build the solution that gets you there.