Back to blog

What Breaks When You Outgrow QuickBooks, and What Moves When You Leave

What breaks when you outgrow QuickBooks Online: plan limits, rules no plan changes, integrations that fail first, what a migration moves, and a one-hour test.

Luka Abramovic18 min read

Isometric accounting ledger outgrowing its capacity and transferring records to a larger platform.

When you outgrow QuickBooks Online, a higher plan can buy off most of its limits, but not its rules. A location is recorded once per invoice or bill, never per line, so a bill shared by three sites needs a split or a monthly allocation journal. A customer's currency can't be changed once the record exists. And plan on moving balances, not history: Microsoft's QuickBooks Online migration tool for Business Central moves master data, a beginning-balance entry and open documents, and migrates a $500 invoice with $300 paid at the full $500 (Microsoft Learn).

This covers the US edition of QuickBooks Online as of September 2026. It isn't a product comparison, and the test at the end runs on your own file in about an hour.

The documented limits by plan

Intuit publishes usage limits for each QuickBooks Online plan and enforces them. At a limit, Intuit's two options are to upgrade or to reduce usage (Intuit usage limits).

QuickBooks Online (US) limits by plan, as of September 2026
LimitEssentialsPlusAdvancedWhat it does to the work
Billable users3525Time-tracking-only and reports-only users don't count (reports-only isn't offered on Essentials), and neither do up to two accountant-firm users, or three on Advanced. Advanced is the top QuickBooks Online plan, so 25 is the ceiling. Sharing logins to get past it leaves the audit log unable to say who changed what.
Active accounts in the chart of accounts250250UnlimitedInactive accounts don't count. Sub-accounts are accounts too (the API returns them as Account records), so sites or departments built as sub-accounts spend the allowance fast.
Classes and locations, combinedNot available40UnlimitedOne shared pool. Every new site, department or job type spends from the same 40.
Custom fields4 on sales forms4 on sales forms12 active per form type (invoice, estimate, purchase order, expense, bill and others)A field you can add on screen isn't necessarily one an integration can reach. See the integrations section.

Sources: Intuit's usage limits and custom fields articles. Software can read the same limits: Intuit's Entitlements API returns each limit with the company's current count and whether it is enforced. In Intuit's own example response for a Plus company, the enforced ones are CLASSES_AND_DEPARTMENTS at 40, ACCOUNTS at 250 and USERS at 5 (Entitlements reference). The test at the end shows how to call it.

If the next plan removes the limit you're near, it's a pricing decision. Our signs article works out the Plus-to-Advanced difference at September 2026 list prices. If you're already on Advanced, or the problem is one of the rules below, no QuickBooks Online plan fixes it.

This week: write your current count next to each row. Anything within about 10% of a limit (our rule of thumb) needs a date, and the months-to-limit formula in the same article gives you one.

Three rules no plan changes

These rules apply on every QuickBooks Online plan, and each one produces a workaround that someone then maintains by hand.

1. A location belongs to the whole invoice or bill

In Intuit's API reference, an invoice or a bill carries one location, at the top of the transaction. A class can sit on each line. A journal entry is the exception: each of its lines can carry its own location (invoice, bill and journal entry references). The API calls locations departments, and a company can relabel them as business, department, division, location, property, store or territory, so the same rule hides under different names.

Classes have their own either-or. The company's class setting assigns classes to each line or to the whole transaction, never both (Preferences reference). Switch to whole-transaction classes and every line of a mixed invoice lands in one class.

Where sites are locations, a utility bill covering three sites is either entered as three bills, which no longer match the one the supplier sent, or booked to one site and reallocated by journal entry. The journal is where the workaround lives, and the percentages behind it live in a spreadsheet or in someone's head.

Before accepting the journal, check two options. If class isn't already doing another job, track sites as classes set per line, and one bill can carry all three (on Plus, from the same pool of 40). Or price Intuit Enterprise Suite, Intuit's tier above Advanced, which lets you set dimensions on each line of a transaction (Intuit help).

