QuickBooks Online
Online shortcut: Settings ⚙ → Export data downloads the available reports and lists together. Extract the ZIP, check what is in it, and export anything missing separately. Intuit: export reports and lists
1. Lists: Chart of Accounts, Customers, Vendors, Products & Services (.xlsx or .csv)
Reports → search for Account List, Customer Contact List, Vendor Contact List, Product/Service List and Trial Balance → Export ▾ → Export to Excel, one file each.
2. Transactions: the actual bookkeeping entries (.xlsx or .csv)
Reports → Journal → set the report period to cover everything you want to bring over → Export ▾ → Export to Excel.
It has to be the Journal on Online. Its General Ledger lists each account's postings separately and never says which line pairs with which, so nothing in it can be imported.
QuickBooks Desktop
1. Lists: Chart of Accounts, Customers, Vendors, Items (.iif)
Windows: File → Utilities → Export → Lists to IIF Files, check Chart of Accounts, Customer List, Vendor List, Item List → Save.
Mac: File → Export → Lists to IIF..., check the same boxes → Save.
2. Transactions: the actual bookkeeping entries (.xlsx or .csv)
Windows and Mac: Reports → Accountant & Taxes → Journal (preferred) or General Ledger → set the date range to All → Excel button → Export to a new worksheet → Save. Take the Trial Balance from the same menu the same way; it is what we check every account against.
What comes across: your chart of accounts (with its numbers and types), customers, vendors, products and services, and every transaction in the report you export. A bill or invoice split across several accounts arrives as one document, coded line by line rather than one row per account, so it ages and pays as the one bill or invoice it started out as. Classes come across on the lines that carry them, and can be corrected in bulk afterwards from Clean Up → Reclassify transactions, by account or by class.
Set Accounting method in the report's Customise panel to the basis your books are actually on (Accrual for most), and use the same basis for all three: a Journal on one basis and a Trial Balance on the other will not tie out. The import still completes: we show you which accounts disagree and by how much, so you can tell a wrong report from wrong data. Nothing is rolled back for a source mismatch, only for books that don't balance on their own.
There is no .iif on Online; the Excel report exports are the whole path. Amounts must all be in one currency. Neo-Capital books hold a single currency, and a multi-currency export is refused rather than flattened.
Inventory: we value stock FIFO, the same method QuickBooks Online uses, so your cost of sales is calculated the way it was there. Quantities and costs still need a separate opening count (a report export carries balances, not the batches behind them); after that, every sale draws from your oldest stock first. Check which method your QuickBooks company actually uses before comparing: Intuit documents both FIFO and Moving Average Cost, and Desktop Enterprise has its own FIFO options.
What doesn't come across: attachments, recurring templates and any bank connection stay in QuickBooks and are set up again here.
Check the documents, not just the totals. A ledger export does not always say which invoice a payment settled, so a correct A/R or A/P total does not mean each invoice and bill carries the right remaining balance and due date. Keep A/R and A/P aging detail at the same cutoff and check them document by document after importing.
Only bringing over what is still owed? Use the unpaid invoices and unpaid bills templates rather than dropping document exports into the full-history migration. Coordinate that with your other opening balances so A/R and A/P are brought in once. A Trial Balance uploaded for comparison does not itself create opening balances.
This is a beta feature. If you run into any issues please use the templates and import from a spreadsheet section below.
1. Lists
Accounting → Chart of accounts → Export, then Contacts → All contacts → Export. If you sell products, Sales → Products and services → Import → Items → Export items to CSV. You only need the download.
Then Reporting → All reports → Trial Balance at the same cutoff. That is the check: every account is compared to it after the import.
Keep account codes and contact names exactly as exported. A Xero contact can act as both a customer and a supplier, so check both roles in the preview.
2. Transactions
Reporting → All reports → General Ledger Detail. Select all accounts and your full history, choose Accrual under More, and under Columns switch on account code, Journal ID, date, source, reference, description, debit and credit. Update the report, then export to Excel.
It has to be Detail, not General Ledger Summary, and Journal ID and Source have to be on. Journal ID is what groups the lines of one transaction and Source is what it was; without them a multi-line journal arrives as separate one-line entries that do not balance.
Invoices and bills: Sales → Invoices → Export and Purchases → Bills → Export bills, including paid history if you are moving the full history. Xero caps an export at 500 documents, so take every non-overlapping batch and add them all; each line item is its own CSV row, so keep every row of a document. Export credit notes, prepayments and overpayments too. On their own these files import nothing: they are read to tell the ledger who each transaction belongs to, so upload them with the accounts list and the ledger. Xero: export invoices and bills
Keep, but do not upload: Receivable Invoice Detail, Payable Invoice Detail, the Balance Sheet and the Profit and Loss at the same cutoff. Those are what let you check partial payments, credits and amounts still owed, which a matching account total does not prove.
Only bringing over what is still owed? Use the unpaid invoices and unpaid bills templates rather than dropping document exports into the full-history migration. Coordinate that with your other opening balances so A/R and A/P are brought in once; a Trial Balance uploaded for comparison does not itself create opening balances.
Not established by these files: opening stock quantities, valuation or FIFO layers; attachments; repeating templates; bank connections; payroll; the fixed-asset register. Xero: recommended export set
This is a beta feature. If you run into any issues please use the templates and import from a spreadsheet section below.
1. Lists
In Google Sheets, install and link Wave Connect, then Extensions → Wave Connect → Download and take the chart of accounts. Download invoices with line items and payment details too, and products if you use them.
Then Reports → Detailed Reporting → Trial Balance, set your cutoff, Update Report, then Export → CSV. That is the check: every account is compared to it after the import.
Keep invoice numbers and payment references intact. Wave omits zero-balance accounts from the Trial Balance, so the chart of accounts is what carries them, so send both.
2. Transactions
Select the right business, then business name → Business settings → Other → Data Export → Accounting. Wave emails the link to your primary address and it expires after 24 hours. The download holds four files: accounting entries and transactions, bill items, customers and vendors. Extract it and keep all four.
Viewer and Editor roles cannot run Data Export. Wave has three export routes with different layouts, so do not add an overlapping transaction export just to pick up missing list detail. Renaming an unsupported file does not repair it.
Three routes, three layouts. The accounting download, Wave Connect and the report downloads are different formats. Keep their files separate, and check the preview reads the accounting file as ledger history and the document files as supporting detail.
Keep, but do not upload: your receivable, payable and customer-credit reports for what is still owed. An Account Transactions (General Ledger) report is useful for investigating a difference; it is not a second copy of the history the accounting file already supplied.
Check the documents, not just the totals. A matching account total does not prove each invoice carries the right remaining balance, due date and payment allocation. Verify those individually after importing.
Only bringing over what is still owed? Use the unpaid invoices and unpaid bills templates rather than dropping document exports into the full-history migration. Coordinate that with your other opening balances so A/R and A/P are brought in once; a Trial Balance uploaded for comparison does not itself create opening balances.
Not established by these files: opening stock quantities and costs; receipt images attached to entries; bank connections; recurring billing; payroll.
This is a beta feature. If you run into any issues please use the templates and import from a spreadsheet section below.
1. Lists
Accounting → Chart of Accounts → More Actions → Export Accounts. The export includes active, archived and deleted accounts.
Clients through Clients → More Actions → Export Clients (up to 1,000 per file, so keep every file if it splits), vendors through their own More Actions → Export Vendors, and items through Items and Services → Items → More Actions → Export Items.
Then Reports → Accounting Reports → Trial Balance at your cutoff, through More Actions → Export for Excel. That is the check: every account is compared to it after the import.
FreshBooks' income and expense balances are year-to-date, so compare them in the same fiscal-year context; an all-history revenue total is a different figure.
2. Transactions
Reports → Accounting Reports → General Ledger. Include All Accounts and the full date range, and on the report switch on Debit, Credit, Account Number, Client and Vendor alongside the defaults. Choose More Actions → Export for Excel, which downloads a CSV, the format you want; keep it as it is. If the report is too long to display, use Export full Report for Excel.
These reports need Plus, Premium or Select. FreshBooks ships two generations of report layout, so check the preview reads yours as ledger history before you accept it.
Invoices: Invoices → More Actions → Export Invoices, choose the date range, then Download CSV. It includes active and archived invoices. On their own these files import nothing: they are read to tell the ledger who each transaction belongs to, so upload them with the accounts list and the ledger. FreshBooks: managing invoices
Keep, but do not upload: an Invoice Details report for outstanding amounts and statuses. If you filter it by date, use a scope that includes unpaid invoices; a paid-date filter cannot establish the complete unpaid list. FreshBooks: Invoice Details report
Check the documents, not just the totals. An account-level match is not proof that every document allocation is right. Verify document balances, due dates and settlements after importing.
Only bringing over what is still owed? Use the unpaid invoices and unpaid bills templates rather than dropping document exports into the full-history migration. Coordinate that with your other opening balances so A/R and A/P are brought in once; a Trial Balance uploaded for comparison does not itself create opening balances.
Not established by these files: opening quantities and costs; projects; timesheets; retainers; recurring invoice settings; attachments; payment-provider connections; payroll.
- 1 Upload your files
- 2 Begin your migration
- 3 Preview your migration
- 4 Confirm your migration