Migrate from Business Central to ERPNext

A plan for moving ledgers, items, customers and AL extensions from Business Central to self-hosted ERPNext, with what moves cleanly, what needs rework and what drives cost and time.

On this page

Migrate from Business Central to ERPNext: what the move involves

If your Business Central renewal, licensing change, residency requirement or lock-in has pushed you toward ERPNext, plan for a data, configuration and extension rebuild rather than a software swap. The move is usually led by a small internal owner with an implementation partner, who handles data mapping, configuration decisions and the rebuild of custom logic. ERPNext is licensed under GPL-3.0 and built on the Frappe Framework, which is MIT-licensed. You can run it yourself with Docker Compose, with the bench command line tool, or on Frappe Cloud, so hosting location is a choice you make early, not a constraint the product imposes.

The heaviest work sits in three places: the chart of accounts, dimensions and posting setup, the item and customer masters, and the AL extensions your business depends on. Dimensions and posting groups in Business Central do not carry over one to one, so map each to ERPNext accounts, cost centers and item groups on paper before any data loads. Historical balances and open items need a reconciliation step that your finance team signs off. Custom AL logic becomes a Frappe app or a Server Script, and Server Scripts are disabled by default from version 15, so confirm the server_script_enabled setting in your target environment. Ask your partner to show which extensions are replaced, which are dropped and which need a new design.

The risk is moderate and mostly manageable: the hard parts are finance accuracy and scope discipline, not the platform itself. Expect the effort to scale with the number of extensions, entities and years of history you keep, and confirm the duration in a written, fixed-scope plan rather than relying on any general estimate. Before you commit, check which ERPNext version you will target against the supported versions page, since an end-of-life version creates its own migration later. Ask for a pilot load of one company and a reconciled trial balance before you agree on cutover.

Which Business Central capabilities map to ERPNext, and where rework or gaps sit

This table maps the main Business Central areas to their closest ERPNext equivalents and marks each as clean, needs rework or gap. Read the status as a starting hypothesis to test against your own Business Central licence plan, installed extensions and workflows, not as proof of feature parity. The main takeaway is that the heaviest effort usually sits in custom AL extensions, dimension design and manufacturing or project rules, not in the core ledger.

Business Central areaERPNext equivalent and fitStatus and what to confirm
General ledger and chart of accountsChart of accounts, fiscal years and journal entries in ERPNext Accounts. Account structure is rebuilt, not copied.Clean for standard accounts. Confirm account types, tax accounts and reporting groups against your statutory reports.
DimensionsAccounting dimensions in ERPNext can be added to documents and reports. Dimension count and hierarchy need a design decision.Needs rework. Map each Business Central dimension and value set before import, and test reports that filter on them.
Posting groupsNo direct one-to-one object. Default accounts on customer, supplier, item and company records, plus item group and tax templates, take this role.Needs rework. Document how each general, customer, vendor and inventory posting group maps to ERPNext defaults.
Sales and purchasingQuotations, sales orders, delivery notes, sales invoices, purchase orders and receipts with pricing rules and tax templates.Clean for standard flows. Confirm approval rules, price lists and multi-currency needs in your own process.
Inventory and warehousingStock ledger with warehouses, batches, serial numbers and valuation methods in ERPNext Stock.Needs rework where Business Central bin, location or reservation logic is customized. Confirm valuation method and costing rules.
ManufacturingBills of materials, work orders, job cards and subcontracting in ERPNext Manufacturing.Needs rework or gap. Confirm routing depth, shop-floor reporting and capacity planning against the Business Central plan you run.
Projects and jobsProjects, tasks and timesheets, with billing linked to sales documents.Needs rework. Job costing and WIP logic often differ, so confirm each project billing rule with your finance team.
Fixed assetsAsset module with categories, depreciation schedules and disposal entries.Needs rework. Confirm depreciation books, tax depreciation and any Business Central fixed asset extensions before loading.
Custom AL extensionsFrappe apps and server scripts. Server scripts are disabled by default from version 15 and must be enabled by configuration.Gap for most extensions. Each AL object needs a rebuild or a retirement decision, and Frappe Cloud public benches do not allow server scripts.
Microsoft 365 and Power Platform linksNo native equivalent. Integration goes through custom APIs, connectors or the Frappe social login and LDAP options.Gap. Confirm which Office, Teams or Power Automate flows your users depend on before scoping the migration.

