ERP migration

Migrate from inoERP to Epicor Prophet 21

Field-level mapping, validation, and rollback between inoERP and Epicor Prophet 21. We move data and schema; workflows are rebuilt natively in Epicor Prophet 21.

inoERP logo

inoERP

Source

Epicor Prophet 21

Destination

Epicor Prophet 21 logo

Compatibility

92%

12 of 13

objects map 1:1 between inoERP and Epicor Prophet 21.

Complexity

BStandard

Timeline

6-10 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from inoERP to Epicor ERP is a structural migration for manufacturing organisations that have outgrown open-source licensing and need a Tier 2 ERP with shop-floor depth, multi-site inventory, and a partner ecosystem. inoERP stores its core ERP data in MySQL or MariaDB with OneApp REST APIs; Epicor Kinetic uses SQL Server or Oracle with a Kinetic UI, built-in MES, and Data Migration Tool (DMT) for bulk imports. We extract directly from the inoERP database, clean and transform records according to the mapping matrix, then load into Epicor via DMT CSV templates or REST API. MRP-generated planning records in inoERP are runtime calculations tied to historical demand conditions and do not map verbatim to Epicor MRP tables; we flag these and recommend a post-migration MRP regeneration rather than importing stale supply recommendations. Workflows, automations, and custom PHP/Go scripts in inoERP do not migrate as code; we deliver a written inventory of these for the customer's Epicor partner to rebuild in Kinetic.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

inoERP logo

inoERP

What's pushing teams away

  • The project management module is incomplete and underdeveloped, frustrating organisations that need integrated project tracking alongside operations.
  • Documentation is sparse and community support is limited, making troubleshooting configuration issues and customisation challenges time-consuming for self-hosted deployments.
  • The platform has undergone a major architecture migration from PHP to Go back-end with a Flutter front-end, creating confusion about which version to deploy and whether older PHP documentation still applies.
  • Hosting, maintaining, and securing a self-managed ERP falls on the customer's team, generating hidden labour costs that often exceed the savings from free licensing.

Choosing

Epicor Prophet 21 logo

Epicor Prophet 21

What's pulling them in

  • Industry-specific design for wholesale distributors, not a general-purpose ERP repurposed for distribution — distributors choose P21 because it matches their replenishment, kitting, and counter-sale workflows out of the box.
  • Strong inventory control with automated replenishment, lot and serial tracking, and multi-warehouse management appeals to distributors with complex stock requirements and tight margin pressure.
  • Responsive customer support cited across G2 and Gartner reviews, with Epicor's 90% retention rate reflecting long-term customer satisfaction in a market where switching costs are high.
  • Cloud deployment on Microsoft Azure provides the flexibility to scale user counts and warehouse locations without on-premise infrastructure investment.
  • The Software Development Kit lets distributors personalize P21 to their specific business processes without modifying the application source code, preserving upgrade paths.

Object mapping

How inoERP objects map to Epicor Prophet 21

Each row shows how a inoERP object lands in Epicor Prophet 21, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

inoERP

Chart of Accounts

maps to

Epicor Prophet 21

GL Account

1:1
Fully supported

inoERP GL account codes, types, and currency assignments map to Epicor ERP GL Account codes. inoERP account type (Asset, Liability, Equity, Revenue, Expense) maps to Epicor GL Account Type. Account balances are imported as opening balances in Epicor GL through the Account Balance import template rather than as live transactions. We validate that inoERP account codes use characters compatible with Epicor's GL segment structure before import.

inoERP

Journal Entries

maps to

Epicor Prophet 21

GL Journal Entry

1:1
Mapping required

Posted journal entries in inoERP carry header data (journal name, date, description, reference) and line data (account, debit, credit, description). We import journal entries into Epicor ERP GL through the Journal Entry import template. Entries with non-standard currency or complex intercompany dimensions are flagged as requiring Epicor admin review before import. We recommend importing only open-period entries; closed historical periods are imported as opening balance adjustments rather than re-posted journal entries.

inoERP