This week: take last month's 20 largest bills and count those that served more than one location. Then count the allocation journals posted last month. Together they are the monthly work your location reports depend on.

2. A customer's currency is permanent, and so is multicurrency

Once multicurrency is turned on, it can't be turned off, and the home currency can't be changed from then on (Intuit multicurrency guide). Every customer and supplier has one currency, fixed when the record is created. To bill the same customer in a second currency, you create a second customer (Customer reference).

The workaround is a second record, named something like "Acme GmbH (EUR)". From then on the customer's balance, statements and sales history are split across two records, and any integration that finds customers by email address finds one of them. Which one depends on the integration.

This week: if multicurrency is still off, try it in a trial or sandbox company first, because the switch is one-way. If it's on, the duplicate check in the test section shows how many customers already exist twice.

3. The inventory costing method is chosen once

Intuit's US help describes a choice of costing method, FIFO or MAC (moving average cost). If an inventory item is created before a method is chosen, QuickBooks Online defaults to FIFO, the option disappears from settings, and the method can't be changed later (Intuit, as of September 2026). In the API reference, an inventory item has a single quantity on hand, with no quantity per warehouse, and once an item tracks quantity it can't be switched back (Item reference).

So when stock sits in several warehouses or is counted by bin, an integration reading the Item record sees one total per item. And a warehouse system that costs stock on the other method will disagree with QuickBooks item by item whenever purchase prices move. The workaround is a spreadsheet or warehouse system holding the real stock, and a monthly journal that adjusts the inventory asset account in QuickBooks to match. From that point, cost of goods sold by item in QuickBooks no longer includes the adjustments.

This week: compare the inventory asset balance in QuickBooks with the stock valuation from wherever stock is really counted, at each of the last three month-ends. If a journal closes the gap every month, QuickBooks holds your inventory total but no longer your inventory.

The integrations that fail first

A person works around these rules. A connector either handles them or quietly posts something different.

Custom fields the API may not reach. Intuit's Accounting API reference describes a transaction's custom fields as "up to three" and supports one data type, text (invoice reference). Advanced allows 12 active fields per form type. A connector built on that API may read and write only some of your fields, and may not handle any that aren't plain text. Ask which API the vendor uses for custom fields and which of your fields, by name, it can reach.

One connection per company. Every API request names a single company by its realm ID, which the app receives when that company authorizes it (Intuit field definitions). Eight companies mean eight authorizations, eight sets of tokens and eight field mappings to keep in step. Throttles apply per company, but the monthly allowance of metered reads is added up across all of them, and across every app in the developer's workspace. The numbers, and a worked example for eight companies, are in our business software API limits reference.

Send each connector vendor the question for its type, and ask for the answer in writing.

Questions for connector vendors, and the answers that should worry you
ConnectorAskWorrying answer, and why
Point of sale or e-commerce, several storesDo you post one summary per store per day, with the store in the location field?"One daily summary for everything." The location split is gone before the data reaches QuickBooks.
Anything that fills custom fieldsWhich of our custom fields, by name, can you read and write, and through which API?"All of them," with no API named. Intuit's Accounting API documents up to three, text only.
Billing or storefront in more than one currencyWhen an existing customer buys in a second currency, what do you create or match?"We match on email." That finds the record in the first currency.
Inventory, warehouse or marketplaceWhat do you post to QuickBooks: item quantities or a value journal? Where do quantities by location live?No clear answer on location. The Item record has one quantity per item.
Group reporting across companiesHow many companies does one subscription connect, and how do you map different charts of accounts?"We report each company's own chart." You get several reports, not one group.
Anything that pulls reportsDo you request accrual or cash basis explicitly?"We use the default." Intuit's report endpoints default to the company's report-basis setting, so two companies can report on different bases.

This week: list every app connected to each company, what it writes, and which of these questions its vendor has answered in writing.

Running more than one company

