Move your books across
without stopping the business
You do not have to drag five years of history with you. Bring the balances, the people you invoice and the bank, pick a date, and start posting. Most small businesses are running on Ledgr the same morning they decide to move.
The reasons we hear most
None of them are "the old system was broken". They are usually about the South African half of the job — the half that gets bolted on afterwards everywhere else.
The returns come out of the ledger
VAT201, EMP201, EMP501, IRP6 and IT14 are computed from the transactions you already posted, not retyped into a separate return.
PAYE on the current tables
7 2026/27 brackets, the R17 820 primary rebate, UIF capped at R177.12 a month each side and SDL at 1% — no add-on, no separate payroll subscription.
Rands, not a currency setting
VAT at 15% on every line, the SARS mileage rate, B-BBEE tracking and IFRS-for-SMEs statements are the defaults rather than a configuration exercise.
It keeps working in the dark
Load shedding does not stop invoicing. Work offline against a local copy and Ledgr syncs when the power and the line come back.
Pay for the modules you switch on
From R0 to R1 799 a month per business, not per user. Enterprise includes 2 companies and further entities are R249 each, carrying every module you are already licensed for. The plan comparison shows exactly what unlocks where.
You can leave the same way you came
Settings → Data → Export all data hands back a ZIP of CSVs whenever you want it, on every plan including Free. No exit fee, no export ticket.
What comes across, and how
Four things import from a file today: contacts, invoices, products and bank statements. The rest is a small amount of typing. This table is what actually happens, not what we would like to happen.
| What | How it moves | Effort |
|---|---|---|
| Customers & suppliers | Settings → Data → Import data. Upload a CSV, Ledgr detects the name, email and phone columns, shows you the first ten rows, then imports. Names that already exist are skipped, so you can run it twice. | Automatic |
| Bank transactions | Banking → Import. CSV or OFX per account, from any of the nine supported SA banks. Map the columns once and the mapping is remembered. | Automatic |
| Invoices | Settings → Data → Import data, then choose Invoices. One row becomes one invoice, keeping the number, dates and balance from your old system. A customer that is not in Ledgr yet is created as it goes. | Automatic |
| Products & price list | Settings → Data → Import data, then choose Products. Code, name, category, cost, selling price, VAT rate and stock on hand. | Automatic |
| Bank & stock opening balances | The opening balance on each bank account, and an opening stock take per location. See opening balances below for what a trial balance can and cannot carry across today. | 15 minutes |
| Unpaid supplier bills | Captured by hand under Expenses → Bills so the payables side of the dashboard is right on day one. There is no bill import yet. | Typing |
| Employees & payroll year-to-date | Capture each employee in Payroll before the first run. If you move mid-tax-year, enter their year-to-date earnings and PAYE so the IRP5 at year end is complete. | Per employee |
| Historical documents | Leave them. Download the PDFs and reports from your old system and archive them — SARS wants them kept for five years, not kept in a live system. | Nothing to do |
Upload the CSV once and Ledgr shows you the columns it matched, which of the three targets the file looks like, and the first ten rows — you confirm before anything is written. Headings are matched loosely, so "Customer", "Client" and "Account Name" all find the same field, and amounts survive whatever your spreadsheet did to them (R 1 500,50 and 1,500.50 both read as the same number). Dates are read day-first, the South African way: 03/04/2026 is 3 April.
Two things to know. Contact rows arrive as Customers, so split suppliers into their own file or change the type afterwards. And an invoice whose number already exists in Ledgr is skipped rather than duplicated — which means a part-finished import is safe to run again.
Six steps, one cutover date
The whole switch hangs off one decision: the date from which Ledgr is the system of record. Everything before it stays where it is; everything after it happens here.
- Pick the cutover date
The first day of a VAT period is the easiest — your old system files the period that just closed, Ledgr files the next one, and no return is split across two systems. The start of a financial year is even cleaner if you can wait for it. Failing both, the first of any month works.
- Get your data out of the old system
Before you cancel anything. You want: a customer and supplier list as CSV, a trial balance as at the day before cutover, an aged debtors and aged creditors listing, your product and price list, and PDFs of the last few years of statements and returns. See from your system for where these usually live.
- Set Ledgr up properly once
Create the account, then in Settings fill in the registered name, registration number, VAT number, financial year end, address, banking details and logo. In Invoicing → Settings → Numbering, set the prefix and next number so your invoice sequence carries on from where the old system stopped rather than restarting at 1. The getting-started guide walks the whole thing.
- Import the people and the bank
Contacts first, through Settings → Data → Import data. Then add each bank account under Banking and import a statement covering the cutover date, so the first reconciliation has something to match against.
- Put the balances in
Bank opening balances, the open invoices, the open bills and an opening stock take. This is the step to do with your accountant if you have one — it is fifteen minutes of their time, and opening balances explains which parts of a trial balance Ledgr can hold today and which it cannot.
- Run one cycle in parallel, then stop
Keep the old subscription alive for one month. Reconcile the bank in Ledgr, run the month-end reports and compare them with the old system's. When they agree — and they will, because they are built from the same bank statement — cancel the old one. Keep its exports.
The instinct is to bring every transaction across so the reports go back for ever. In practice you look at last year's numbers in last year's system, once, and then never again. Balances plus open items is the switch that finishes; full history is the one that stalls in week three.
Opening balances
Ledgr builds its statements straight from your documents — invoices, bills, expenses, payroll and bank balances — rather than from posted journals. That makes most of the switch easier and one part of it a manual reconciliation. Read this section before you pick a cutover date.
- Print the trial balance as at the day before cutover
If you cut over on 1 March, you want the trial balance at 28 or 29 February. Keep it — it is the document you check everything against, and your accountant will want it in the year-end file regardless.
- Set each bank account's opening balance
Add the account under Banking and enter the balance as at the cutover date, from the same statement. Everything imported afterwards moves that figure, so the cash position on the dashboard is right from day one.
- Import the open invoices
The unpaid ones only, with their original numbers and dates, through Settings → Data → Import data. This is what makes aged debtors work and what lets a customer's payment reconcile against the right document.
- Capture the open supplier bills
Under Expenses → Bills, by hand — there is no bill import yet. Only the ones still unpaid at cutover.
- Add stock, if you carry it
An opening stock take per location in Inventory, valued at the costing method you intend to keep using — FIFO, LIFO or weighted average. The value should agree with the inventory line on the trial balance.
- Reconcile against the trial balance
Cash, debtors, creditors and stock should now agree with the old system. Note the difference on the remaining lines — that is the gap described below.
Fixed assets and accumulated depreciation, loans, share capital, retained income and the VAT control account are balances that only a general journal can carry, and Ledgr has no journal posting today. The trial balance and general ledger reports say so rather than showing you a made-up figure.
In practice that means two things. Cutting over at the start of a financial year is worth waiting for, because it is the point at which those balances matter least. And until journal posting ships, your annual financial statements are still prepared by your accountant from Ledgr's exports plus the opening trial balance — which is what most SMEs were doing anyway.
The South African tax year runs 1 March to 28 February. Moving payroll on 1 March means there is nothing to carry. Moving in, say, September means you must capture each employee's year-to-date remuneration, PAYE, UIF and SDL before the first Ledgr run, otherwise the EMP501 reconciliation and the IRP5 certificates will only reflect the months processed here. The payroll guide covers the fields.
Coming from a particular system
Menu names differ by product and version, so treat these as directions rather than exact clicks. What you are hunting for is the same everywhere: a CSV of contacts, a trial balance, and an aged listing.
Sage Business Cloud Accounting
Sage exports lists as CSV from the list screens themselves — open your customer list, then look for the export or download action. Take customers and suppliers separately if it lets you.
- Customer and supplier lists as CSV
- Trial balance at the cutover date, as PDF and CSV
- Aged debtors and aged creditors listings
- Product and price list
- VAT returns already filed, as PDF, for your records
Sage Pastel Partner / Sage 50
Desktop Pastel keeps its data locally, so start by taking a backup you can always go back to. Exports come out of the reports area rather than the list screens.
- Full backup, kept somewhere safe and dated
- Customer and supplier masterfiles exported to CSV or Excel
- Trial balance and balance sheet at the cutover date
- Inventory valuation report if you carry stock
- Employee masterfile and year-to-date figures if payroll is in there
Xero
Xero exports contacts to CSV from the contacts screen and has an export-your-data option that bundles the standard lists. Reports export to PDF and Excel individually.
- Contacts CSV — tidy the headings if the file has more columns than you need
- Trial balance at the cutover date
- Aged receivables and aged payables, detailed
- Inventory items list
- Bank statement lines, or re-download the statements from the bank
QuickBooks Online
QuickBooks exports customer and supplier lists to Excel from each list screen, and most
reports export as CSV. Save them as CSV before uploading — Ledgr's import reads CSV,
not .xlsx.
- Customer and supplier lists, saved as CSV
- Trial balance at the cutover date
- Accounts receivable and payable ageing detail
- Products and services list
- Chart of accounts, to sanity-check against Ledgr's
Excel, Google Sheets or paper
The easiest switch of the lot, because there is no export to wrestle with. Put your customer list into a sheet with a Name column, an Email column and a Phone column, save it as CSV, and upload it.
- One row per customer, one header row, nothing merged
- Your last bank statement as CSV or OFX from the bank's portal
- A list of who still owes you what, and what you still owe
- Your bank balance on the cutover date
Something else entirely
If it can produce a CSV, the importer will probably take it. A customer list, an open-invoice listing and a price list are the whole migration — the rest is your own bookkeeping, in your own system, from the cutover date onwards.
For a large or unusual move, the REST API takes contacts, invoices and products directly, which turns a one-off migration into a short script.
The same things, different names
Nothing conceptual changes when you move. Mostly the words do.
| What you probably call it | Where it is in Ledgr |
|---|---|
| Customer, debtor | A contact with the type Customer, under Contacts |
| Supplier, creditor, vendor | A contact with the type Supplier |
| Sales invoice | Tax invoice, one of nine document types in Invoicing |
| Estimate, quotation | Quote — convert it to an invoice when it is accepted |
| Supplier invoice, purchase invoice | Bill, under Expenses & Bills |
| Chart of accounts, nominal ledger | Accounts — the categories every module codes to |
| Manual journal, general journal | No equivalent yet — see opening balances |
| Bank feed rules, cash coding | Bank rules, under Banking — they run on every transaction, however it arrived: a statement you imported, one your bank emailed in, or an Investec feed |
| Aged receivables / payables | Aged debtors and aged creditors, under Reports |
| VAT return | VAT201, in the SARS returns centre |
| Payroll submission | EMP201 monthly and EMP501 twice a year |
| Tracking category, class, department | A separate company if the entities are real, or an expense category if not |
| Attachment, source document | A receipt captured on the expense, or a file on the document |
Cutover checklist
Out of the old system
- Customer and supplier lists as CSV
- Trial balance at the day before cutover
- Aged debtors and aged creditors
- Inventory valuation, if you carry stock
- Employee year-to-date figures, if you run payroll
- PDFs of filed VAT and payroll returns
- PDFs of the last two years of annual financial statements
- A final backup, if it is desktop software
Into Ledgr
- Company details, VAT number and financial year end captured
- Invoice numbering continues the old sequence
- Logo, default terms, banking details and footer set
- Contacts imported and spot-checked
- Products imported, prices and VAT rates checked
- Bank accounts added, opening balances set, one statement imported
- Open invoices imported, open bills captured
- Opening stock take done, if you carry stock
- Users invited with the right roles, 2FA switched on
- Balance sheet agrees with the old system at the cutover date
Questions about switching
How long does it actually take?
A service business with a few dozen customers and no stock: a morning. Add inventory and payroll and it is a day, most of which is capturing employees. The parallel month afterwards is not work — it is the old system sitting there unused while you check the numbers agree.
Can I keep my invoice numbers?
Yes, and you should. Invoicing → Settings → Numbering takes a prefix and a starting number for each of the nine document types. Set the next number to one past your last invoice in the old system and the sequence is unbroken.
What if I am mid-VAT-period?
It works, it is just more careful. File that period from whichever system holds most of it, and make sure the other system's transactions for those weeks are included in the figures. Cutting over on the first day of a period avoids the whole question, which is why it is worth waiting a few weeks for.
Can I try Ledgr before committing to the move?
That is what the Free plan is for — one user, five invoices a month, no card and no trial clock counting down. Set up your company details, import your contacts and issue a real invoice. Nothing you enter is thrown away when you upgrade.
Do you do the migration for me?
There is no paid migration service and no queue to wait in. The contact, invoice, product and statement imports are all self-service, and for anything larger the REST API takes the same records directly. If you are stuck on a specific file, support will look at it.
What happens to my data if I later leave?
Settings → Data → Export all data produces a ZIP of CSVs — contacts, invoices and their lines, expenses, bills, products and time entries — on any plan, at any time, without asking anyone. See data portability.
My accountant works in something else. Does that matter?
No. Give them an Accountant or Tax Practitioner login and they work directly in your books, or export the CSVs and reports they ask for. There is more on how practices use Ledgr across a client base on the accountants page.
Pick a date and start
Create the account today, set it up properly, and cut over on the first of the month.