Accounts Receivable

maps to

Epicor Prophet 21

AR Invoice and Customer

1:1
Fully supported

Open AR invoices in inoERP (invoice headers with line items, customer references, amounts, due dates) map to Epicor ERP AR Invoice. inoERP party structures map to Epicor ERP Customer records. Open invoices are imported as posted AR transactions; closed invoices are imported as historical records or excluded based on customer preference. Epicor DMT AR template supports header-level and line-level import.

inoERP

Accounts Payable

maps to

Epicor Prophet 21

AP Invoice and Vendor

1:1
Fully supported

Open AP invoices in inoERP map to Epicor ERP AP Invoice. inoERP supplier records map to Epicor ERP Vendor. We preserve invoice number, vendor reference, terms, and line-item amounts. Prepayments and credit memos migrate as separate AP transaction types. Historical closed AP invoices migrate as reference records if the customer chooses full history scope.

inoERP

Items / Inventory

maps to

Epicor Prophet 21

Part and PartWhse

1:1
Fully supported

inoERP item definitions with UOM, cost layers, category hierarchy, and on-hand quantities across locations map to Epicor ERP Part and PartWhse records. Lot and serial number traces migrate if inoERP tracks them. On-hand balances per warehouse map to Epicor PartWhse OnHandQty. Stock locations in inoERP map to Epicor Warehse and Bin records. We flag any inoERP item with negative on-hand as a data anomaly for cleansing before import.

inoERP

Sales Orders

maps to

Epicor Prophet 21

Sales Order

1:1
Fully supported

Open sales orders in inoERP (header fields including order number, dates, customer reference, terms, and line items with item, quantity, price, warehouse) map to Epicor ERP Sales Order. Closed orders can be migrated as historical records or excluded based on date-range filtering agreed during scoping. We resolve inoERP customer references to Epicor Customer IDs before import so that OrderHed.Company and OrderHed.CustNum are populated correctly. Order-level discounts and freight charges migrate as OrderMsc records.

inoERP

Purchase Orders

maps to

Epicor Prophet 21

PO Header and PO Release

1:1
Fully supported

Open purchase orders in inoERP map to Epicor ERP PO Header with PO Release lines. inoERP supplier references resolve to Epicor ERP Vendor records. Line items (item, quantity, price, due date) migrate as PORel records. Closed POs migrate as reference records if historical scope is agreed. We flag inoERP POs with mismatched line quantities and prices that may indicate data-quality issues.

inoERP

Work Orders

maps to

Epicor Prophet 21

Job Entry (JobHead / JobMtl / JobOper)

1:1
Fully supported

inoERP work orders with routing steps, material issues, resource transactions, and completion records map to Epicor ERP JobHead, JobMtl, and JobOper tables. The WIP ledger aggregate cost per work order in inoERP does not map directly to Epicor job costing because Epicor calculates WIP from JobMtl and JobOper actuals at runtime. We import JobMtl and JobOper from inoERP's material and operation records, but Epicor recomputes WIP on the first transaction post-migration. Open work orders migrate fully; closed work orders migrate as job history for audit trail purposes.

inoERP

Bills of Material

maps to

Epicor Prophet 21

ECC / BOM and Revision

1:1
Fully supported

inoERP BOMs and routings with multi-level structures and super BOMs map to Epicor ERP Engineering Control Center (ECC) BOM and Job BOM records. We export the full BOM hierarchy and routing sequence. Phantom BOMs in inoERP map to Epicor ECC Phase records with the Phantom flag. Co-products and by-products require manual mapping review because the co-product cost allocation model differs between platforms. We recommend validating BOM costs in Epicor after import because inoERP cost calculations may use different labour and overhead rates.

inoERP

Employees / HR

maps to

Epicor Prophet 21

Employee (HR module)

1:1
Mapping required