A group keeps one QuickBooks Online company per legal entity, and each company stands alone, with its own chart of accounts, lists and users. Without a group level, consolidation happens in a workbook. Someone exports each company's trial balance, maps it to a group chart of accounts and eliminates intercompany balances by hand. Intercompany trading means a journal in each company, a "due to" in one and a "due from" in the other, and the two must agree at every month-end.

Intuit's group level is Intuit Enterprise Suite. Its help describes consolidated reports that can be filtered by company, shared dimension or transaction origin; intercompany invoices, bills, journal entries and allocations with automatic eliminations; and a chart of accounts synced from a primary company to the others (consolidated reports, eliminations, shared chart of accounts, as of September 2026). If you're a group on Advanced, price it next to any ERP you're considering.

Why the workbook gets expensive: pairs grow faster than companies

An illustrative example, with every input shown so you can put in your own. Each company takes 30 minutes a month to export and map. Each pair of companies that trade with each other takes 20 minutes to agree their intercompany balances. With n companies all trading with each other, there are n × (n − 1) ÷ 2 pairs.

Monthly consolidation time by number of companies (illustrative inputs)
CompaniesTrading pairsMinutes a monthHours a year
33(3 × 30) + (3 × 20) = 15030
510(5 × 30) + (10 × 20) = 35070
828(8 × 30) + (28 × 20) = 800160

Going from five companies to eight adds three exports and 18 pairs, and more than doubles the hours. Not every pair trades in practice, so count only the pairs that do. The hours are also the smaller cost. A gap between a due-to and its due-from that nobody resolves gets carried forward, and it moves to the next system with everything else unless it is cleared first.

This week: for last month, write down the hours from month-end to a consolidated P&L, the number of trading pairs, and whether every due-to agrees with its due-from. A difference that has sat unchanged for months is the one to clear first.

Workarounds that quietly become permanent

Each of these starts as a fix for one month. It becomes permanent when a report depends on it, and expensive at migration, because it holds a rule the next system has to be told about. To put hours on each one, log minutes as in the workaround inventory from our signs article.

QuickBooks workarounds, the rule behind each, and what it costs when you leave
WorkaroundThe rule behind itSign it has become permanentWhat it costs at migration
Site or department in account names, such as "Rent - Denver"40 classes and locations on Plus; 250 accountsEach new site adds accounts, and reports regroup accounts by handEvery such account has to be split back into an account plus a location in the mapping
Monthly allocation journal for shared billsOne location per invoice or billA recurring journal with a spreadsheet of percentages behind itThe percentages must become allocation rules in the new system, or location history can't be reproduced
A second customer per currency, such as "Acme GmbH (EUR)"A customer's currency is fixedCustomer names with currency suffixesEach pair is merged or deliberately kept apart, and open items for both have to land on the right record
Consolidation workbookGroup consolidation sits in Intuit Enterprise SuiteA mapping tab that only one person maintainsThe mapping tab is your group chart of accounts. Keep it, because it is the first draft of the new one
Manual intercompany journalsAutomatic eliminations sit in Intuit Enterprise SuiteDue-to and due-from balances that don't agree at month-endUnexplained differences migrate as opening balances unless they are cleared before cutover
Stock kept outside QuickBooks, posted as a monthly value journalOne quantity per item; costing method fixedAn inventory adjustment journal every monthOpening stock has to come from the stock system, tied to the inventory asset balance
Project or job codes typed into memo fields4 custom fields on Plus sales forms; the Accounting API documents up to three, text onlyReports built by searching memo textFree text has to be cleaned before it can become a real field or dimension

This week: tick the rows you recognize and write a name next to each, the person who maintains it. A workaround only one person understands is the first to document, whatever you decide about QuickBooks.

What happens to your history when you leave

Plan on moving balances and open items, not the years of transactions behind them. Microsoft's documentation for its QuickBooks Online migration extension is a useful benchmark, because it lists exactly what one vendor's tool moves (Microsoft Learn).