How Business Central data gets out and into ERPNext

The first decision is which export path your data can actually use. For Business Central online, Microsoft documents a BACPAC export to an Azure standard storage account, which requires a paid subscription and is limited to 10 times per month per environment. Confirm in the Business Central admin center that your tenant and role can run the export before the migration schedule depends on it. Microsoft does not support restoring that BACPAC into a working on-premises Business Central environment, so the file is an extraction source, not a stepping stone. Plan to load it into SQL Server and query the tables directly, or to export the data from the live source, and record which path you chose and why.

Once the data is outside Business Central, the work is mapping. Build a crosswalk for each ERPNext DocType you will load (Customer, Supplier, Item, Account, Journal Entry and so on), tying each Business Central field and dimension value to the ERPNext field or to a custom field you have agreed to create. Generate the matching template from ERPNext's Data Import tool so column names match what it expects. Child table rows, such as invoice lines or item reorder levels, must be keyed to their parent records, so decide how each parent identifier will be carried into the file. Ask your ERPNext implementation partner to confirm how they will handle these keys before any file is built.

Load in small batches and reconcile after each one. ERPNext's documentation advises importing only a few thousand records at a time, so split large ledgers into files of that size and load masters before transactions. Use the import's update mode only where you intend to overwrite existing records. After each batch, compare record counts and balances per account against the Business Central extract, and keep the rejected rows and the reason for each in a log. Those logs and reconciliation sheets are the evidence your finance and audit teams will ask for, so store them with the migration plan.

Which data and integrations to move, and which to rebuild

Business Central holds master data, open balances, documents, access rules and connections to other Microsoft and payment services, and each one moves by a different route. Plan each group separately so that ledgers reconcile before anyone switches users to ERPNext. The export route for each group depends on how your Business Central environment is hosted, so confirm the source before you schedule the work.

Master data and chart of accounts

Customers, vendors, items, the chart of accounts and dimensions are the first load into ERPNext. Extract them from your Business Central source as flat lists, then map each Business Central dimension to an ERPNext accounting dimension or cost center, and map posting groups to ERPNext default accounts. Load them with the Data Import tool from CSV or Excel templates, a few thousand records at a time, and reconcile counts against the source. Expect to rebuild the number series and item variants by hand.

Open balances and transactions

Open customer and vendor balances, inventory on hand and open orders must agree with the general ledger at cutover. Rebuild opening balances as journal entries and opening stock entries in ERPNext rather than trying to replay posting history. Historical transactions are usually kept in a read-only archive, not imported. Confirm with your auditors which history they need in the new system and how long the Business Central extract must remain available.

Documents and attachments

Posted invoices, purchase orders, contracts and scanned receipts often sit in Business Central as attachments linked to records. Export them with their document identifiers so each file can be re-attached to the matching ERPNext document or stored in a document archive that the team can search. Confirm which attachment types your Business Central tenant holds, since the export routes for attachments are not covered by the sources used for this page, and test a sample of files before bulk loading.

Users, roles and permissions

Business Central permission sets do not map one-to-one to ERPNext roles, so rebuild access from a role matrix rather than copying user records. Map each Business Central permission set to an ERPNext role, then restrict document-level access with user permissions and role permissions. Identity can be re-pointed to your own directory with LDAP integration or social login keys, which keeps sign-in under your existing controls. Remove inactive accounts before the import.

AL extensions and custom logic

AL extensions, custom reports and event subscribers must be rebuilt, not exported. Map each business rule to a Server Script or a Frappe app. Since 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. Decide early which rules belong in a custom Frappe app under version control, and confirm the target ERPNext version before design starts.

Microsoft 365 and payment connectors

Connections to Outlook, Teams, SharePoint, bank feeds and payment processors do not carry over. Inventory each connector, decide whether the ERPNext site will call it directly or through a middleware layer, and re-point credentials to vendor accounts you control. Each connector needs its own test plan, including webhook endpoints and failure alerts. Confirm each vendor's supported integration method with the vendor, since this page does not cover connector details.

