ERPNext data migration means moving your master data and opening balances — not a decade of transaction history — from an existing system into a clean, reconciled ERPNext on a fixed cut-over date. The principles are the same whether your source is Tally, SAP, Excel sheets or a custom database: decide what carries forward, map every field, import through the Data Import tool, post opening balances correctly, then reconcile before the first live transaction.
Short answer
ERPNext data migration is the structured transfer of masters (accounts, customers, suppliers, items) and opening balances into ERPNext, using the built-in Data Import tool for Excel or CSV files and dedicated tools for opening stock and open invoices. Closed history stays in the old system as a read-only archive. A clean migration is defined by a mapped cut-over date and a matched trial balance — not by how much data you move.
I am Manoj, an ERPNext implementation lead at MithTech, a team of Frappe specialists in Bengaluru. I have run migrations off Tally, SAP, QuickBooks and home-grown Excel systems. The mechanics are rarely the hard part. Most failed migrations fail on discipline (a fuzzy cut-over date, unmapped ledgers), not on a missing feature in the tool.
What is ERPNext data migration?
ERPNext data migration is the process of transferring the data your business needs to operate — chart of accounts, customer and supplier masters, item masters, and financial opening balances — from an existing system into ERPNext as of a chosen cut-over date. Historical transaction detail stays behind. The goal is a clean, reconciled starting point, not a full-history copy.
Every source system is different, but the destination shape is the same. ERPNext stores data in doctypes (structured tables with parent records and child tables), and almost all of them accept an Excel or CSV import. That is why the same method works whether you are leaving Tally, SAP, Zoho or a stack of spreadsheets. ERPNext is open source under GPLv3, so you can set up as many test copies as you need to rehearse, with no licence fee.
Few businesses migrate from one system only. The usual picture is accounting software plus Excel trackers: a stock sheet, an order book, a job-work or production register. List every tracker with the main exports and decide what each becomes in ERPNext: a master, an opening balance or a document type.
Skimmable summary: Migration moves masters and opening balances into ERPNext on a cut-over date; history stays in the old system.
What data should you migrate — and what should you leave behind?
Masters and open items migrate; closed history does not. Bring forward your chart of accounts, party masters, item masters, opening stock, and any unpaid invoices as on the cut-over date. Leave every paid invoice, old payment voucher, and historical stock movement in the source system, which remains available as a read-only archive for audits and lookups.
The most common mistake is trying to import everything. A ten-year voucher history bloats the new database and slows reports, and nobody looks for a 2019 receipt in a live ERP. The clean split:
| Chart of accounts | Yes — ledger and group masters | — |
| Customers / suppliers | Yes — with GSTIN, PAN, addresses | — |
| Items | Yes — with HSN/SAC, UOM, tax category | — |
| Opening balances | Yes — as on cut-over date | — |
| Open (unpaid) invoices | Yes — outstanding only | Paid invoices stay |
| Stock | Opening quantity + valuation | Old movement history |
| Closed transactions | No | Yes — read-only |
This keeps the opening-balance audit simple and your ERPNext instance fast.
Skimmable summary: Migrate masters, opening balances, and open invoices; archive all closed, paid history in the old system.
How does the ERPNext Data Import tool work?
The Data Import tool imports records from a CSV or Excel file into any doctype, in one of two modes: insert new records or update existing ones. Download the template for the target doctype, fill it, attach it, let the tool validate row by row, map any renamed columns, then run the import. Mandatory fields are flagged in the template so nothing critical is missed.
Here is the reliable sequence I follow for each doctype.
Download the template
Open Data Import, choose the document type (for example Customer or Item), select Insert New Records, and download the template. Mandatory fields are marked; conditional fields carry an info note.
Fill and clean the data
Populate the template in Excel. Clean as you go — trim stray spaces, standardise capitalisation, and save as UTF-8 CSV so non-English characters do not corrupt. For most doctypes the template has no ID column when you insert new records, so do not add one. Where a field names the record, fill that field: an Item's ID is its Item Code.
With MithTech's import templates, keep each template's headers and delete the columns you do not use.
Attach and validate
Upload the file. The tool validates the sheet and lists warnings by row and column before anything is written. Fix the flagged rows and re-attach until the preview is clean.
Map columns
If you renamed or added columns, use map columns to align each one to the correct ERPNext field. Templates from the tool map automatically — always verify anyway.
Import in sensible batches
Import in batches rather than everything in one shot; very large single imports slow the system. For submittable documents such as invoices, decide whether to enable Submit After Import.
With the templates, import in the order Item, Item Price, Customer, Supplier, Address, Contact, BOM, and for BOM tick Submit After Import. Everything else is in the README that comes with the files.
Skimmable summary: Download template, fill and clean to UTF-8 CSV, validate, map columns, import in batches — masters before transactions.
Where do I get checked import files for Items, Customers, Suppliers and BOMs?
MithTech's seven Excel templates load Item, Item Price, Customer, Supplier, Address, Contact and BOM through ERPNext's Data Import tool. Each one has the right headers for v15 and v16, the India Compliance columns, a filled example and a guide to every column. Free, no sign-up. Checked on 14 October 2026 against ERPNext v15.122.0 and v16.50.0.
Seven Excel templates for ERPNext Data Import (Item, Item Price, Customer, Supplier, Address, Contact, BOM), each with an example and a column guide.
Download
7 Excel files for ERPNext Data Import
Free, no sign-up. For ERPNext v15 and v16, with or without India Compliance. Import them in this order.
1 · Item
Products, materials and services, with defaults and barcodes
Excel · 38 KB · 20 columns
2 · Item Price
One price for one item in one price list
Excel · 22 KB · 7 columns
3 · Customer
Name, type, group, territory, GSTIN
Excel · 28 KB · 11 columns
4 · Supplier
Name, type, group, GSTIN, TDS category
Excel · 31 KB · 14 columns
5 · Address
Billing and shipping, linked to the party
Excel · 34 KB · 16 columns
6 · Contact
People, emails and phone numbers
Excel · 27 KB · 11 columns
7 · BOM
Components for a finished item
Excel · 28 KB · 12 columns
Checked on 14 October 2026 against ERPNext v15.122.0 and v16.50.0, Frappe v15.122.0 and v16.50.0, and India Compliance v15.32.1 and v16.10.1. Not yet imported into a running site. For BOM, tick Submit After Import. How to use themREADME
Skimmable summary: Seven free Excel templates for Item, Item Price, Customer, Supplier, Address, Contact and BOM; import them in that order, and tick Submit After Import for BOM.
How do you map legacy fields to ERPNext?
Field mapping matches each concept in the old system to its ERPNext equivalent before any import runs. Old account groups map to ERPNext account types; party ledgers split into separate Customer and Supplier masters; stock items map to Item records with HSN codes. Get the account-type mapping right and everything downstream reconciles.
Mapping is conceptual, not mechanical, so it needs a person who understands both systems. A worked example for the common fields:
| Ledger under "Sundry Debtors" | Customer master + Receivable account | One debtor ledger becomes one Customer |
| Ledger under "Sundry Creditors" | Supplier master + Payable account | Same party may be both customer and supplier |
| Sales / purchase tax ledgers | Tax accounts + tax templates | Consolidate duplicate GST heads into one set |
| Stock item | Item master | Assign an explicit item code and HSN/SAC |
| Bank / cash ledger | Account (type Bank / Cash) | Reconcile to statement at cut-over |
Two mapping errors cause most rework. First, duplicate tax heads: older systems often carry several CGST or SGST ledgers across rates or registrations, while ERPNext works with one clean set per company. Second, item names used as keys: assign explicit item codes so near-identical names stay separate.
Skimmable summary: map old account groups to ERPNext account types and consolidate duplicate tax heads before importing anything.
How do you bring in opening balances?
Opening balances enter ERPNext through three separate tools, one per balance category. Stock in hand goes in via a Stock Reconciliation with purpose set to Opening Stock. Unpaid customer and supplier invoices go in via the Opening Invoice Creation Tool. Every remaining ledger balance — banks, cash, capital, loans, fixed assets — goes in through a single Journal Entry against a Temporary Opening account.
Keeping these three paths distinct is what makes the books reconcile cleanly.
Post opening stock
Use Stock Reconciliation with purpose Opening Stock to set item quantities and valuation rates as on the cut-over date. This aligns the Stock Ledger with the general ledger.
Create open invoices
Use the Opening Invoice Creation Tool for outstanding debtors and creditors. Choosing Sales or Purchase generates the matching invoice type; enabling Create Missing Party auto-creates any customer or supplier not yet present.
Post the remaining ledger
Enter all other closing balances from the old system as a Journal Entry dated to the cut-over, booked against the Temporary Opening account so debits and credits net to zero.
Clear the temporary account
Once every category is posted, the Temporary Opening account balance should be nil. A non-zero balance means a category is missing or double-counted — find it before proceeding.
Skimmable summary: Opening stock via Stock Reconciliation, open invoices via the Opening Invoice Creation Tool, everything else via one Journal Entry against Temporary Opening.
How do you validate a migration before go-live?
Validation means proving, before any live transaction, that ERPNext holds the same financial position as the source system on the cut-over date. Run a full set of reconciliations: trial balance, debtor and creditor ageing, bank balances, tax ledgers, and stock value. Every one should match line by line, and any difference beyond rounding must be traced to a specific cause.
Work through this checklist on the staging instance first, then repeat on production after the real import:
- Trial Balance — ERPNext's trial balance should match the source system account by account as on the cut-over date. Investigate any gap over a rupee.
- Receivables ageing — total outstanding and invoice-level detail should match; a mismatch usually means a missing opening invoice.
- Payables ageing — same check for suppliers.
- Bank and cash — reconcile each account to its statement; exports are a frequent source of rounding drift.
- Tax ledgers — input and output GST balances should tie to the source system's tax position.
- Stock value — the Stock Balance total should equal the stock-in-hand figure in the trial balance.
A migration is not done when the data is imported. It is done when the trial balance matches and the temporary opening account reads zero.
Skimmable summary: Reconcile trial balance, ageing, bank, tax, and stock against the source system before issuing a single live transaction.
How should you plan the cut-over and rehearse the whole thing?
Cut-over planning means rehearsing the whole migration on a throwaway staging copy until it runs clean, then running the real import in one short window at the period boundary. ERPNext has no licence fee, so you can set up as many staging copies as you need to test imports, mappings and opening balances without touching production.
The rehearsal is not optional. A dry run on staging surfaces the duplicate ledgers, missing HSN codes, and mapping gaps that would otherwise appear on go-live day. Once staging reconciles, freeze new entries in the old system, run the production import, post opening balances, reconcile again, and only then start live transactions. Keep a short, fixed verification window in which finance compares both systems for anything the reports missed. ERPNext runs on the Frappe framework, which keeps custom fields and scripts portable between your staging and production instances.
Skimmable summary: Rehearse the full migration on a free staging instance, freeze the old system, import at the period boundary, reconcile, then go live.
Source-specific migration guides
The method above applies to any source, but each system has its own export quirks. For a walkthrough for your current system, use the guides below, or see all migration paths.
Tally to ERPNext
Export masters and balances from Tally, map ledger groups to account types, and reconcile GST heads. See Tally to ERPNext migration, or what moves from your Tally.
SAP to ERPNext
Extract from SAP ECC tables, rationalise a large chart of accounts and re-map cost centres: SAP to ERPNext migration. On Business One, see SAP Business One to ERPNext.
Budgeting the project
Data quality, the number of companies and the Excel trackers to fold in drive the effort. Estimate your price.
Skimmable summary: the same method applies everywhere; follow the guide for your system's export quirks.
Frequently asked questions
+What data actually needs to migrate to ERPNext?
Masters and opening balances need to migrate: chart of accounts, customer and supplier masters, item masters, opening stock, and any unpaid invoices as on the cut-over date. Closed, paid transactions do not — they stay in the source system as a read-only archive you can still reference during audits.
+Can the ERPNext Data Import tool handle all my records at once?
Split big datasets by doctype and into batches; very large single imports slow the system. Import masters before transactions, and if you use CSV, save it as UTF-8 so special characters survive.
+How are opening balances posted in ERPNext?
Opening balances use three tools. Stock in hand is posted through a Stock Reconciliation with purpose Opening Stock. Outstanding customer and supplier invoices go through the Opening Invoice Creation Tool. All other ledger balances are entered as one Journal Entry against a Temporary Opening account, which should net to zero once everything is posted.
+Will my old system's data be deleted after migration?
No. Migration copies data into ERPNext; it does not touch the source system. Your existing installation and its full history remain intact and available as a read-only archive. You simply stop posting new transactions there and start them in ERPNext from the cut-over date onward.
+How do I know the migration was successful?
Success is measured by reconciliation, not by import completion. Export a trial balance from ERPNext as on the cut-over date and confirm it matches the source system account by account. Then verify debtor and creditor ageing, bank balances, tax ledgers, and stock value. When all of them match, the migration is complete.
+Do I need outside help, or can I migrate myself?
ERPNext ships the Data Import tool and opening-balance tools for teams comfortable with ledger mapping and reconciliation, so a capable in-house finance and IT team can do it. Many businesses bring in someone who has done it before, because opening-balance errors are expensive to unwind after go-live and an experienced eye catches mapping mistakes before they reach the books.
+Do the import templates work on ERPNext v15 and v16?
Yes. We checked every column against ERPNext v15.122.0 and v16.50.0 (14 October 2026). Where a label changed between them, as in the BOM, the file uses the field name, which both versions accept. We have not checked v14 or older. We checked the files against the ERPNext source; we have not yet imported them into a running site.
+Do I need India Compliance to use them?
No. The GSTIN / UIN, GST Category, PAN and HSN/SAC columns belong to the India Compliance app. Without it those columns are skipped with a note and the rest imports. With it, each row is checked: GSTIN length and check digit, the state on an address, and the length of an HSN/SAC code.
+Can I import a customer with its address and contact in one file?
On ERPNext v16, yes: the Customer and Supplier import accepts Contact and Address columns in the same file. On v15, import the customer first, then the Address and Contact files, which link to it by name. The Address and Contact templates work on both versions.
Comments & ratings
No comments yet. Start a new discussion.
Manoj · Published on 20 July 2026
Worked with us? Leave a Google review