What Business Central's QuickBooks Online migration moves, per Microsoft's documentation
MovesDoesn't move, or moves differently
Customers, vendors, items and the chart of accountsPurchase orders and sales orders
A beginning-balance transaction in the general ledgerThe transactions behind those balances
On-hand quantities for inventory itemsMarkup and discount amounts, which have to be added by hand before posting
Open invoices, credit memos and paymentsPartial payments. An invoice of $500 with $300 paid migrates at $500, so Microsoft recommends applying outstanding transactions first

Two preconditions are easy to miss. Business Central requires an account number on every general ledger account, and QuickBooks Online's Enable account numbers setting is off by default (Preferences reference), so a file where nobody turned it on has none. And Microsoft warns that QuickBooks Online doesn't store a current balance for every account. Intuit's reference explains why: an account's current balance is only valid for balance sheet accounts (Account reference). For a cutover partway through a year, the year-to-date income and expense figures must come from a report run to the cutover date, not from account balances. Cutting over at a fiscal year-end avoids that step, because income and expense start again at zero.

Customer structure needs a decision too. QuickBooks nests sub-customers and jobs up to four levels below a parent customer (Customer reference), and each open invoice points at whichever level it was billed to. Decide whether each level becomes a customer, a project or a delivery address before loading open items, not after.

Choose how much history to bring

History options at cutover (the default is our judgment, not a rule)
OptionWhat you loadChoose it whenThe catch
Balances and open itemsTrial balance at cutover, open receivables and payables document by document, stock on handComparisons with past years can come from the exported archiveYear-over-year reports in the new system start empty
Balances plus monthly summaries (our default)The above, plus one summary journal per month for the comparison period your reports need, such as the prior fiscal yearManagers need last year beside this year in the new systemSummaries carry only the dimensions you map: the account, plus class or location if you load them
Full transaction detailEvery invoice, bill and paymentRarely: open projects that bill against earlier work, or a specific audit needEvery customer, item and tax code must map, and the new system has to be told which loaded bank transactions were already reconciled

For the monthly summaries, a developer can pull both halves from the Reports API. The profit and loss report by month gives each month's activity on income and expense accounts. The balance sheet by month gives each month-end balance.

GET /v3/company/{realmId}/reports/ProfitAndLoss?start_date=2025-01-01&end_date=2025-12-31&summarize_column_by=Month&accounting_method=Accrual
GET /v3/company/{realmId}/reports/BalanceSheet?start_date=2025-01-01&end_date=2025-12-31&summarize_column_by=Month&accounting_method=Accrual

Always set accounting_method. When it's left out, both reports use the company's report-basis preference (ProfitAndLoss and BalanceSheet references), and a file set to cash basis exports cash-basis history. Without a developer, run the same two reports in QuickBooks with monthly columns on an accrual basis and export them to Excel.

Export before read-only access ends

After you cancel, QuickBooks Online gives you read-only access for one year, and you can still export to Excel during that year (Intuit). Export before you cancel anyway. Under the gear icon, Tools, then Export Data exports the reports and lists you choose. Check whether receipts and other attachments came with it, and if they didn't, download them from the Attachments list. A year is short if an auditor or a tax question reaches further back, so file the exports with your other financial records.

Prove the cutover with four control totals

Before anyone posts in the new system, tie these four figures at the cutover date:

  1. The QuickBooks trial balance equals the opening trial balance in the new system, account by account after mapping.
  2. The accounts receivable aging total equals the open customer documents loaded, customer by customer. Partial payments are where it breaks.
  3. The accounts payable aging total equals the open supplier documents loaded.
  4. The stock valuation loaded equals the inventory asset balance carried over, and quantity times unit cost per item adds up to it.

Foreign-currency items need one more check. Load open invoices and bills in their own currency, at exchange rates that reproduce the home-currency receivable and payable balances QuickBooks shows at cutover. Otherwise the first payment books an exchange gain or loss that belongs to the old system. Once the new system is live, daily control totals take over, as described in our ERP integration guide.

A one-hour test on your own file

