Head-to-head comparison
Xero vs Wave: we ran the same month of books in both
We may earn a referral fee if you sign up through our links. It does not change our test results.
This site compares software. It does not give tax, legal or accounting advice.
The short answer
Both tools gave a September profit and loss that matched our answer key exactly, on cash and on accrual. Both took our bank statement file without a bank login. The biggest difference is what each does with the work around the books: on Wave's free Starter plan, nothing was emailed from Wave, while Xero sent our invoices.
Xero suits someone who wants the books built from the bank statement and wants to send invoices from the software. It had a category for every expense in our test and matched deposits by reading the invoice number in the bank description. Watch two defaults: automatic invoice reminders are switched on, and invoice emails carry the logged-in person's own name, with that person's own email address as the reply-to.
Wave suits someone who wants a free tool and is happy to link payments to invoices by hand. The free Starter plan has no time limit. But on Starter we could not email an invoice from Wave or send a reminder, we typed all 12 invoices in by hand, and every deposit had to be linked to its invoice by hand.
Task by task
We ran the same made-up month in both tools; the method is at the end of this page. Xero ran in its free trial. Wave ran on its free Starter plan, which has no trial clock. Some tasks were not comparable, and we say so where that happened.
| Task | Xero | Wave (free Starter plan) |
|---|---|---|
| 1. Set up the business, add 5 clients | Short setup. Business structure had to be set by hand (it started as "Unspecified"). None of the account owner's personal details were copied into the business profile. Contacts imported from a CSV using Xero's fixed column names. | Business profile has no business-structure field. None of the account owner's personal details were copied in. The customer CSV import needs every one of Wave's eleven headings in Wave's order, with no column matching. Our first, two-column file was read by position: the email landed in "First Name" and the header row would have become a sixth customer. We caught it on the preview and used a full file. |
| 2. Create 12 invoices | CSV import. We had to look up the income account code and the tax type first. Invoices arrive as drafts and must be approved. Automatic reminders were on by default; we turned them off before approving. | We found no invoice import, so we typed all 12 by hand. The first item we saved came back pre-filled with the first invoice's text and price on every later invoice, and we overwrote it each time. Invoices save as drafts and must be approved; approving sends nothing. |
| Sending invoices | Two-step login had to be set up before the first send. We emailed two invoices. Emails go out under the logged-in person's own name, with that person's own email address as reply-to. Subject and message were editable on the trial. Pressing Enter in the To box swapped in another contact's address. | Not comparable: nothing was sent from Wave. On Starter the send window offered only Copy link, Download PDF, "Launch email" (opens your own email program) and "Mark invoice as sent", with sending from Wave shown as a Pro feature. We did not use any of the four. |
| 3. Record 20 expenses | Coded from the bank statement. The US chart of accounts had an account for every one of our 11 categories (6 with the same name). Every line needed a contact. Xero pre-filled repeats from earlier lines, but once invented a vendor ("Font Awesome") with the wrong account. | Coded from the bank statement. Wave has 31 expense categories to start, but its names differ from ours and it had no "Supplies" or "Equipment": we added Supplies and used "Computer - Hardware" for equipment. No vendor was needed. All 28 bank lines ended up categorized. |
| 4. Import the bank statement, match it | CSV upload after adding a bank account "without a bank feed", which required an account number (we used a placeholder). 7 of 8 deposits matched correctly, including both $1,500 Northgate deposits, read from the "INV-" number in the description. | A bank account first had to be added in the chart of accounts (no account number asked), then the CSV upload worked, with the columns confirmed in four steps. Wave books every line at once as uncategorized income or expense, so income is overstated until deposits are linked. It makes no match suggestions. For each deposit we picked "Payment Received for an Invoice in Wave" and searched the invoice number; all 8 linked. |
| The partial payment | Proposed Maple Street Realty's $150 invoice for Bluefin Yoga's $150 payment, with that wrong invoice pre-ticked in Find & Match. Fixed with Split. | Linked to INV-1007 by searching its number. Wave applied $150 and left $150 due. There was no wrong suggestion because Wave makes none. |
| 5. Check a partial payment, send a reminder | Balance correct. No "send reminder" button: reminders are the automatic schedule, so a manual reminder means emailing the invoice again. We re-sent INV-1011 with a changed subject. | Balance correct ($150.00 due on INV-1007). Not comparable: no reminder is possible on Starter. The row menu has no reminder option, and automatic reminders are a Pro feature, shown greyed out. Since nothing was sent from Wave, there was no Wave-sent invoice to remind about. |
| 6. September profit and loss | Cash and accrual both matched the answer key exactly, under one switch. Export: PDF, Excel, Google Sheets. | Cash and accrual both matched the answer key exactly, under one report-type setting. Export: CSV, PDF. |
What each did better
Xero
- Sending from the software. We emailed two invoices from Xero, with an editable subject and message. Wave's free plan could not.
- Deposit matching by invoice number. It read "INV-1006" in the bank description and picked the right $1,500 invoice out of three.
- Ready-made categories. Every expense in our test had a home in the US chart of accounts from the start.
- Imports for invoices. Contacts and invoices both came in from CSV.
- Learns repeats. The second coworking pass came pre-filled from the first.
Wave
- Free, with no time limit. The Starter plan ran the whole month with no trial clock and no card asked at sign-up, per the account owner.
- No automatic emails. Nothing went to a client on its own.
- No vendor needed on each expense. Categorizing a line was a click, a few letters and Enter.
- Preview before import. The customer import showed every row first, which is how we caught the mis-mapped file.
- Cash and accrual on one setting, both exact, with a direct PDF.
Where each tripped us up
Xero: automatic reminders on by default; a required account number for a bank account with no feed; a contact required on every expense line; an invented vendor suggestion; the wrong-client partial-payment match, pre-ticked; a full-screen invoice setup page the first time we opened an invoice; a settings save with no confirmation; the To box swapping in another contact's address on Enter.
Wave: the customer import reading columns by position; no invoice import found; the saved item re-filling the first invoice's text and price; a tax-creation window that opened from a stray keystroke; invoice search working only inside the payment submenu; income overstated until the deposits were linked; no way to email invoices or send reminders on Starter.
Price check
| Plan | Monthly price | Notes |
|---|---|---|
| Xero Early | $27 | Limited to 20 invoices and 5 bills (the plan our trial ran on) |
| Xero Growing | $59 | |
| Xero Established | $97 | Multiple currencies, projects, expense claims |
| Wave Starter | $0 | The plan our test ran on. Card payments cost 2.9% + $0.60 each, per Wave's page |
| Wave Pro | $19 a month or $190 a year | Not tested. Wave's page lists sending invoices via Wave and automatic late-payment reminders on Pro |
Prices are the regular prices on each company's own pricing page, both read on October 22, 2026. Xero's page also showed lower introductory prices for the first months; Wave's page showed no current offer. Prices change; check the pricing page before you buy.
Xero Early's limit matters: our test month had 12 invoices, under its 20. Xero says the limit applies to both approving and sending invoices. Check on Xero's pricing page how the limit is counted before you choose Early.
We did not test Wave Pro. What it adds is Wave's own description, not our result.
Who should pick which
- You want a free tool and can send invoices from your own email: Wave Starter. In our test, invoices could be copied as a link or downloaded as a PDF, but not emailed from Wave. Expect to link each deposit to its invoice yourself.
- You want your books to start from your bank statement, with categories ready and invoices sent from the software: Xero. Turn off automatic reminders until your client emails are right, and check who invoice emails will appear to come from.
- You send a lot of invoices: Xero Early is capped at 20 invoices, so check the limits on Xero's other plans before you choose. Wave Starter's page describes unlimited invoices, but we typed all 12 of ours by hand.
How we tested
We made up one month for a one-person web design business, Riley Park Design (September 2026): 5 clients, 12 invoices totaling $8,425, 20 expenses totaling $612.28, and a 28-line bank statement with one partial payment. We ran the same six tasks in Xero's free trial and on Wave's free Starter plan, and checked each tool's profit and loss against an answer key worked out from the test files.
An AI assistant carried out the tasks in our own accounts. A person did the sign-ups and logins and approved every email and download. So we report the steps and problems for each task, not minutes. Test emails went to our own address, and every client in the test is made up.
The test files are the same for every tool we compare, so results line up across pages. How we test lists every task and the answer key.
Tested October 21 (Xero) and October 21-22 (Wave), 2026. Screenshots on file.