ERP migration

Migrate from Dolibarr ERP to Epicor Prophet 21

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

Dolibarr ERP logo

Dolibarr ERP

Source

Epicor Prophet 21

Destination

Epicor Prophet 21 logo

Compatibility

75%

9 of 12

objects map 1:1 between Dolibarr ERP and Epicor Prophet 21.

Complexity

BStandard

Timeline

6-10 weeks

Rollback included Accuracy guarantee Field-level validation

Try the reverse

Epicor Prophet 21
Dolibarr ERP

Overview

What this migration involves

Moving from Dolibarr ERP to Epicor ERP is a migration from a modular open-source ERP built for SMEs and freelancers to a vertically specialized enterprise platform targeting manufacturing, distribution, and retail operations. Dolibarr stores custom fields as opaque JSON in an extraoptions column, while Epicor uses standard relational UD fields that require a pre-migration deserialization and type-mapping step. There is no documented Dolibarr REST API for bulk operations, so we access Dolibarr's MySQL or PostgreSQL database directly with read-only credentials, bypassing the web application entirely during the migration window. Epicor's parent-child object architecture (Part -> PartSite, Customer -> CustomerContact, OrderHed -> OrderDtl) means we must sequence all parent-record inserts before child-record imports to satisfy foreign key constraints. We do not migrate Dolibarr Workflows, Dolistore add-on modules, binary file attachments, or HR-specific leave and expense records that depend on Epicor's HR module being licensed. We deliver a written inventory of any unrecoverable automation and HR configuration for the customer's Epicor administrator to rebuild post-migration.

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

Dolibarr ERP logo

Dolibarr ERP

What's pushing teams away

  • Dated, utilitarian UI with infrequent visual updates frustrates teams expecting modern design from SaaS alternatives.
  • Reporting and analytics capabilities are weak out of the box, requiring paid modules or custom SQL work to get meaningful dashboards.
  • Critical SQL injection vulnerabilities disclosed in version 9.0.1 with no immediate patch made some teams reconsider their exposure.
  • Community support only — no official SLA or paid support tier for self-hosted deployments creates risk for businesses needing guaranteed response times.
  • Feature gaps in financial workflows like payment release, margin reports, and multi-currency precision cause teams with complex accounting needs to migrate.

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 Dolibarr ERP objects map to Epicor Prophet 21

Each row shows how a Dolibarr ERP 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.

Dolibarr ERP

Third Party (llx_societe, llx_socpeople)

maps to

Epicor Prophet 21

Customer / Supplier / Contact

1:1
Fully supported

Dolibarr's llx_societe stores customers, suppliers, and prospects in a single table differentiated by Tiers type codes (0=customer, 1=supplier, 2=lead). llx_socpeople stores contacts linked to llx_societe by fk_soc. We split each Dolibarr Third Party into the equivalent Epicor Customer or Supplier entity plus a related Contact record. Address fields (street, zip, town, country) map to Epicor's Address table with addr fields; we create a Company record in Epicor first, then link all Contact records before any Order or Invoice import. The Dolibarr Tiers code maps to Epicor's Customer_Tye value and the Customer/Ty type classification.

Dolibarr ERP

Product / Service (llx_product)

maps to

Epicor Prophet 21

Part / Part Plant

1:1
Fully supported

Dolibarr llx_product with type=0 (product) maps to Epicor Part with Part.TypeCode=Part; type=1 (service) maps to Epicor Part with Part.TypeCode=Service. Price fields from llx_product require precision normalization because Dolibarr allows up to 5 decimal places on unit price by default while Epicor applies a decimal-separator configuration per company. We record Dolibarr's Setup > Limits accuracy settings during discovery and apply matching field-level formatting in Epicor. Stock levels in llx_product_stock map to PartWhse quantities in Epicor with the warehouse reference resolved from llx_entrepot.

Dolibarr ERP

Commercial Proposal (llx_proposal)

maps to

Epicor Prophet 21

QuoteHed / QuoteDtl

1:1
Fully supported

Dolibarr Proposals map to Epicor QuoteHed (header) and QuoteDtl (line) records. Dolibarr's integer status codes (0=draft, 1=validated, 2=signed, 3=refused, 4=billed) map to Epicor's QuoteHed.QuoteStage values. Proposal lines reference llx_product IDs that we resolve to Epicor PartNum during import, and we create a QuoteCnt record for the linked third-party contact. Historical Proposals with status signed or billed are migrated with their original dates; draft proposals are migrated as open quotes requiring review in Epicor before use.

Dolibarr ERP

Customer Order (llx_commande)

maps to

Epicor Prophet 21

OrderHed / OrderDtl

1:1
Fully supported

