Migrate from QuickBooks Online

QuickBooks Online doesn't export company files. There's no .QBW, no IIF download, no clean offline backup. The only path off QBO is through the Intuit API, and Solid Accounting connects directly via OAuth 2.0 — no intermediate CSV juggling, no third-party migration tool, no fees.

The migration pulls your chart of accounts, customers, vendors, items, invoices, bills, payments, deposits, journal entries, and purchases through the Intuit Accounting API.

For QuickBooks Desktop users, see Migrate from QuickBooks Desktop — the path is different (uses a .qbextract file produced by a separate migration tool).

Before you start

Have ready:

  • Your QuickBooks Online account credentials (the email/password you use at qbo.intuit.com or via Intuit SSO)
  • Admin or Standard user role in the company you're migrating
  • Your installed copy of Solid Accounting with your license activated
  • A Trial Balance from QBO as of your migration date — Reports → For my accountant → Trial Balance — for verification

We strongly recommend running on a fresh .solid file. QBO data is read-only on import; nothing in your Intuit account is modified by Solid Accounting.

Step 1 — Connect via OAuth

In Solid Accounting:

  1. Open the new file you want to import into.
  2. Welcome screen → Import from other software → QuickBooks Online. Or use the command palette (⌘K / Ctrl+K) and search for "Import from QuickBooks Online".
  3. The OAuth dialog opens appcenter.intuit.com in your browser.
  4. Sign in with your QuickBooks Online (Intuit) credentials.
  5. Authorize Solid Accounting for the scope com.intuit.quickbooks.accounting — this grants read access to your accounting data.
  6. Pick the company to import. Intuit's realmId (a company identifier) arrives back in the redirect; if your login has access to multiple companies (a bookkeeping firm with several clients, an owner with a personal and business account), the next screen lets you pick which to migrate.

After authorization, Solid Accounting begins fetching the import preview from the QBO API.

Step 2 — Review the preview

Company: Acme Consulting LLC
  Realm ID: 9341054320013478
  Chart of accounts:    47 accounts
  Customers:           128
  Vendors:              84
  Employees:            12
  Items:                23
  Invoices:            342 (period: Jan 2024 – present)
  Bills:               197
  Payments:            512  (262 customer payments, 250 bill payments)
  Bill payments:       197
  Deposits:             88
  Journal entries:      18
  Purchases:           425  (cash + credit-card spending)

Wrong company? Cancel and re-run; pick a different realmId at step 1.6.

Step 3 — Account mapping

QuickBooks Online uses an account AccountType + AccountSubType combination. Solid maps these to its own 11 account types:

QBO type→ Solid type
BankCASH
Accounts ReceivableRECEIVABLE
Other Current AssetASSET
Fixed AssetFIXED_ASSET
Other AssetASSET
Accounts PayablePAYABLE
Credit CardLIABILITY
Other Current LiabilityLIABILITY
Long Term LiabilityLT_LIABILITY
EquityEQUITY
IncomeINCOME
Other IncomeINCOME
Cost of Goods SoldCOGS
ExpenseEXPENSE
Other ExpenseEXPENSE

Review the mapping screen, fix anything ambiguous, then proceed.

Step 4 — Import