Migration sequence from inventory to decommission

This five-step sequence moves a Business Central company to a self-hosted ERPNext site in controlled stages, so each stage produces evidence that the next one depends on. Each step closes with a named output and a check that must pass before work moves forward.

  1. Inventory extensions, reports, integrations and users

    Your partner or internal team lists every AL extension, custom report, RDLC or Word layout, page customization, scheduled job, integration endpoint and user role in the Business Central tenant, then tags each item as keep, rebuild as a Frappe app or server script, retire, or replace with a standard ERPNext feature. Finance and operations owners sign off the list and the dimension and posting group map. The step is done when every item has a disposition and an owner, and the signed list becomes the scope baseline for later steps. Confirm the extension list against the tenant's installed apps, not only the source repository, since they can differ.

  2. Load a pilot company into a non-production site

    Extract the chosen company's data from a BACPAC file or the on-premises SQL database, then map the chart of accounts, dimensions, posting groups, items and customers to ERPNext doctypes. Load master data first with the Data Import tool using the downloadable templates, in batches of a few thousand records or fewer, and load transactions only after masters reconcile. Run the pilot on a self-hosted ERPNext site built with Docker Compose or bench, not on a public shared site, so Server Scripts and custom apps can be tested. The step is done when record counts and opening balances match the source for the pilot company and the import log shows no unresolved errors.

  3. Rebuild custom logic and test it

    Rebuild the approved AL logic as Frappe custom apps or Server Scripts, with Server Scripts enabled explicitly if you run version 15 or later. Test posting, number series, approval flows, document printing and each integration against the pilot data, and record each test case with its expected and actual result. Security reviewers check role permissions, the guest and API access settings, and the login method, including any LDAP or social login configuration. The step is done when every kept item passes its test cases and the security review has no open high-priority findings.

  4. Run a parallel period with reconciled ledgers

    Keep Business Central live as the book of record while ERPNext receives the same transactions for a defined period agreed in advance. Each week, the finance team reconciles trial balances, open customer and vendor balances, inventory valuation and bank reconciliations between the two systems, and logs every variance with its root cause. The step is done when variances are explained, the agreed reconciliation pack is signed by the controller, and the migration owner accepts the cutover readiness report. Ask your partner for the reconciliation template before the parallel run starts.

  5. Cut over with a frozen source period

    Freeze posting in Business Central for the cutover period, take a final export, load the remaining open items and balances into ERPNext, and reconcile the opening balances to the frozen source. Switch integrations, users and scheduled jobs to ERPNext in the order set during inventory, and keep a documented rollback path to the frozen source until the first closing period in ERPNext is reconciled. The step is done when opening balances agree with the frozen source, all integrations run on ERPNext, and the business owner signs the go-live decision.

  6. Decommission with archived exports

    Once the agreed retention period for the source system has been confirmed with your auditors and legal team, export archives of ledgers, documents and audit trails in formats your retention policy accepts, store them under your own access controls, and then shut down or restrict the Business Central tenant or on-premises database. Remove retired integrations, service accounts and licenses, and record the archive location and checksums. The step is done when the archive is verified by a restore or read test, the retention owner accepts it in writing, and access to the source system is closed.

Rebuilding AL extensions as Frappe apps or server scripts

Each AL extension in your Business Central estate needs a destination decision before cutover. Simpler logic, such as validation on a document event or a small endpoint that an integration calls, can usually be rebuilt as a Server Script in ERPNext, written in Python and attached to a DocType. Logic that adds new DocTypes, pages, reports, scheduled jobs or several interdependent pieces belongs in a Frappe custom app, which is versioned in source control, deployed with the bench command line tool or your container image, and reviewed like any other code. Map each extension to one of these two targets, and record which events, fields and permissions it touches. Treat the mapping as the inventory for the rest of the project, not as a rewrite list.