Dolibarr Customer Orders map to Epicor OrderHed (header) and OrderDtl (line). OrderHed.BTCustomer indicates whether the order was entered by the customer portal, which is set to false for all migrated orders. We resolve Dolibarr's fk_soc (third-party reference) to the Epicor Customer.CustNum and map fk_user_author (order owner) to Epicor's SalesRep.SalesRepCode. The Dolibarr order date maps to OrderHed.OrderDate and the payment terms reference maps to OrderHed.TermsCode via a lookup table derived during scoping.

Dolibarr ERP

Invoice (llx_facture, llx_paiement, llx_paiement_facture)

maps to

Epicor Prophet 21

InvcHead / InvcDtl / CashHead

lossy
Fully supported

Dolibarr invoice migration is the most complex object because it requires preserving three related tables simultaneously. llx_facture (header) maps to Epicor InvcHead; llx_facturedet (lines) maps to InvcDtl; llx_paiement (payments) maps to Epicor CashHead with the payment method resolved via the payment type mapping (DTYPE_CHQ to Check, DTYPE_VIR to ElectronicTransfer); and llx_paiement_facture links payments to invoices which maps to InvcHead应用中 with matching InvcHead.InvoiceNum and CashHead.Reference. We process invoices in two phases: first all InvcHead and InvcDtl records, then all CashHead records with their links. Open invoices and closed invoices migrate with their original dates and status flags preserved.

Dolibarr ERP

Bank Account and Transactions (llx_bank)

maps to

Epicor Prophet 21

CashHead / BankAcct

1:1
Fully supported

Dolibarr llx_bank records hold bank transaction rows linked to llx_bank_account. We map llx_bank rows to Epicor CashHead with the transaction date, amount, and label preserved. The reconciliation flag from Dolibarr (reconciled column) sets CashHead.LegalNumber status. We link CashHead to the corresponding Epicor BankAcct by matching the bank account reference or IBAN from Dolibarr. Epicor's full bank reconciliation workflow is configured post-migration by the customer's Epicor administrator.

Dolibarr ERP

Project and Task (llx_projet, llx_projet_task)

maps to

Epicor Prophet 21

Project / ProjectTask

1:1
Fully supported

Dolibarr Projects map to Epicor Project with Project.Workspace_Job closed flag set based on the project's active status. Task rows in llx_projet_task map to Epicor ProjectTask with work date, estimated hours, and task owner preserved. Time budgets stored in llx_projet_task_time migrate to ProjectTaskBudget entries in Epicor. Dolibarr project milestones (project milestone dates from the project record) map to Epicor ProjectPhase entries with Phase start and end dates carried over.

Dolibarr ERP

Custom Fields (llx_extrafields via extraoptions JSON)

maps to

Epicor Prophet 21

UD (User-Defined) Fields on standard tables

lossy
Fully supported

This is the most technically involved mapping step. Dolibarr's extrafields system serializes custom field definitions and values as JSON inside the extraoptions column on the parent table (llx_societe, llx_product, llx_proposal, llx_commande, llx_facture, llx_projet, llx_user). We parse each object's extraoptions JSON at migration time, deserialize every key-value pair, and map each to a typed Epicor UD field (UD01, UD05, or a named UD column on the parent table). We flag any Dolibarr file-path references stored as text fields that cannot map cleanly to Epicor's UD field types. The destination UD fields are pre-created during the schema design phase before any data migration begins.

Dolibarr ERP

User Accounts (llx_user)

maps to

Epicor Prophet 21

User / SalesRep

1:1
Fully supported

Dolibarr llx_user records migrate as Epicor User records and corresponding SalesRep records. We map Dolibarr's login email to Epicor.UserName and preserve the user type (internal vs external), status, and permission group memberships. We do not migrate Dolibarr password hashes because they are salted bcrypt with no exportable format; users reset passwords through Epicor's standard invitation flow after migration. Active/inactive status is preserved; users marked inactive in Dolibarr are provisioned as inactive in Epicor to prevent inadvertent access.

Dolibarr ERP

Agenda / Calendar Events (llx_actioncomm)

maps to

Epicor Prophet 21

Calendar / DataTable (Engagement migration inventory)

lossy
Fully supported

Dolibarr calendar events in llx_actioncomm are migrated as a written inventory for the customer's Epicor administrator to rebuild in Epicor's Kinetic calendar module or a connected third-party scheduling tool. Dolibarr's recurring event rules and fullcal integration metadata do not have a direct Epicor equivalent; we document the event type, date range, owner, linked third-party, and linked project in a CSV export. Epicor's Kinetic UI includes a native calendar component that can be configured for similar scheduling purposes by the administrator.

Dolibarr ERP

Attachments (llx_document references)

maps to

Epicor Prophet 21

Not migrated (file inventory delivered)

1:1
Fully supported

