ERP migration
Field-level mapping, validation, and rollback between NetSuite and Dolibarr ERP. We move data and schema; workflows are rebuilt natively in Dolibarr ERP.
NetSuite
Source
Dolibarr ERP
Destination
Compatibility
10 of 16
objects map 1:1 between NetSuite and Dolibarr ERP.
Complexity
BStandard
Timeline
6-8 weeks
Overview
Moving from NetSuite to Dolibarr is a structural simplification. NetSuite's subsidiary-aware multi-entity architecture, where one database represents multiple legal entities with intercompany eliminations, has no native equivalent in Dolibarr. Each NetSuite subsidiary must map either to a separate Dolibarr installation (for full isolation) or to a distinct Dolibarr accounting entity configured with separate chart of accounts prefixes. We extract NetSuite's full transactional schema through SuiteQL, including custom fields (custbody_*, custrecord_*, custentity_*), resolve subsidiary-to-company mapping during discovery, and load data in dependency order: chart of accounts first, then entities (customers and vendors), then products and inventory, then open AR/AP balances, then historical journal entries with original posting dates. NetSuite SuiteFlow workflows, SuiteScript customizations, and OneWorld intercompany elimination rules do not migrate; we deliver a written inventory of these for the customer's administrator to evaluate against Dolibarr's modular feature set. Dolibarr's open-source PHP architecture means the customer can self-host, reducing or eliminating ongoing SaaS licensing costs that drive NetSuite renewal uplift complaints.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a NetSuite object lands in Dolibarr ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
NetSuite
Chart of Accounts
Dolibarr ERP
Accounting Module (Plan de Compte)
1:1NetSuite Accounts map to Dolibarr accounting accounts using account type codes (0=Bank, 1=AR, 2=Inventory, 5=Fixed Assets, 10=AP, 21=Income, 23=COGS, 24=Expense). We preserve account numbers and names, and configure Dolibarr's accounting controller type (terme, tier, produit, TVA) per account. For multi-subsidiary NetSuite environments, each subsidiary's chart of accounts maps to a separate Dolibarr accounting entity or installation with distinct account prefix ranges to prevent cross-entity posting collisions.
NetSuite
Customer (Entity)
Dolibarr ERP
Third Party (Contact: Customer)
1:1NetSuite Customer records map to Dolibarr Third Parties with the contact type set to Customer. Address records (billaddr, shipaddr) migrate to Dolibarr address records with type tags. NetSuite's custentity_* custom fields on Customer records map to Dolibarr extrafields on the llx_societe table. We preserve customer-specific pricing tiers as Dolibarr price levels attached to the Third Party record.
NetSuite
Vendor (Entity)
Dolibarr ERP
Third Party (Contact: Supplier)
1:1NetSuite Vendor records map to Dolibarr Third Parties with the contact type set to Supplier. Tax registration fields (VAT number, employer identification) migrate to Dolibarr's third-party fiscal ID fields. NetSuite vendor-specific payment terms attached to the vendor record become Dolibarr payment term conditions on the Third Party.
NetSuite
Item (Inventory Assembly, Non-Inventory, Service)
Dolibarr ERP
Product (Simple, Stockable, Service)
1:1NetSuite Items (inventory assembly, non-inventory, service, description-only types) map to Dolibarr Product records. Inventory assembly items with BOM relationships map to Dolibarr multi-level BOMs within the product sheet. NetSuite lot/serial tracking migrates to Dolibarr lot/serial numbers attached to stock movements. NetSuite pricing matrices (volume pricing, currency pricing) map to Dolibarr price lists attached to Product records.
NetSuite
Sales Order
Dolibarr ERP
Customer Order (Commande Client)
1:1Open NetSuite Sales Orders migrate to Dolibarr Customer Orders. The order status (Pending Fulfillment, Pending Billing, Closed) maps to Dolibarr status codes (Draft, Validated, Shipped, Billed, Canceled). Line items migrate with quantities, unit prices, VAT rates, and discount percentages. Fulfilled lines without invoicing map to Dolibarr shipping records linked to the order.
NetSuite
Invoice (AR)
Dolibarr ERP
Customer Invoice (Facture Client)
1:1NetSuite Invoice records map to Dolibarr Customer Invoices. For open invoices, we migrate the full invoice detail including line items, tax lines, payment terms, and due dates. For paid historical invoices, we migrate summary records with payment status closed and original posting date. NetSuite invoice numbers become Dolibarr ref_customer for cross-reference. Custom fields on invoices (custbody_*) migrate to Dolibarr extrafields on the llx_facture table.
NetSuite
Bill (AP)
Dolibarr ERP
Supplier Invoice (Facture Fournisseur)
1:1NetSuite Vendor Bills map to Dolibarr Supplier Invoices. Open bills migrate with full line detail, expense categories, and due dates. Historical paid bills migrate as closed records with payment reference. NetSuite's terms (Net 30, Net 60) map to Dolibarr payment term conditions attached to the supplier third party. Discount fields (custbody_discount_percent) migrate to Dolibarr discount lines on the supplier invoice.
NetSuite
Open AR
Dolibarr ERP
Outstanding Customer Invoices
lossyNetSuite open AR (outstanding receivables) migrates as open Dolibarr Customer Invoices with status set to Unpaid. Aging buckets, due dates, and payment terms are preserved. NetSuite payment holds and credit holds on customer accounts migrate to Dolibarr bloquecredit and bloqueed fields on the Third Party record. We do not recreate closed AR as historical transactions; open AR is the carryforward scope.
NetSuite
Open AP
Dolibarr ERP
Outstanding Supplier Invoices
lossyNetSuite open AP (outstanding payables) migrates as open Dolibarr Supplier Invoices with status set to Unpaid. Due dates, aging buckets, and vendor payment terms are preserved. NetSuite vendor holds map to Dolibarr Third Party status flags. Open AP is carried forward as open balances rather than recreated as historical rows, matching how NetSuite structures the AP aging report.
NetSuite
Journal Entry
Dolibarr ERP
Accounting Entries (Ecritures Comptables)
1:1NetSuite Journal Entries migrate to Dolibarr accounting entries with original posting dates and exchange rates preserved. Intercompany elimination entries (NetSuite subsidiary-to-subsidiary postings) are flagged for the customer's administrator to handle in Dolibarr because Dolibarr has no native intercompany elimination engine. Some organizations elect to carry forward open period balances only as fresh journal entries rather than replaying historical rows; we present both options during discovery and capture the choice in the migration contract before sequencing data.
NetSuite
Project (PSA)
Dolibarr ERP
Project (Projet)
1:1NetSuite Projects (including PSA billing records, milestones, and resource allocations) map to Dolibarr Projects. Project status migrates (in progress, completed, on hold). Time entries attached to NetSuite Projects migrate to Dolibarr Project time tracking entries. Milestones migrate as Dolibarr Project task milestones. Project financials (billable hours, expenses) migrate to Dolibarr Project invoicing lines. Non-billable project costs and internal allocations are noted as requiring manual review post-migration.
NetSuite
Employee
Dolibarr ERP
User (HR Module) or Third Party
lossyNetSuite Employee records map to Dolibarr User records if the HR module is enabled, or to Dolibarr Third Parties with a note if HR is not in scope. Compensation history, PTO balances, and benefits enrollment (effective-dated rows) require careful sequencing because NetSuite stores them as separate sublist rows that Dolibarr HR flattens into a single employee record. We migrate current employment status, department, and job title; historical compensation rows are migrated as notes on the Employee unless the customer specifies carryforward only.
NetSuite
Custom Record Type
Dolibarr ERP
Dolibarr extrafields or separate module
lossyNetSuite Custom Records (custrecord_* script IDs) have no direct Dolibarr equivalent. We assess each custom record type during discovery: records with a 1:1 relationship to a standard object (e.g., custom compliance data attached to a customer) migrate as extrafields on the corresponding Dolibarr table (llx_societe). Records that function as independent objects with their own sublists and relationships require a separate Dolibarr module or external table that we document in the schema design phase.
NetSuite
Tax Codes and Jurisdictions
Dolibarr ERP
VAT/TAX Configuration
lossyNetSuite tax codes (nexus, rates, filing jurisdictions) map to Dolibarr's TVA (VAT) and local tax configuration. Nexus assignments require manual review because Dolibarr manages tax applicability at the third-party or product level rather than as a separate nexus registry. We preserve the full NetSuite tax code registry as a reference document for the customer's administrator to reconfigure in Dolibarr's tax management module.
NetSuite
Subsidiary
Dolibarr ERP
Separate Dolibarr Installation or Accounting Entity
1:manyNetSuite's subsidiary model has no native Dolibarr equivalent. Each NetSuite subsidiary must map to either a separate Dolibarr installation (for full legal entity isolation with independent databases) or a distinct Dolibarr accounting entity with separate account prefix ranges and dedicated chart of accounts. Intercompany transactions between subsidiaries require manual reconfiguration in Dolibarr because there is no automatic elimination engine. We build the subsidiary-to-company map during discovery, validate account prefix assignments, and document which subsidiaries will require separate installations versus shared-instance configuration.
NetSuite
File Cabinet (Document attachments)
Dolibarr ERP
Dolibarr Document Management
1:1NetSuite File Cabinet documents attached to records migrate as Dolibarr attachments linked to the corresponding record (Invoice, Order, Third Party, Product). File metadata (name, size, upload date) migrates; large file transfers are chunked and retried under rate limit constraints. Dolibarr's /documents/ directory structure replicates the NetSuite file cabinet hierarchy where accessible via REST.
| NetSuite | Dolibarr ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | Accounting Module (Plan de Compte)1:1 | Fully supported | |
| Customer (Entity) | Third Party (Contact: Customer)1:1 | Fully supported | |
| Vendor (Entity) | Third Party (Contact: Supplier)1:1 | Fully supported | |
| Item (Inventory Assembly, Non-Inventory, Service) | Product (Simple, Stockable, Service)1:1 | Fully supported | |
| Sales Order | Customer Order (Commande Client)1:1 | Fully supported | |
| Invoice (AR) | Customer Invoice (Facture Client)1:1 | Fully supported | |
| Bill (AP) | Supplier Invoice (Facture Fournisseur)1:1 | Fully supported | |
| Open AR | Outstanding Customer Invoiceslossy | Fully supported | |
| Open AP | Outstanding Supplier Invoiceslossy | Fully supported | |
| Journal Entry | Accounting Entries (Ecritures Comptables)1:1 | Fully supported | |
| Project (PSA) | Project (Projet)1:1 | Fully supported | |
| Employee | User (HR Module) or Third Partylossy | Fully supported | |
| Custom Record Type | Dolibarr extrafields or separate modulelossy | Fully supported | |
| Tax Codes and Jurisdictions | VAT/TAX Configurationlossy | Fully supported | |
| Subsidiary | Separate Dolibarr Installation or Accounting Entity1:many | Fully supported | |
| File Cabinet (Document attachments) | Dolibarr Document Management1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
NetSuite gotchas
API concurrency limits gate extraction throughput
Subsidiary-to-company mapping is structural, not cosmetic
Service tier transaction-line limits block migration mid-flight
Custom records and custom fields have no standard schema
Historical journal entries require strict sequencing
Dolibarr ERP gotchas
Foreign key constraint errors on cross-distribution database restore
SQL injection vulnerabilities in version 9.0.1
Custom fields stored as JSON in extraoptions require field-by-field deserialization
Decimal precision and rounding configuration affects price fields
No native iOS/Android app forces reliance on browser
Pair-specific challenges
Migration approach
Discovery and subsidiary mapping design
We audit the NetSuite account across subsidiaries, custom record types, custom field registries (via SuiteQL metadata pass), transaction volume by type, open AR/AP aging, inventory lot/serial counts, and journal entry date ranges. We pair this with a Dolibarr installation assessment: self-hosted (dedicated server, VPS) or DoliCloud, PHP version, MySQL/MariaDB version, and which Dolibarr modules are activated. The discovery output is a written migration scope that includes the subsidiary-to-company map, extrafields list, and a decision on whether to replay historical journal entries or carry forward open-period balances only.
Dolibarr schema preparation
We configure Dolibarr before any data arrives: activate required modules (Third Parties, Products, Commercial, Stock, Invoicing, Accounting, Projects, HR if in scope), create the accounting chart of accounts, define accounting entities or plan for separate installations per subsidiary, and create all extrafields discovered from the NetSuite metadata pass. We configure Dolibarr's accounting fiscal year to match or align with the migration cutover date. Schema preparation is validated against the NetSuite data model before extraction begins.
Sandbox migration and reconciliation
We run a full migration into a Dolibarr sandbox (a separate installation or a cloned database) using production-equivalent data volume. The customer's finance lead reconciles account balances (NetSuite Trial Balance vs Dolibarr accounting report), spot-checks 25-50 random records (customer addresses, invoice totals, inventory quantities) against the NetSuite source, and signs off the schema and mapping before production migration begins. Any mapping corrections happen here, not in production. Sandbox reconciliation is the gate before we commit to a production cutover date.
Data extraction with concurrency management
We extract NetSuite data through the REST/SOAP SuiteTalk API with date-bounded batches and exponential backoff under concurrency limits. Extraction order is driven by dependency: chart of accounts first (account numbers required for journal lines), then entity master data (customers and vendors), then product and inventory data, then open AR/AP, then historical transactions. Custom fields are extracted in parallel with their parent objects. We monitor the running six-month transaction line average against the account's service tier ceiling and pace extraction to avoid triggering a forced tier upgrade.
Production migration in dependency order
We run production migration in record-dependency order: accounting chart (first), third parties (customers and vendors with address and contact records), products with BOMs and lot/serial data, open AR/AP invoices, historical journal entries with original posting dates, projects and time entries, and employees. Each phase emits a row-count reconciliation report before the next phase begins. We freeze NetSuite write access during the cutover window and run a final delta migration of any records modified during the migration window before closing the NetSuite instance.
Cutover, validation, and workflow handoff
We disable write access to NetSuite, run a final delta extraction, load the delta into Dolibarr, and close the migration. We deliver a reconciliation report comparing NetSuite closing balances to Dolibarr opening balances across AR, AP, inventory on-hand, and the trial balance. We deliver a written inventory of NetSuite SuiteFlow workflows, saved searches, and SuiteScript customizations that require manual evaluation in Dolibarr's context. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild NetSuite workflows in Dolibarr as standard scope; that is a separate engagement because Dolibarr has no native visual workflow engine.
Platform deep dives
NetSuite
Source
Strengths
Weaknesses
Dolibarr ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. All 8 core objects map 1:1 between NetSuite and Dolibarr ERP.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across NetSuite and Dolibarr ERP.
Object compatibility
All 8 core objects map 1:1 between NetSuite and Dolibarr ERP.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
NetSuite: 15 concurrent requests (default); up to 55 on Tier 5 with SuiteCloud Plus; 1,000 records per request; 60-second and 24-hour frequency windows per account.
Data volume sensitivity
NetSuite doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during NetSuite to Dolibarr ERP migration scoping. Not seeing yours? Book a call.
Walk through your NetSuite to Dolibarr ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave NetSuite
Other ways to arrive at Dolibarr ERP
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.