Hosting choice decides whether Server Scripts are even available. 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. If your extensions depend on Server Scripts, plan for a self-hosted bench, a dedicated Frappe Cloud setup, or a custom app instead, and confirm the current behavior with Frappe's documentation for your chosen version before you commit. Changes to Server Scripts also need an owner and a change process, because anyone with the right role can alter business logic through the browser unless you restrict that access in the environment.

Write a test plan for each extension before you rebuild it. For each one, capture the Business Central input and posted output from a representative set of transactions, then reproduce the same scenarios in a staging ERPNext site and compare ledger entries, document statuses and error messages. Include negative cases such as blocked postings and rejected approvals. Then decide which customizations to retire: standard ERPNext features, configuration, or a third-party app may already cover them, and every retired extension removes future upgrade testing. Ask your implementation partner to show the test evidence per extension in the written scope.

What drives migration cost and duration

This table lists the factors that change the cost and effort of moving from Business Central to ERPNext, and what you can do about each one. Read each row as a lever: the more of a driver you have, the more partner time, internal staff time and testing the migration needs. Use it to scope a quote before any work starts.

DriverWhy it mattersHow to reduce it
Number of AL extensions and custom reportsEach AL extension must be rebuilt as a Frappe app, a Server Script or a standard configuration, and each has to be tested. Custom reports need equivalent ERPNext reports or print formats.Inventory every extension and report, then retire the ones nobody uses. Map the rest to standard ERPNext features first and build custom code only where a gap remains.
Years of history to migrateOpening balances are simple, but full transaction history means more rows to load, more reconciliation and more checks against the Business Central ledgers.Migrate closing balances and open items for the first ERPNext year, and keep older history in a read-only archive that you query when needed.
Dimensions and posting group variantsBusiness Central dimensions and posting groups must be mapped to ERPNext accounts, cost centers and item groups. Many variants mean more mapping decisions and more test cases.Consolidate dimensions before migration. Agree a written mapping table for the chart of accounts and posting groups with finance, and sign it off before loading data.
IntegrationsEach system that reads from or writes to Business Central (banks, payroll, e-commerce, tax, reporting) needs a new connection or a replacement. Connection work often takes more time than data loading.List every integration with its direction, frequency and owner. Decide which ones to rebuild, which to retire and which to replace with a file exchange in the first phase.
Number of legal entities, companies and currenciesMulti-company and multi-currency setups need intercompany rules, currency revaluation and consolidation logic to be recreated and tested.Migrate one company at a time where the business allows it, and document intercompany and currency rules before building anything.
Data quality and volumeDuplicate customers, vendors and items, and inconsistent units of measure slow loading and cause rejected rows. ERPNext's Data Import documentation advises importing only a few thousand records at a time, so large volumes need more load batches.Clean master data in Business Central before export. Plan load batches by record type and check each batch with reconciliation reports.
Hosting modelSelf-hosting in your own cloud or data center means your team or partner runs the servers, backups and upgrades. Frappe Cloud shifts some of that work to a managed host, at a published monthly fee that depends on the plan.Confirm in writing who operates the servers, backups and upgrades. Compare the pricing page figures against your own hosting estimate, and ask the partner to price each component separately.
Internal skills and staff timeFinance and IT staff must validate mappings, test month-end runs and learn the Frappe interface. Limited Python or Frappe skills increase the share of work that goes to outside help.Name business owners for each module early, and schedule their test time. Ask the partner to pair with your staff so knowledge stays in-house after go-live.
Compliance evidence needsAudit trails, access reviews and change records for the migration must be kept for auditors. The migration itself produces evidence that assessors will ask for, and that work adds effort.Agree the evidence list before cutover, including reconciliation sign-offs and access reviews. DeployOpen prepares controls and evidence for assessments, but independent auditors issue the opinions.

What usually goes wrong and how to prevent it

Most failed Business Central to ERPNext migrations fail on data and governance, not on the software. The cards below cover the risks that recur at the ledger, import, customization and cutover stages, and the checks that keep each one from reaching production.

Unreconciled opening balances

If the opening trial balance in ERPNext does not match the final Business Central balances by account, dimension and period, every later report inherits the difference. Reconcile receivables, payables, bank and inventory valuation to the penny before go-live, and record who signed off each reconciliation. Load opening balances as a single documented journal, then confirm the totals in ERPNext match the BACPAC or SQL extract exactly.