inoERP employee profiles, job definitions, positions, and compensation records map to Epicor ERP Employee. Compensation history is sensitive data that requires explicit customer consent during scoping and is imported as EmployeePay records. Leave balances migrate as leave transaction records. Approval hierarchies in inoERP do not map to Epicor's workflow system and are documented separately for rebuild. We flag compensation records with non-standard pay components (piece rates, shift premiums) that require Epicor HR admin review before import.

inoERP

Payroll / Bank Files

maps to

Epicor Prophet 21

Payroll Register (manual rebuild recommended)

1:1
Mapping required

inoERP payroll registers and compensation history map to Epicor ERP payroll data structures, but electronic bank file formats are customisable via JavaScript REST APIs in inoERP and have no direct Epicor equivalent. We export payroll registers, leave balances, and compensation history as reference data. Direct deposit bank file generation should be reconfigured in Epicor ERP post-migration by the customer's Epicor HR partner rather than imported from inoERP's custom file formats.

inoERP

Asset Accounting

maps to

Epicor Prophet 21

Asset Register

1:1
Fully supported

inoERP asset registers with acquisition details, depreciation schedules, and asset categories map to Epicor ERP Asset Register. Book values and accumulated depreciation import as opening asset balances. Depreciation methods (straight-line, declining balance, units of production) migrate to Epicor Asset Book records. Assets under construction in inoERP require review for appropriate Epicor capitalisation treatment. Asset locations map to Epicor Warehse and site records.

inoERP

Custom Objects / Custom Fields

maps to

Epicor Prophet 21

User-Defined Fields (UDFs) and UD Tables

lossy
Fully supported

inoERP's flexible schema allows organisations to add custom fields and tables without formal schema management. These map to Epicor Kinetic User-Defined Fields (UDCs) on standard tables or UD Tables for standalone custom records. We pre-create the Epicor UDF schema before production migration so that custom inoERP data has a landing destination. Custom PHP/Go code that computes field values in inoERP does not migrate; these calculations are documented for Epicor BPM rebuild.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

inoERP logo

inoERP gotchas

High

Architecture version split between PHP and Go/Flutter

Medium

OneApp API has no publicly documented rate limits

Medium

Closed-order and historical transaction volume drives migration scope

Low

Dynamic pull system recalculates lot sizes at runtime

Low

Self-hosting creates data export dependency on the customer

Epicor Prophet 21 logo

Epicor Prophet 21 gotchas

High

Third-party bolt-on integrations complicate migration scope

High

Dirty data without standardized processes compounds migration risk

Medium

SDK customizations and BPMs may not survive platform upgrades

Medium

Report-based export only for non-technical users

Low

Per-user pricing model requires accurate user count before migration planning

Pair-specific challenges

  • No direct migration path exists between inoERP and Epicor ERP

    inoERP uses a MySQL/MariaDB schema with OneApp REST APIs; Epicor ERP uses SQL Server or Oracle with Epicor DMT CSV templates and a REST API optimised for Epicor-to-Epicor migrations. There is no off-the-shelf connector. We write custom extract queries against the inoERP database, transform data to match Epicor DMT template column names and types, and load via Epicor DMT or direct REST API. This custom ETL layer is scoped, built, and tested per migration rather than reused from a library.

  • inoERP architecture version determines the source schema

    inoERP has two live codebases: the legacy PHP version and the Go/Flutter OneApp version. The database schema, module availability, and field names differ between versions. We confirm which version the source system runs during scoping by querying the database directly. Mixing schemas across versions produces corrupt mappings. This is particularly important for organisations that deployed PHP inoERP years ago and may be uncertain about their current version.

  • Epicor DMT requires pre-built CSV templates per object

    Epicor DMT ships with 60+ pre-defined import templates, but inoERP's field names and data structures do not match Epicor template columns by default. We build custom DMT templates for each migrating object (Part, SalesOrder, JobHead, BOM, etc.), mapping inoERP field names to Epicor column names and applying type conversions (dates, currency codes, UOM codes). Template validation in Epicor staging is required before production import; corrections to templates after production import has begun create reconciliation complexity.

  • MRP-generated supply recommendations should not be imported verbatim

    inoERP's dynamic pull-based MRP recalculates Kanban bucket sizes and supply requisitions at each demand trigger using the current inventory state and historical demand signals. These recommendations are valid only for the moment they were generated and under the demand conditions at that moment. Epicor ERP runs its own MRP independently using its own parameters. We flag inoERP MRP-generated records as non-migratable planning output and recommend customers configure Epicor's MRP parameters (safety stock, order quantities, lead times, reorder points) post-migration rather than importing historical inoERP supply suggestions.

  • Custom inoERP fields and tables require manual Epicor schema design

    inoERP's flexible schema allows organisations to add custom fields to standard tables and create entirely custom tables without a formal governance process. Epicor Kinetic uses a structured UDF and UD Table model that requires explicit schema design, field type selection, and UD Table creation before data import. We inventory all inoERP custom fields and tables during discovery, document their content and usage, and pre-build the Epicor UDF schema in the staging environment. Any inoERP custom PHP or Go code that computes field values cannot be migrated as code; these computations are documented for rebuild as Epicor BPMs.