Run this with whoever does your month-end close, allowing about ten minutes a step. Each result points to a cheaper fix before it points to a new system.

  1. Headroom. Write current use against each row of the limits table: billable users, active accounts, active classes plus active locations, and custom fields per form. A developer can read the enforced limits in one call (below).
  2. The location split. Count last month's bills that served more than one location, and the allocation journals posted.
  3. Currency duplicates. Put customer names in column A and each customer's currency in column B, then fill the two formulas below down from row 2.
  4. The group close. Record the hours from month-end to a consolidated P&L, the trading pairs, and whether each due-to agrees with its due-from.
  5. Connected apps. For each app connected to each company, note what it writes and which vendor questions it has answered.
  6. Migration readiness. Check whether account numbers are on. Count open purchase and sales orders, partly paid invoices, and unapplied payments and credits. Note the inventory costing method and whether multicurrency is on.

The currency duplicate formulas, for Excel or Google Sheets:

C2  =TRIM(UPPER(IFERROR(IF(RIGHT(TRIM(A2),1)=")",LEFT(A2,FIND("(",A2)-1),A2),A2)))
D2  =COUNTIFS($C$2:$C$5000,C2,$B$2:$B$5000,"<>"&B2)

Column C strips a trailing bracket such as "(EUR)" from the name. Column D counts records with the same name in a different currency. Anything above zero is a customer who probably exists twice. Check each hit by eye, because a name with brackets inside it can match too.

For step 1, a developer with an access token for the company can read every threshold at once. Intuit's reference lists the Thresholds block from minor version 43, so add ?minorversion=43 or later if the response doesn't include it. The endpoint doesn't accept a JSON Accept header, so ask for XML.

curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Accept: application/xml" \
  "https://quickbooks.api.intuit.com/manage/entitlements/v3/$REALM_ID" > entitlements.xml

python3 - <<'EOF'
import xml.etree.ElementTree as ET
for t in ET.parse("entitlements.xml").iter():
    if t.tag.split("}")[-1] == "threshold":
        v = {c.tag.split("}")[-1]: c.text for c in t}
        print(v.get("name"), v.get("currentCount"), "of", v.get("limit"),
              "(enforced)" if v.get("enforced") == "true" else "")
EOF

Run it once per company. For a group, the output of every company side by side is the headroom report nobody has to assemble by hand.

Reading the results (the thresholds are our rules of thumb)
ResultWhat it meansCheaper fix to try first
A limit is close and you're on Essentials or PlusA pricing question, not an outgrowing oneMake unused accounts, classes and locations inactive, then price Advanced
You're on Advanced and near 25 usersThe ceiling of QuickBooks OnlineMove occasional users to reports-only or time-tracking-only, then price Intuit Enterprise Suite next to an ERP
Multi-location bills or allocation journals every monthLocation reports depend on a spreadsheetTrack sites as classes set per line, if class is free. Otherwise write the percentages down and post the split as a recurring journal entry, so at least it is repeatable
Customers who exist twice by currencyCustomer reporting and credit control are splitOne naming rule and a mapping list that every integration uses
The group close takes days, or due-to and due-from don't agreeThe business needs a group levelClear the differences now, then price Intuit Enterprise Suite and an ERP side by side
A connector can't answer its vendor questionData is reshaped before it reaches QuickBooksAsk for sample postings in a test company before trusting its totals
Three or more of the rows aboveYou've outgrown the file, not just a planStart the move with the history decision and the four control totals

If the test turns up several rows, bring the results, your month-end close checklist and the list of connected apps to a conversation. We'd start with the allocation journals and the consolidation workbook, because they hold the rules any replacement has to keep, whether that's a higher Intuit tier, an ERP, or a piece of custom software that connects them.

Build with Adamant Code

Automating a workflow or building a product?

Bring one manual process you want to automate or the product you want to build. We’ll discuss what is in the way and the next step worth exploring.

Talk through your workflow
What Breaks When You Outgrow QuickBooks, and What Moves When You Leave | Adamant Code