Dimension and posting group mismatches

Business Central dimensions, general posting setup and VAT posting groups do not map one-to-one to ERPNext cost centers, accounts and tax templates. Build a written mapping table for each dimension value and posting group before loading transactions, and test a sample of invoices end to end. Mismatches usually appear first in VAT returns and inventory accounts, so check those reports first.

Mass imports beyond a few thousand records

ERPNext's Data Import tool is documented for importing a few thousand records at a time, so a full customer, item or ledger history loaded in one file will time out or fail partway. Split loads into batches, import masters before transactions, and keep a log of each batch with row counts. Confirm record counts against the source after every batch rather than only at the end.

Undocumented AL logic

Business Central extensions often hold posting logic, approval rules and report changes that no one has written down since the original developer left. Before rebuilding anything, inventory every extension, its events and its tables, and classify each rule as a standard feature, a Frappe app change or a server script. Server Scripts are disabled by default from version 15 and must be enabled explicitly, so confirm that policy with your administrators before design starts.

Unsupported version or missing support plan

Running an ERPNext release outside Frappe's supported list leaves you without a maintenance path, and warranty coverage from Frappe requires a listed version plus a matching Frappe Cloud support plan. Check the supported versions page before choosing a target, and confirm which partner or internal team owns security patches. Plan upgrades on the minor release cadence so the site never falls behind a supported line.

Cutover without a frozen source period

If Business Central stays open for posting while the final extract runs, the ERPNext data will miss late entries and the reconciliation will never close. Agree a cutover date, freeze posting in the source environment, extract the BACPAC or SQL database after the freeze, and keep the source read-only as the audit reference. Ask your Business Central administrator to confirm the export limits for your tenant before scheduling the window.

How the migration changes by starting point

On-premises Business Central already sits on a SQL Server database you control, so the data extraction step is usually the simplest of the four starting points. You do not depend on the monthly BACPAC limit that applies to online environments, and you can query the company tables directly once you have a restored copy. The work moves to mapping: deciding which ledger entries, dimensions and posting setups carry into ERPNext, and which history stays in an archive.

  • Direct database access: Take a copy of the production database for extraction so the live system is not affected during mapping.
  • Release currency: Confirm which Business Central release wave your instance runs, since older on-premises builds have their own upgrade and support questions to answer before you cut over.
  • Existing infrastructure: Your team may already run SQL Server and backup tooling, which can reduce the new platform work, but ERPNext runs on MariaDB or PostgreSQL, so confirm which database engine your operators will support.
  • Dual running: Plan a period where both systems are readable so finance can reconcile open items before the cutover date.

Confirm with your Business Central partner or internal DBA which database version and company list you will extract, and agree the reconciliation sign-off before anyone starts the data load.

Questions buyers ask before moving from Business Central to ERPNext

What does it cost to move from Business Central to ERPNext?

The total is driven by scope more than by any single line item. Business Central costs recur as per-user licenses and partner or support contracts, while ERPNext has no license fee for self-hosting, so the main one-time costs are migration, data cleansing, rebuilding customizations and testing. The biggest drivers are the number of AL extensions to rebuild, how many years of history you load, how many users and integrations you connect, and whether you run your own servers or use Frappe Cloud. Ask any implementer for a fixed-scope quote with each component listed separately: discovery, data mapping, data loading, custom apps or server scripts, testing, hosting setup, training and post-go-live support.

How long does a Business Central to ERPNext migration take?

The timeline depends mainly on how much customization and data history you carry forward. The first step is an inventory of your AL extensions, reports, integrations and data quality, because that inventory sets the size of the rebuild. Chart of accounts design, dimension and posting group mapping, and several trial loads usually take longer than the final cutover. Data Import is documented for a few thousand records at a time, so large ledgers need batched loads, and that adds validation rounds. Ask your implementer to show the phases, the decision points and what must be signed off before each one. Treat any duration quoted without an inventory as a guess.

What must our internal team provide during the migration?