QBO's API exposes its accounting data as well-defined entity types. Solid's importer pulls them in dependency order:

  1. CompanyInfo — base currency, fiscal year start
  2. Account — chart of accounts created with the type mapping
  3. Customer — customers imported as customer-type contacts
  4. Vendor — vendors imported as vendor-type contacts
  5. Employee — imported as employee-type contacts (no payroll data — that's a separate Intuit Payroll product)
  6. Item — service and inventory items
  7. JournalEntry — manual journals (rebuilt verbatim with QBO's debit/credit lines)
  8. Invoice — sales invoices: DR AR / CR revenue per line, with sales-tax payable as a separate line where applicable
  9. Bill — vendor bills: DR expense per line / CR AP
  10. Payment — customer payments: DR Bank or Undeposited / CR AR, applied to specific invoices
  11. BillPayment — vendor payments: DR AP / CR Bank or Credit Card, applied to specific bills
  12. Deposit — bank deposits with multi-line splits
  13. Purchase — cash and credit-card spending: DR expense per line / CR Bank or Credit Card

Progress shows phase-by-phase. A typical migration with a year of activity finishes in 3–10 minutes; multi-year migrations of large files can take 30+ minutes (Intuit's API rate-limits at 500 requests/minute per realmId).

Step 5 — Verify

In Solid: Reports → Trial Balance for the same date as your saved QBO Trial Balance. Compare account by account.

Common differences:

DifferenceLikely cause
Off by retained earningsQBO posts year-end closing entries automatically; Solid expects explicit closing. Post one adjusting entry to Retained Earnings.
Sales tax accounts offQBO has its own sales-tax handling that aggregates differently from Solid's tax codes. Reconcile via Sales Tax Liability report comparison.
Inventory offQBO uses FIFO; Solid imports the per-item FIFO state at the cutover date. Run a quick inventory valuation to confirm.
Multi-currency adjustmentsQBO stores both base and foreign-currency amounts; Solid imports the base-currency amount. Re-run revaluation if you have meaningful FX gain/loss.

Compare your Balance Sheet and P&L for the same period too. When all three match, the migration is clean.

What carries over

AreaCarries over
Chart of accountsAll accounts with type, name, account number, description, parent hierarchy
CustomersName, billing address, terms, default account, currency, balance, custom fields (as memo)
VendorsName, address, terms, 1099 flag (QBO's "Track payments for 1099"), TIN
ItemsService and inventory items with sales/purchase price, account mappings
InvoicesAll invoices with line items, statuses, tax, dates, payment terms
BillsAll bills with line items
Payments + BillPaymentsBoth AR and AP payments, applied to specific invoices/bills
DepositsMulti-line bank deposits
Journal entriesDR/CR balanced entries copied verbatim
PurchasesCash + credit-card spending
Sales taxTax codes mapped to Solid's tax-code system where 1:1; QBO Automated Sales Tax requires manual setup in Solid

What doesn't carry over

AreaWhy
QuickBooks PayrollSeparate Intuit product with its own data model; doesn't expose via the Accounting API. Re-import via Solid's payroll CSV path or set up Gusto/OnPay/ADP integration.
QuickBooks Time (formerly TSheets)Time-tracking, not accounting data
Reconciliation historyQBO's reconciliation reports rebuild from cleared status, which Solid imports — but the historical reconciliation records (the snapshots) don't transfer
Memorized / recurring transactionsQBO recurring schedules don't translate; recreate as Solid recurring transactions
Custom report layoutsQBO-specific
Banking rulesQBO's auto-categorization rules are tied to QBO's bank-feed system
Attached documentsQBO Attachments stay in QBO; Solid doesn't pull them
Estimates (from older QBO accounts)The Estimate entity is exposed but not always reliably; if estimates don't import cleanly, recreate manually

OAuth token lifecycle

  • Access token — expires after 1 hour. Solid auto-refreshes silently.
  • Refresh token — expires after 100 days of inactivity. After that, Solid re-prompts for OAuth consent.

The refresh token is stored in Solid's local secret store on the connecting machine. It never leaves that machine. You can revoke Solid's access at any time from your Intuit account: My Apps → Solid Accounting → Disconnect. After revocation, Solid stops being able to pull but your imported data stays intact.

Sandbox vs Production

QBO has separate sandbox and production environments. By default Solid connects to production (your real QBO data). For testing, set QBO_ENVIRONMENT=sandbox in your environment before launching Solid. The OAuth endpoints and API base URL switch to Intuit's sandbox.

Common gotchas

OAuth fails with "redirect URI mismatch" — Solid registers a localhost redirect URI. Some VPNs and corporate firewalls block localhost callbacks. Disconnect any VPN for the duration of the OAuth flow.

"403 Forbidden — Access denied to this realm" — your QBO user role doesn't have API access. The Master Admin or Company Admin role in QBO has all needed permissions; some sub-admin roles don't. Either upgrade your role or have a Master Admin run the migration.

Migration stalls midway — usually Intuit rate-limiting. Solid retries with exponential backoff and resumes from where it stopped. Watch the progress dialog; if it sits silent for 5+ minutes with no movement, restart the import (it picks up from the next entity).

Sales tax appears as a separate line on every invoice — correct. QBO collapses sales tax into invoice totals visually but posts it as a distinct GL line; Solid preserves that line. Your trial balance reconciles either way.

Customer balances don't match QBO's Customer Detail report — usually a payment that was applied differently in QBO vs how it imported. Check the customer's transaction history; the offending payment is usually identifiable.

"Realm ID not authorized" — happens if you authorize one company but try to fetch data for another. Ensure the OAuth flow's realmId matches the company you intended to migrate.

Re-running the import creates duplicates — same as Xero and FreshBooks: not idempotent. Re-runs need a fresh .solid file.

Cross-references

Updated May 1, 2026
Edit this page on GitHub →
Was this helpful?

We use this to prioritize which docs to improve. No tracking, no email follow-up.