Migrate from FreshBooks

Solid Accounting connects to FreshBooks via the standard FreshBooks OAuth 2.0 flow and pulls accounts, clients, items, invoices, expenses, payments, and journal entries through the FreshBooks New (FBNC) Accounting API.

A note on FreshBooks history: the classic FreshBooks API (pre-2017) didn't model double-entry properly — it was an invoicing tool that grew. The New version (also called FBNC, available in your account if you're on the modern UI) has a proper Accounting module that maps cleanly to a real general ledger. Solid integrates with FBNC; if you're still on classic FreshBooks, see the "Classic FreshBooks" section below.

Before you start

Have ready:

  • Your FreshBooks login (email/password or SSO)
  • Owner or Admin role in the FreshBooks business you're migrating
  • Your installed copy of Solid Accounting with your license activated
  • A Trial Balance from FreshBooks as of your migration date — Reports → Accounting → Trial Balance — for verification

Run the migration on a fresh .solid file. FreshBooks data is read-only on import; nothing in your FB account is modified.

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 → FreshBooks. Or use the command palette (⌘K / Ctrl+K) and search for "Import from FreshBooks".
  3. The OAuth dialog opens my.freshbooks.com in your browser.
  4. Sign in with your FreshBooks credentials.
  5. Authorize Solid Accounting for the scopes:
    • Read access to invoices, expenses, payments, journal entries
    • Read access to clients, items, accounts, business info
  6. Pick the business to import. If your FreshBooks login has access to multiple businesses (an accountant managing multiple clients, for instance), choose which one to migrate.

After authorization, Solid Accounting begins fetching the import preview.

Step 2 — Review the preview

Business: Acme Consulting
  Chart of accounts:    34 accounts
  Clients:              89 clients
  Items:                14
  Invoices:            287
  Expenses:            156
  Payments:            312
  Journal entries:      22

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

Step 3 — Account mapping

FreshBooks's chart of accounts uses simple type codes. Solid maps them to its own account types:

FreshBooks type→ Solid type
bankCASH
accounts_receivableRECEIVABLE
current_assetASSET
fixed_assetFIXED_ASSET
accounts_payablePAYABLE
current_liabilityLIABILITY
long_term_liabilityLT_LIABILITY
equityEQUITY
revenue / incomeINCOME
cost_of_goods_soldCOGS
expenseEXPENSE

Review the mapping screen; everything ambiguous is flagged in amber so you can fix it before proceeding.

Step 4 — Import

The phased import (in order):

  1. Business / settings
  2. Chart of accounts
  3. Clients → Solid contacts (customer type)
  4. Items with their default income/expense accounts
  5. Invoices — DR AR / CR revenue per line
  6. Expenses (FreshBooks's "expense" entries) → Solid bills: DR expense / CR AP
  7. Payments — both received (clears AR) and made (clears AP)
  8. Journal entries — manual journals copied verbatim

Progress shows phase-by-phase. Smaller files (typical FreshBooks user) finish in 1–3 minutes.

Step 5 — Verify

In Solid: Reports → Trial Balance for the same date as your saved FreshBooks Trial Balance. They should match account by account.

If they don't, the most common causes:

  • Off by retained earnings — FreshBooks closes prior years automatically; post a one-time adjusting entry to Retained Earnings
  • Tax-payable accounts off — sales tax handling can differ; reconcile manually if you've used FreshBooks's tax features
  • One-off mappings — an account mapped to the wrong type. Edit the account in Solid; if no transactions have hit it yet, the type change is clean

Compare the Balance Sheet and P&L too. Three matching reports = clean migration.

What carries over

AreaCarries over
Chart of accountsAll accounts with type, name, description
ClientsName, address, email, terms, currency, default account
ItemsService items with sales price + revenue account
InvoicesAll invoices with line items, statuses, dates, terms
Expenses (bills)All expense entries with categorization
PaymentsBoth customer payments (AR) and bill payments (AP), applied
Journal entriesManual journal entries with DR/CR balanced
Reconciliation statusWhere present in FreshBooks, mapped to cleared status
Tax codes (modern FBNC)Per-line tax assignments where the API exposes them

What doesn't carry over

AreaWhy
Time trackingFreshBooks Time isn't accounting data — it's billable-time tracking. If you've billed through FB Time, those bills come over as invoices; the time entries themselves don't.
ProjectsFreshBooks Projects map loosely to Solid's projects/dimensions; manual setup recommended for active projects
Estimates / ProposalsFreshBooks has both; Solid imports estimates. Proposals (more elaborate, sales-pipeline data) don't map cleanly — recreate as estimates if needed
Recurring invoicesFB recurring schedules don't translate; recreate as Solid recurring entries
Files attached to invoices/expensesStay in FreshBooks; Solid doesn't pull them
Client portal loginsYour clients' FB portal access stays with FB; Solid's invoice delivery is separate

Classic FreshBooks (pre-2017)

If your business is on Classic FreshBooks (the old UI, sometimes labeled "FreshBooks Classic"), the OAuth integration won't work — classic uses a different API. Two options:

  1. Migrate to FreshBooks New first, then run the OAuth import. FreshBooks has had a self-service migration path from Classic to New for years.
  2. Export to CSV from Classic and import via Solid's CSV import. You lose more structure (no proper invoice → AR posting, etc.) but it works.

Option 1 is cleaner if you're going to keep using FreshBooks alongside Solid for any period. If you're cutting over completely, option 2 is fine — you only need history, not ongoing structure.

OAuth token lifecycle

FreshBooks's OAuth refresh tokens last ~12 hours of inactivity. After that, Solid prompts to re-authorize. This is more aggressive than Xero or QuickBooks; in practice, if you're actively using Solid you'll never see it, but a long lapse triggers re-auth.

Revoke Solid's access at any time from FreshBooks: Settings → Apps & Integrations. After revocation, Solid stops being able to pull but imported data stays intact.

Common gotchas

OAuth fails on the consent screen — FreshBooks requires the connecting user to be the business owner OR have a specific role with API access. Standard users don't have it. Either log in as the owner or grant your user the necessary role.

"This API is not available for classic accounts" — your business is still on Classic FreshBooks. Migrate to FreshBooks New first (FB has a self-service migration path).

Tax totals look off — FreshBooks's tax handling has changed across product versions. The current FBNC tax model maps to Solid's tax codes; if you're using older tax-on-invoice patterns, totals may need adjusting entries.

Imported clients have weird names — FreshBooks lets you record either a company name or a person name as the primary contact identifier. Solid imports both fields; if the display name looks wrong, edit the contact in Solid after import.

Re-import creates duplicates — same as the Xero migration; Solid's FreshBooks import isn't idempotent. Re-runs need a fresh .solid file.

Cross-references