Your internal team owns the business decisions, and the implementer cannot make them for you. Finance must approve the chart of accounts, dimensions, posting groups and tax logic that will be recreated in ERPNext. Operations must confirm item master, unit of measure and inventory valuation rules, and business owners must sign off on test cases and reconciliation results. IT must provide Business Central data extracts, access to the source environment, server or hosting decisions, identity integration and a named person for each integration. Plan for a subject matter expert in each functional area to be available during trial loads, since those reviews drive most rework.

Can our own team migrate from Business Central to ERPNext without a partner?

A capable team can do parts of the work, but the decision depends on your in-house skills and risk tolerance. ERPNext's Data Import tool uses downloadable templates and handles child table rows, so a team comfortable with spreadsheets and data validation can load master data. Rebuilding AL extensions as Frappe apps or server scripts requires Python and Frappe framework knowledge, and server scripts are disabled by default from version 15, so someone must enable and govern them. Production hosting, backup, upgrades and security testing are separate skills. Consider a fixed-scope engagement for the parts your team cannot staff. DeployOpen plans, implements, integrates, hardens and documents self-hosted platforms in your own infrastructure, and scope is agreed in writing before work starts.

Does ERPNext have a license fee, and what does hosting cost?

ERPNext is licensed under GPL-3.0, and the ERPNext pricing page states that self-hosting is free. The software itself carries no license fee, but you pay for servers, storage, backups, monitoring, staff time and any implementation or support you buy. Frappe Cloud shared site hosting starts at 5 US dollars per month, and Frappe Cloud servers start at 20 US dollars per month for shared instances and 125 US dollars per month for dedicated servers, according to the ERPNext pricing page. Those are list starting points, so confirm current rates and what each plan includes before budgeting. Ask whether support for ERPNext and the Frappe Framework comes with the hosting plan, because warranty coverage from Frappe depends on running a listed version with a matching support plan.

How do we run Business Central and ERPNext in parallel during cutover?

Run them in parallel for a defined period, with Business Central remaining the book of record until reconciliation is signed off. Load a trial dataset into ERPNext, reconcile trial balances, open items, inventory quantities and customer and vendor balances against Business Central, and repeat until the differences are explained. Keep Business Central in read-only mode for the final cutover window so no postings are made after the final extract. Document which transactions are entered in each system during the overlap, and plan for the reverse procedure if cutover fails. Retain a Business Central export for audit and retention purposes, and confirm the export method and limits with Microsoft before you depend on it.

How DeployOpen scopes and runs this migration

DeployOpen plans, implements, customizes, integrates, hardens, backs up and supports self-hosted ERPNext inside your own infrastructure, whether that is your cloud account, your data center or an air-gapped network. For a Business Central to ERPNext move, the work covers the parts described above: the dimension and posting group mapping, the chart of accounts, the Data Import loads, and the rebuild of AL extensions as Frappe apps or server scripts. Most engagements are fixed-scope, and the scope, deliverables and timelines are agreed in writing before any work starts. That written scope is the document you should use to compare proposals, so ask each provider to state which AL objects, reports and integrations are in and which are out.

Quotes follow from that written scope. DeployOpen does not publish a price list, so there is no standard rate card to check against. To get a comparable quote, give the provider your Business Central version, whether the environment is online or on premises, the number of companies and legal entities, the count of custom objects and integrations, and the record volumes for customers, vendors, items and open ledger entries. Ask the provider to separate one-time work (mapping, data loads, extension rebuilds, cutover) from recurring items (hosting operations, backups, upgrades and support). Confirm which Frappe Framework and ERPNext versions the plan targets, since the supported versions page lists different end-of-life dates for each release.

Ongoing support is available as a retainer after go-live. For this migration, the retainer is most useful for the minor releases that ERPNext ships frequently, for backup verification, for security patching of the host, and for adding Frappe apps or server scripts as the business changes. Server scripts on Frappe Cloud public shared benches are not allowed, and from version 15 they must be enabled with the server_script_enabled setting, so confirm where your environment runs before the scope is fixed. DeployOpen prepares the systems and documentation for your own assessments, but independent auditors and certification bodies issue any audit report or certification.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.