Migration approach

Six steps for a successful inoERP to Epicor Prophet 21 data migration

  1. Discovery and inoERP version confirmation

    We audit the inoERP source environment by querying the database directly to confirm the codebase version (PHP or Go/Flutter), database engine (MySQL, MariaDB, or Oracle), and schema version. We inventory record counts across GL accounts, journal entries, open AR/AP invoices, inventory items, BOMs, work orders, sales orders, purchase orders, employee records, and asset registers. We identify any custom fields and custom tables in the inoERP schema. We agree on a date-range filter for historical transactions and document whether closed orders, closed work orders, and historical journal entries are in scope. The discovery output is a written migration scope with record counts per object and a data cleanse checklist.

  2. Epicor DMT template design and schema pre-build

    We design the Epicor Kinetic target schema in a staging environment. For each migrating object we build a custom DMT CSV template: Part (with PartCost and PartWhse), SalesOrder, PO, JobHead/JobMtl/JobOper, BOM/Job BOM, Customer, Vendor, Employee, Asset, and GL account. We configure Epicor Warehse and Bin records to match inoERP inventory locations, and create GL account segments that accommodate inoERP account code structures. For any inoERP custom fields we pre-create Epicor UDF columns and UD Tables. We coordinate with the customer's Epicor VAR to ensure the DMT user has the required security permissions and that GL period locks are open for the migration window.

  3. Data extraction and cleansing

    We run extract queries against the inoERP MySQL/MariaDB database or call the OneApp REST API endpoints, producing staged CSV files per object. We apply cleansing rules identified during discovery: duplicate record deduplication, negative on-hand corrections, inactive item flagging, date-range filtering for closed historical transactions, and account code normalisation. We flag and escalate any records with referential integrity issues (orders referencing non-existent customers, BOM lines referencing non-existent parts) to the customer's inoERP admin for resolution before we proceed to load. We produce a source-data validation report showing record counts, null fields, and cross-object reference integrity before loading into Epicor.

  4. Epicor staging import and reconciliation

    We run DMT imports into the Epicor staging environment in dependency order: GL accounts, inventory sites and bins, customers, vendors, employees, parts, BOMs, open AR/AP, sales orders, purchase orders, work orders, assets, and GL opening balances. Each phase emits a DMT summary report showing records accepted, rejected, and in error. We reconcile record counts, account balances, on-hand quantities, and order totals back to the inoERP source data and resolve any discrepancies before moving to production. Epicor DMT errors (validation failures, missing required fields, type mismatches) are corrected in the staging CSV and the import re-run.

  5. Production migration in dependency order

    We migrate to the Epicor production environment during an agreed freeze window. GL accounts and opening balances load first to ensure the chart of accounts is in place before any transactional data. Inventory sites, bins, and part records load next. Customers, vendors, and employees load before orders. Sales orders and purchase orders follow, then open AR/AP invoices. Work orders load with JobMtl and JobOper in a dependent sequence so that material and operation links are satisfied. BOMs and job BOMs load last. We run a reconciliation report after each phase comparing Epicor aggregate totals to inoERP source totals for that object class.

  6. Cutover, validation, and MRP rebuild handoff

    We freeze inoERP writes during cutover and run a final delta migration of any records modified during the migration window. We deliver a migration summary report with record counts, balance reconciliations, and a list of any exceptions that were not resolved. We provide a written inventory of inoERP workflows, custom fields, and any PHP/Go scripts that require rebuild in Epicor Kinetic as BPMs or Kinetic customisations. We do not rebuild inoERP custom code as Epicor BPMs inside the migration scope. We recommend customers configure Epicor MRP parameters (safety stock, reorder points, lead times, order policies) post-migration rather than importing historical inoERP MRP-generated supply recommendations.

