What an ERPNext migration involves
Moving from Tally, QuickBooks, spreadsheets or a legacy ERP into ERPNext is four separate pieces of work: masters (customers, suppliers, items, accounts, cost centers), open transactions (unpaid invoices, unfulfilled orders, open purchase orders), opening balances for the ledgers as of a cut-over date, and a decision on how much history to bring across. Each piece needs its own mapping and its own check. Most failed migrations treat them as one file export, then discover that an open invoice references a customer code that was never created. Teams usually start a migration for one of three reasons: a legacy license is ending, the company is moving its accounting core onto infrastructure it controls, or several entities are being consolidated into one ERPNext instance. Each trigger changes the scope. A license exit often means the history must be kept readable for auditors, while a consolidation means chart of accounts and item codes must be reconciled across entities before any data loads.
The Data Import tool in ERPNext loads CSV or Excel files using downloadable templates and supports child table rows, such as invoice items under an invoice. It can also update existing records. The documentation advises importing only a few thousand records at a time, so the practical work is splitting data into ordered batches: company and accounts first, then parties and items, then open documents, then opening balances. Ask the owner of each source system to confirm exactly which fields and statuses they will export before anyone builds a template. Whether to migrate in-house or with a partner depends mostly on data volume, the number of source systems and whether the finance team can reconcile each batch against the source ledger. Small single-entity moves with clean data are often handled internally. Multi-entity consolidations, inconsistent item codes or large transaction histories usually need a planned reconciliation step that someone accountable signs off on.
What the migration work includes
A migration into ERPNext moves masters, open transactions and balances in controlled batches, with each step producing evidence the finance and operations owners can check. The work packages below show what is delivered and what each one needs from your team.
Source inventory and extraction
Every source of truth is listed before extraction starts: Tally company files, QuickBooks company data, spreadsheets, or tables in a legacy ERP. For each source, record the export method, the date cut, the owner who signs off the extract, and which masters and open documents it holds. Ask who can authorize an extract and whether the source system stays live during cutover.
Mapping specification
The mapping specification ties each source object to an ERPNext DocType: chart of accounts to Account, customers and suppliers to Customer and Supplier, stock items to Item, locations to Warehouse, and units of measure to UOM. It also records how source fields become ERPNext fields and which values are defaulted. Review it with finance and stock owners before any template is built.
Cleansing rules and exceptions
Cleansing rules set what happens to duplicate parties, inconsistent item codes, missing tax IDs, mixed units and orphaned transactions. Each rule states who decides, whether the fix is made in the source or in the staging file, and how the exception is logged. Agree these rules in writing, because a rule applied silently in a script is hard to audit later.
Load templates and Data Import runs
Load templates are the downloadable Data Import files for each DocType, filled from the cleansed extract. The Data Import tool supports child table rows, but the ERPNext documentation advises importing only a few thousand records at a time, so large sets are split into ordered batches. Scripted loaders are used only where the import tool cannot express the logic, and their use must be approved.
Opening balances and reconciliation evidence
Opening balances are entered as a single, dated set that ties to the closing position in the source system. Reconciliation evidence compares source and ERPNext totals for accounts, parties, open invoices, stock quantities and valuations, and records every difference with its cause. Finance signs off the balances, and the signed reports become part of the cutover record.
Load logs, runbook and cutover
Load logs record each batch's input file, success and failure counts, and the reference of every rejected row, so a failed batch can be corrected and re-run without duplicates. The runbook holds the same steps for staging and production, including the order of loads, checks, rollback points and the cutover window. Rehearsing the full runbook in staging before production is the main control against surprises at go-live.
What drives migration cost and duration
Each driver below shows why it adds effort to an ERPNext migration from Tally, QuickBooks or another ERP, and how a buyer can reduce it.
| Driver | Why it moves effort | How to keep it down |
|---|---|---|
| Masters and historical transactions | Every master needs mapping and validation, and each year of history adds records, load rounds and reconciliation. | Migrate masters in full, but limit transactions to open items and closing balances. |
| Source systems and companies | Each Tally or QuickBooks company file or legacy ERP needs its own extract, mapping rules and reconciliation. | Consolidate sources where possible and migrate one company at a time, with a fixed order. |
| Quality of source data | Duplicate ledgers, inconsistent item codes and missing tax IDs need manual cleansing before any load runs. | Name a cleansing owner and agree rules before mapping. Retire dead records in the source first. |
| Accounting dimensions to map | Cost centers, tax templates and multi-currency balances each need target setup and checks before opening balances post. | Limit dimensions to those finance uses in reports, and agree the tax template list early. |
| Custom fields and DocTypes needing source data | Each custom field that must carry legacy values needs a source column, a load rule and a test. | Load only fields used in daily work. Keep reference data in archived extracts for lookup. |
| Retained history versus opening balances | Full history means more records, longer loads and more reconciliation than balances and open items alone. | Set the retention period with finance and auditors, and default to balances and open items. |
| Rehearsal environments | Each rehearsal repeats extract, transform, load and reconciliation, so extra rounds add effort and calendar time. | Fix the number of dress rehearsals in the written scope and define exit criteria for each run. |
| Bulk loads needing scripts | Data Import documentation advises a few thousand records per import, so larger volumes need batching or scripts. Server Scripts are disabled by default from version 15. | Confirm record volumes early and decide the load method. Check whether server scripts can be enabled in your environment. |
Migration phases and what each produces
Seven phases, each closed by a named output, take your data from source inventory to a signed-off ERPNext go-live.
Inventory the source system and its data
DeployOpen and your finance and operations leads list every source system, report, export and spreadsheet that holds masters, open transactions or balances. For each dataset they record record counts, date ranges, owners and open items. The output is a source inventory with a named owner for each dataset, and the step closes when those owners sign off the inventory.
Map fields and record decisions
The team maps each source field to an ERPNext DocType and field, including child table rows, account heads, tax templates, units of measure and currencies. Every judgment call, such as how source account groups fold into the ERPNext chart of accounts, goes into a decision log. The outputs are a mapping workbook and that log, approved by your finance lead.
Cleanse data and prepare import templates
Duplicates, missing codes, inconsistent item names and invalid tax or currency values are fixed in the source or in a staging copy. The team then builds import files from the downloadable ERPNext templates in CSV or Excel, checked against the mapping workbook. The step closes with a cleansing log and a template set approved for each DocType.
Load masters and transactions in batches
Masters load first, then the transactions that reference them. The Data Import documentation advises importing only a few thousand records at a time, so loads run in small batches. Each batch produces a load log listing created, updated and failed rows with error reasons. No batch is marked complete until its log is clean or its exceptions are accepted in writing.
Reconcile opening balances and get sign-off
The team posts opening balances and compares ERPNext totals with source totals by account, party, stock item and open document. Reconciliation reports show each difference and its cause. Finance signs off only when every variance is explained and accepted in writing, and the signed reports become the baseline for go-live.
Rehearse cutover on a full copy
The full sequence runs on a copy of the target environment, from final extract through loads, balance posting and reconciliation. The team records every deviation and fix, then updates the cutover checklist. The output is a rehearsal report listing issues found, fixes applied and reruns needed. The step closes when a rehearsal reconciles with no unexplained variances.
Run production cutover and hypercare
The approved checklist runs in order: freeze the source, take the final delta, load it, post balances, rerun reconciliation and open ERPNext to users. Hypercare follows, with reconciliation checks and a defect log until finance accepts the first closing period. Ask for the timeline for each phase in the written scope before work starts.
What stays in-house and what a partner should carry
The table shows which migration tasks the finance or operations team should keep and which a migration partner usually carries, along with the skills each part needs.
| Part of the migration | Who usually owns it | Skills it needs | What to confirm before work starts |
|---|---|---|---|
| Chart of accounts sign-off | Finance lead and controller | Accounting knowledge, understanding of statutory reporting and cost center use | Final account tree, account types and which legacy accounts map to which ERPNext accounts |
| Opening balance confirmation | Finance team with external auditor input where relevant | Accounting knowledge, reconciliation to trial balance and bank statements | Cut-off date, balance sign-off by account and the reconciliation evidence the finance team accepts |
| Business rules for open items | Finance and operations process owners | Process knowledge, credit control practice, understanding of open invoice and payment matching | How open invoices, unallocated payments and deposits will be treated after go-live |
| Decisions on historical transactions | Finance leadership with compliance input | Accounting and records retention knowledge, awareness of tax and audit needs | Which years are migrated in detail, which are summarized and where archived history will live |
| Extraction scripts from Tally, QuickBooks or the legacy ERP | Migration partner | Source system data models, SQL or export tooling, Python for scripts | Export access, data volumes and which source tables or reports hold masters and open transactions |
| Transformation logic and mapping | Migration partner with finance review | Frappe data model knowledge, DocType relationships, Python, accounting mapping | Mapping sheet signed off by finance for each master and transaction type |
| Batch loading with the Data Import tool or scripts | Migration partner | Frappe Data Import tool use, batch sizing, Python for scripts where needed | Batch sizes, load order (masters before transactions) and the test environment used for rehearsals |
| Load error handling and reconciliation tooling | Migration partner, verified by finance | Spreadsheet validation, Python for reconciliation reports, ERPNext accounting reports | Error categories, owner for each error type and the totals each reconciliation must match |
What usually goes wrong in ERPNext migrations
Most migration problems trace back to load order, party and item mapping, or environment settings that teams check too late. Each risk below has a prevention step to agree before the first import.
Load order and batch size
Transactions loaded before the chart of accounts, fiscal years, cost centers, tax templates, parties and items exist will fail or link to the wrong records. A single large file also makes errors hard to trace back to their source. Load masters in dependency order, then open transactions in batches of a few thousand records, and validate each batch before the next.
Unmapped or duplicate parties and items
Customers, suppliers and items often appear under several spellings or codes in Tally, QuickBooks or spreadsheets. Without a source-to-target key map, invoices attach to the wrong party and stock splits across duplicate items. Build the map before import, agree merge rules with finance and operations, and check record counts per party and item group after each batch.
Tax and currency mismatches
Source tax codes rarely match ERPNext tax templates one for one, and a rate or account that differs quietly changes posted tax. Open invoices in foreign currencies need the company currency and the exchange rate used at original posting. Map each source tax code to a template, confirm the company currency, and test a sample of taxed and foreign-currency invoices after load.
Opening balances that differ from the trial balance
Opening balance entries that do not agree with the source trial balance carry the error into every later report and period close. Differences often come from rounding, an invoice left out of the load, or a party ledger that does not match its control account. Compare account and party balances in ERPNext with the source trial balance after each load, and document every difference before sign-off.
Server Scripts assumed to be available
Migration logic written as Server Scripts can work on a test bench and then fail in production. From version 15, Server Scripts are disabled by default and must be enabled with the server_script_enabled setting, and Frappe Cloud public shared benches do not allow them. Confirm the hosting type and that setting during planning, or move the logic into a custom app on a bench you control.
No rehearsal before cutover
A first load into production leaves no room to fix mapping or balance errors without manual cleanup. Run the full load sequence at least once on a copy of the target environment, time each step, and record reconciliation results. Repeat the rehearsal after each fix until the final run matches the source balances, then freeze source changes for the cutover window.
How the work changes by source system
Tally data usually arrives as a company file with its own structure, so the first task is deciding which company, financial years and ledgers are in scope. Expect the team to work through these points:
- Exports: Agree which Tally exports feed the masters and which feed open balances, and check each export for truncated or merged fields before mapping.
- Company and ledger structure: Map Tally groups and ledgers to the ERPNext chart of accounts, including cost centers and tax ledgers, and confirm the opening balances per account.
- Stock items and godowns: Map stock items, units of measure and godowns to ERPNext items and warehouses, and decide how stock valuation is opened.
- Open transactions: Decide which outstanding invoices, payments and stock positions move, since closed history often stays in the archive.
- Reconciliation: Compare ledger totals and stock quantities in ERPNext against the Tally reports for the cut-off date before sign-off.
QuickBooks migrations center on accounts, contacts and open receivables and payables. Scope is usually narrower than a full ERP move, but the mapping still needs care. Typical points include:
- Chart of accounts: Map QuickBooks account types and detail accounts to ERPNext account types, and confirm which parent accounts the new structure needs.
- Customers and vendors: Consolidate duplicate contacts, then load customers and suppliers with their tax identifiers and default terms.
- Open invoices and bills: Load outstanding sales invoices and purchase bills so aging in ERPNext matches QuickBooks at the cut-off date.
- Items and tax codes: Confirm how products, services and tax rates translate, since QuickBooks tax setups often differ from ERPNext tax templates.
- Reconciliation: Compare aging reports and the trial balance for the cut-off date. Illustrative example: a single duplicate vendor can split payables across two records until it is merged.
Spreadsheets are the most common starting point for small firms and for side registers kept outside a system. The data is often the least clean, so cleansing takes the largest share of effort. Points to plan for:
- Cleansing first: Remove duplicate rows, standardize dates, currencies and units, and resolve names that are spelled several ways.
- Templates needed: Build each load on the downloadable Data Import template for its DocType, so headers and child table rows match what ERPNext expects.
- Batch sizes: Load in small batches. The Data Import documentation advises importing only a few thousand records at a time, and a failed batch is easier to repair.
- Validation: Check mandatory fields, link values and naming series before import, because most rejections come from missing masters.
- Ownership: Name the business owner who signs off each file, since spreadsheet data often has no system of record to check against.
A legacy ERP migration usually means working from database extracts rather than standard exports. It involves more history, more custom fields and more business rules that must be translated. Points to scope:
- Database extracts: Agree which tables or views are extracted, who produces them and how the extract is versioned, so the load can be reproduced.
- Custom fields: Map each custom field to an ERPNext custom field or a documented decision to leave it out. Confirm this list with the business owners early.
- Longer history: Decide how many years of transactions are needed, and whether older history is kept in an archive instead of being imported.
- Scripted loaders: Large extracts often need scripts to transform data before the Data Import tool runs, which depends on the hosting model described in the next tab.
- Reconciliation: Tie control totals from the legacy system to ERPNext for each module at the cut-off date.
The hosting model changes how loading is done, so confirm it before design starts. The main difference is whether server-side code can run during the load:
- Self-hosted bench or container deployment: Scripted loaders can run on the server, and teams can write transformations and bulk loads in Python with access to the bench console.
- Frappe Cloud public shared benches: Server Scripts are not allowed on these benches, so transformations must happen outside ERPNext or through the Data Import tool.
- Verification: Ask the hosting provider which options are available on the plan being quoted, and confirm the bench version in writing.
- Plan impact: Choose the hosting model early, because a loader written for a self-hosted bench may need redesign before it runs on a shared bench.
What your team needs to provide
Migration quality depends on what your team hands over before the first import file is built. Each item below is a prerequisite, and the migration cannot be reconciled without it. Ask for the trial balance from the source system as of the cutover date, along with read access or full extracts of the masters and open transactions. Without a trial balance at the cutover date, there is nothing to tie the ERPNext opening balances against, and differences surface after go-live instead of during rehearsal.
Provide a staging ERPNext site that matches the hosting model you have confirmed, whether your own servers or Frappe Cloud. Rehearsals run on that site, and the chosen model affects file paths, background workers and how backups are taken. Name one finance owner who signs off each opening balance, the chart of accounts mapping and the reconciliation report. Name one operations owner for stock quantities, valuation, item codes and unit of measure decisions. Without these sign-offs, the team will make accounting and stock judgment calls that nobody on your side has approved.
Decide how much transaction history to keep in ERPNext and how far back open items must come across, such as unpaid invoices, open purchase orders and in-progress work orders. Archive the rest in a read-only extract. Assign a data owner for each master list, including customers, suppliers, items, price lists and employees. Owners resolve duplicates, inactive records and conflicting names. If no one owns a list, the Data Import tool will load what the file contains, and errors will only be found later in reports.
Migration questions buyers ask
What drives the cost of an ERPNext migration from Tally or QuickBooks?
The volume and condition of the source data drive most of the cost: how many customers, suppliers, items and ledger accounts must move, how messy the records are, and how many open invoices and balances need reconciling. Mapping rules, cleansing work and any custom import scripts add effort, and so does the number of test cycles before cutover. A fixed-scope quote should price each phase separately. Hosting is a separate, mostly recurring cost: self-hosting ERPNext is free, while the ERPNext pricing page lists Frappe Cloud shared site hosting from 5 US dollars per month.
Can our team migrate from Tally or QuickBooks without a partner?
Yes, a capable finance and IT team can attempt it with the Data Import tool, provided someone knows both the source ledger and ERPNext accounting well. The risk sits in the details: mapping the chart of accounts, party and item masters, tax setup, and opening balances that must agree with the last closed period. Before starting, confirm internally who owns reconciliation, who approves each batch, and what the rollback plan is. A partner is most useful when the data set is large or no one on the team can test the results independently.
Why does the documentation advise importing ERPNext data in batches?
The ERPNext Data Import documentation advises importing only a few thousand records at a time. Smaller batches make errors easier to trace, let you check each load against the source report, and stop one failed file from blocking the rest. Load masters before the transactions that reference them, such as items before sales invoices and customers before open orders. Record the batch name, row counts and reconciliation totals for every load, then run a full test migration on a staging site before cutover.
Can migration scripts run on Frappe Cloud?
It depends on the bench type and the kind of script. Server Scripts run Python on document events or as API endpoints, and from version 15 they are disabled by default and must be enabled with the server_script_enabled setting. Frappe Cloud public shared benches do not allow them. Confirm with Frappe which bench your site runs on before planning server-side migration logic. If scripts are blocked, the logic can be packaged in a custom app on a bench you control, while the Data Import tool handles the bulk load.
What should we sign off before a migration cutover?
Sign off the reconciled opening balances, the migrated master data counts, the list of open transactions, and a trial balance comparison against the source system. Finance should approve the account mapping and the cutover date, while IT confirms backups, user roles and rollback steps. Record each sign-off with a named owner and a date. Ask that these acceptance checks be listed as deliverables in the written scope, so the cutover decision is documented before work begins.
What does the finance team need to provide during the migration?
Finance provides the chart of accounts decisions, source extracts from Tally or QuickBooks, lists of open invoices, bills and payments, and balances as of the agreed cutover date. They also validate mapped data and reconcile totals, which is often the slowest step because it depends on their availability. Ask the written scope to name the phases, the review points and the dependencies, so timing is agreed in advance and the team knows its responsibilities from the start.
How DeployOpen runs ERPNext migrations
DeployOpen moves masters, open transactions and balances from Tally, QuickBooks, spreadsheets or another ERP into ERPNext in your own infrastructure, using the Data Import tool and scripts where they fit. Each step is written down, tested on copies of your data and reconciled before cutover.
How we scope
- The written scope lists each source system, master data set, open transaction type and opening balance to be migrated.
- Mapping rules for accounts, items, parties, taxes and cost centers are agreed with your finance and stock owners before build starts.
- Engagements are fixed-scope, so the scope document also sets out what is excluded, such as historical archives or unused reports.
How we build
- Source extracts are cleansed for duplicates, missing fields and inconsistent codes, with each correction logged against its source record.
- Imports run in batches of a few thousand records at a time, using downloadable Data Import templates and scripts for child table rows and logic that the template cannot express.
- Each trial load on a staging bench is reconciled against source totals for balances, open invoices and stock quantities before the next run.
How we hand over
- You receive the mapping specification, cleansing log, batch run records and reconciliation reports for each load and the final cutover.
- The cutover runbook names the freeze point, final delta load, sign-off owners and rollback steps in the order they will be executed.
- Your team is trained to rerun a batch, check a reconciliation and read the Data Import error log without needing us on site.
How we support
- Post-cutover checks cover open items, aging reports and balance tie-outs for the first close cycles, as set out in the scope.
- Ongoing support, upgrades and continuous testing are available as a retainer after handover.
- Questions about Server Scripts, custom apps or later ERPNext upgrades are scoped separately and confirmed in writing before work starts.