Dolibarr attachments are stored as files on the filesystem with references in llx_document pointing to physical file paths. We do not migrate binary file attachments as part of the standard migration scope because Dolibarr stores files in a flat filesystem structure with no consistent relational reference that maps to Epicor's document management model. We export a manifest of all attachment file paths linked to their parent record (third party, product, invoice, project) and deliver it to the customer for manual re-upload to Epicor's SharePoint or Linked attachments module post-migration.

Dolibarr ERP

Warehouse / Stock Locations (llx_entrepot, llx_product_stock, llx_stock_mouvement)

maps to

Epicor Prophet 21

Warehouse / PartWhse / PartTran

1:1
Fully supported

Dolibarr warehouses (llx_entrepot) map to Epicor Warehouse records. Stock levels in llx_product_stock map to PartWhse records with on-hand quantities and warehouse location references. Stock movement history in llx_stock_mouvement is migrated as PartTran records in Epicor with transaction type labeled as DMB-Transfer (Debit Memo Transfer) as the closest equivalent, with the original movement date, quantity, and warehouse from/to fields preserved. This migration requires Epicor's Inventory Management module to be licensed.

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.

Dolibarr ERP logo

Dolibarr ERP gotchas

High

Foreign key constraint errors on cross-distribution database restore

High

SQL injection vulnerabilities in version 9.0.1

Medium

Custom fields stored as JSON in extraoptions require field-by-field deserialization

Medium

Decimal precision and rounding configuration affects price fields

Low

No native iOS/Android app forces reliance on browser

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

  • Dolibarr has no REST API — migrations require direct database access

    Dolibarr does not expose a documented public REST API for bulk record operations. All migration tooling for Dolibarr relies on its built-in CSV import/export wizard or direct MySQL/PostgreSQL database queries. We use read-only database credentials scoped to the migration window, bypassing the web application entirely to eliminate web-layer exposure (including any active SQL injection vulnerabilities) during the export phase. This requires the customer to provide database host, port, credentials, and schema name during onboarding, and to whitelist our IP if the database is not accessible over the internet.

  • Epicor Kinetic parent-child object sequencing is mandatory

    Epicor ERP uses a strict parent-child relationship model that enforces foreign key constraints during API insert. OrderHed must exist before OrderDtl; Customer must exist before CustomerContact; Part must exist before PartPlant; Project must exist before ProjectTask. Importing in the wrong order produces a 400 Bad Request from the REST API with a cascading error message. We sequence every migration phase with parent objects first, using Epicor's REST API to verify each parent record is committed before any child-record batch begins. For multi-entity Epicor configurations, the Company must also exist before any Customer or Order record.

  • Dolibarr extraoptions JSON deserialization requires custom per-object parsing

    Dolibarr's extrafields system serializes custom field definitions and values as JSON in the extraoptions column, which standard CSV export treats as opaque strings. Epicor uses typed relational UD fields on standard tables. We write a custom deserializer for each Dolibarr object that has extraoptions populated, parse the JSON key-value pairs, and map each to the correct Epicor UD column type. If the customer's Dolibarr instance has custom modules installed (Dolistore add-ons), their extraoptions schema may include module-specific fields that require additional mapping logic before Epicor UD field creation.

  • Foreign key constraint errors on cross-distribution database restore

    When extracting Dolibarr data via MySQL dump for migration, restoring the dump on a different Linux distribution or MySQL version can produce errno 150 foreign key constraint errors due to InnoDB index length differences. We do not rely on full database dump and restore; instead we run targeted SELECT queries against the live Dolibarr database with a read-only account, extracting each object table individually. This avoids the restore step entirely and eliminates cross-distribution InnoDB compatibility issues that are a known Dolibarr issue on GitHub issue #16315.

  • Epicor Cloud (Kinetic) removes direct database access used by some Dolibarr teams

    Dolibarr administrators who are comfortable with direct MySQL/PostgreSQL queries and custom SQL reporting may face a workflow change when migrating to Epicor Kinetic Cloud. Epicor Kinetic Cloud does not provide direct SQL access; data extraction routes through BAQ (Business Activity Query) or the REST API. Teams relying on ad-hoc SQL against Dolibarr's database will need to build BAQ queries or use Epicor's report designer post-migration. We document every custom SQL report that was run against Dolibarr as a BAQ specification during migration discovery so the Epicor administrator can rebuild equivalent reports.

Migration approach