Platform deep dives

Context on both ends of the pair

inoERP logo

inoERP

Source

Strengths

  • 100% free and open source with no per-user or per-module licensing fees.
  • Full ERP stack covering Finance, SCM, Manufacturing, and HR in a single integrated system.
  • Dynamic pull-based MRP adapts lot sizes to real-time demand changes rather than using fixed Kanban quantities.
  • Multi-database support including Oracle 12c, MySQL, and MariaDB on Windows, macOS, and Linux.
  • Mobile clients available for Android, iOS, macOS, Windows, and web browsers.

Weaknesses

  • Sparse official documentation and limited community support make self-hosting challenging.
  • Project Management module is under development and not yet production-ready.
  • Major architecture shift from PHP to Go/Flutter has created documentation fragmentation.
  • Self-hosting model shifts infrastructure labour costs to the customer, often negating free-licensing savings.
  • Very limited third-party review coverage and few public case studies demonstrating real-world deployments.
Epicor Prophet 21 logo

Epicor Prophet 21

Destination

Strengths

  • Purpose-built for wholesale distribution with industry-specific replenishment, kitting, and counter-sale workflows out of the box.
  • Multi-warehouse management with bin locations, cross-docking, and real-time inventory visibility across all warehouse locations.
  • Automated replenishment engine with demand-based and min-max planning reduces stockouts and overstock carrying costs.
  • AI-infused reporting via Epicor Prism provides Gen AI-driven insights into ERP data without requiring a BI team.
  • Strong customer retention at 90% and a 50-year track record in the distribution vertical provides long-term vendor stability.

Weaknesses

  • High total cost of ownership — per-user pricing of $150-200/month plus $10K-$500K implementation creates significant budget commitment for small and mid-market distributors.
  • Customization via SDK requires technical expertise and introduces upgrade risk when custom code conflicts with new P21 releases.
  • Report generation performance is a known pain point — multiple users report system freezes during large or complex report exports.
  • Third-party bolt-on reliance for functionality that competitors include natively increases integration complexity and total solution cost.
  • Limited public API documentation — developers building custom integrations report difficulty finding P21 API authentication methods and endpoint specifications.

Complexity grading

How hard is this migration?

Standard ERP migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across inoERP and Epicor Prophet 21.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    inoERP: Not publicly documented.

  • Data volume sensitivity

    B

    inoERP doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your inoERP to Epicor Prophet 21 migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about inoERP to Epicor Prophet 21 data migrations

Answers to the questions buyers ask most during inoERP to Epicor Prophet 21 migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your inoERP to Epicor Prophet 21 migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most inoERP migrations land between six and ten weeks for organisations with under 10,000 inventory items, fewer than 50 BOMs, and no historical GL import. Migrations with multi-level BOM hierarchies (over 100 structures), full open AR/AP subledger migration, historical journal entries, and work order WIP history move to fourteen to twenty-two weeks because of data cleansing scope, DMT template build, and BOM revalidation. The customer's Epicor VAR implementation timeline (typically three to six months for a full Epicor go-live) runs in parallel with the data migration phase.

Adjacent paths

Related migrations to explore

Ready when you are

Move from inoERP.
Land in Epicor Prophet 21, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day