Six steps for a successful Dolibarr ERP to Epicor Prophet 21 data migration

  1. Discovery and migration scope definition

    We audit the source Dolibarr instance by querying its MySQL or PostgreSQL database directly with read-only credentials. We inventory all active modules (CRM, Invoicing, Stock, Project, HR if enabled), count records per table (llx_societe, llx_product, llx_proposal, llx_commande, llx_facture, llx_paiement, llx_projet, llx_user), check for custom fields in the extraoptions JSON, identify any Dolistore add-on tables, and assess the Dolibarr version and database engine version. We pair this with an Epicor edition and module review of the destination system to confirm which Epicor modules are licensed (Finance, Distribution, Manufacturing, Inventory, Project, HR). The discovery output is a written migration scope document with record counts, object mapping, and a migration sequencing plan.

  2. Schema design and Epicor UD field pre-creation

    We review the Dolibarr extraoptions JSON from each migrated object and design the Epicor UD field schema in the destination Epicor company. We pre-create all required UD fields on the relevant Epicor tables (Customer, Part, QuoteHed, OrderHed, InvcHead, Project) before any data migration begins, using Epicor's REST API to deploy the schema. For multi-entity Epicor configurations, we confirm the target Epicor Company ID and ensure the UD field template applies across all relevant company codes.

  3. Targeted data extraction from Dolibarr database

    We run targeted SELECT queries against each Dolibarr table using a read-only database account, exporting each object to a staging CSV file. We process the extraoptions JSON deserialization for each object with non-null extraoptions values, flattening the JSON into named columns that match the Epicor UD field names defined in schema design. We export payments (llx_paiement) and payment-to-invoice links (llx_paiement_facture) separately for post-processing. Dolibarr attachments are not exported as binary files; we export the llx_document reference manifest (file path, parent table, parent ID) for the customer's manual re-upload inventory.

  4. Epicor staging import and reconciliation

    We import all records into Epicor in dependency order using Epicor's REST API. Customer records import first (with Customer.CustNum assigned); Contact records import second with fk_soc resolved to Customer.CustNum; Part records import third; Project records import fourth. QuoteHed, OrderHed, and InvcHead import after their parent Customer and Part records are committed. Payment records (mapped to CashHead) import last. Each phase emits a row-count reconciliation report comparing source Dolibarr record count against successfully imported Epicor record count. We resolve any OwnerId (SalesRep) references by matching Dolibarr user email to Epicor User.UserName.

  5. Sandbox validation and mapping corrections

    If the destination Epicor tenant includes a Sandbox company for pre-production testing, we run a full migration cycle against the Sandbox to validate Epicor validation rules, required field constraints, picklist whitelists, and any custom business logic that may reject migrated records. We coordinate with the customer's Epicor administrator to temporarily disable blocking validation rules during the sandbox migration or to extend them with a migration-context bypass flag. Any mapping corrections identified in sandbox are applied before the production migration begins.

  6. Production migration and cutover handoff

    We run the production migration in the same phased sequence validated in sandbox, with a final delta migration to capture any records modified in Dolibarr during the migration window. After the last phase commits, we deliver the attachment manifest (file path inventory), the calendar event CSV for Epicor administrator rebuild, and the Dolibarr Workflow and automation inventory document. We do not rebuild Dolibarr Workflows, Dolistore add-on automations, or HR leave/expense configurations inside the migration scope; these are documented for the customer's Epicor administrator to configure post-migration. We support a five-business-day post-migration hypercare window to resolve any data reconciliation issues raised by the customer's team.

Platform deep dives

Context on both ends of the pair

Dolibarr ERP logo

Dolibarr ERP

Source

Strengths

  • Free core software with AGPL license and no per-user mandatory fee for self-hosted deployments.
  • Modular architecture lets teams activate only needed features, keeping the interface focused and the database lean.
  • Self-hosted option provides full data sovereignty and avoids recurring SaaS subscription costs.
  • Built-in CSV/Excel import and export wizard with saved profiles simplifies recurring data operations.
  • Low-code Module Builder allows functional extensions without writing PHP code.

Weaknesses

  • No native documented REST API for programmatic bulk operations — all migrations depend on the import/export wizard or direct database access.
  • Reporting and analytics are weak without paid add-ons, and built-in charts are limited compared to modern SaaS platforms.
  • UI design is described as dated by multiple reviewers, with infrequent visual updates to the default theme.
  • Community-only support for self-hosted deployments means no SLA or guaranteed response time for issues.
  • Security vulnerabilities (CVE-2024-5314, CVE-2024-5315) in version 9.0.1 with no immediate patch reported.
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 Dolibarr ERP 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

    Dolibarr ERP: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Dolibarr ERP 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 Dolibarr ERP to Epicor Prophet 21 data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between six and ten weeks for accounts with under 15,000 Third Parties, 8,000 Products, and 5,000 Orders with no multi-entity Epicor configuration. Migrations with over 50,000 records, active multi-entity Epicor setups, custom UD field deserialization from Dolibarr extraoptions JSON, stock movement history migration, or manufacturing module scope move to fourteen to twenty-two weeks because of Epicor's parent-child sequencing requirements, UD field schema design, and testing across multiple Epicor companies.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dolibarr ERP.
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