ERP migration
Field-level mapping, validation, and rollback between PeppyBooks and Dolibarr ERP. We move data and schema; workflows are rebuilt natively in Dolibarr ERP.
PeppyBooks
Source
Dolibarr ERP
Destination
Compatibility
12 of 14
objects map 1:1 between PeppyBooks and Dolibarr ERP.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from PeppyBooks to Dolibarr is a migration from a US-centric cloud ERP with tier-gated modules to an open-source, self-hosted ERP with a modular architecture. PeppyBooks organizes data across accounting and CRM layers with a customizable Chart of Accounts, while Dolibarr uses a module activation model where you enable only the features you need. The primary technical challenge is that PeppyBooks does not publish a public API with documented authentication or rate limits, which means we request CSV exports or negotiate direct database access. We then map PeppyBooks tax codes (US sales tax, Malaysian SST) to Dolibarr's tax system, which supports VAT, GST, and custom tax rules but requires manual configuration per tax authority. Dolibarr's third-party model consolidates what PeppyBooks separates into Clients and Vendors into a single llx_societe table with a Prospect/Customer/Supplier type flag, so we apply a type split during transform. Inventory (Products, SKUs, Warehouses), Purchase Orders, and Sales Orders map to Dolibarr's products and orders modules, which are activated separately in the Dolibarr module configuration. We do not migrate PeppyBooks Workflows, automations, or report configurations; we deliver a written inventory of these for the customer's admin to rebuild in Dolibarr.
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 PeppyBooks 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.
PeppyBooks
Chart of Accounts
Dolibarr ERP
Accounting Account (llx_accounting_account)
1:1PeppyBooks maintains a hierarchical COA with account codes, types (Asset, Liability, Equity, Revenue, Expense), and tax-mapping attributes. We export the full COA as a structured list and create matching accounts in Dolibarr's llx_accounting_account table. Account code lengths, naming conventions, and parent-child hierarchies vary by PeppyBooks customer, so we either merge source accounts into existing Dolibarr default accounts or create new ones. The source account name is preserved as the account label to assist accountants during reconciliation. This migration runs first so that account codes are available for all downstream transaction mapping.
PeppyBooks
Clients
Dolibarr ERP
Third Party - Customer (llx_societe, Tiers type = Customer)
1:1PeppyBooks Clients with contact details, billing address, payment terms, and opening balance map to Dolibarr llx_societe records with the Tiers type flag set to Customer. PeppyBooks opening balance migrates as an opening balance entry in Dolibarr's accounting journal. Client-specific custom fields migrate to llx_societe_extrafields. PeppyBooks allows multiple contacts per Client; Dolibarr stores contacts separately in llx_socpeople and links via fk_soc, so we create one primary contact and flag additional contacts for manual linking post-migration.
PeppyBooks
Vendors
Dolibarr ERP
Third Party - Supplier (llx_societe, Tiers type = Supplier)
1:1PeppyBooks Vendors mirror the Client structure with address, payment terms, and opening balance. They map to Dolibarr llx_societe with Tiers type = Supplier. Outstanding AP balances migrate as opening balance entries in the accounting journal linked to the appropriate vendor account. PeppyBooks Vendors and Clients are separate entity types; in Dolibarr they share the llx_societe table with a type distinction, so we split the PeppyBooks export by type flag during the transform step before loading.
PeppyBooks
Invoices (Customer)
Dolibarr ERP
Invoice (llx_facture)
1:1PeppyBooks invoices linked to Clients, line items, tax codes, and COA revenue accounts map to Dolibarr llx_facture (type = Invoice). We export invoice status (Draft, Sent, Paid, Overdue), due dates, payment records, and multi-currency amounts with their original exchange-rate context. PeppyBooks tax codes (US sales tax rates, SST codes) map to Dolibarr tax rules configured per tax authority before invoice import. Invoice PDFs migrate as Dolibarr document attachments linked to llx_facture.
PeppyBooks
Expenses
Dolibarr ERP
Supplier Invoice (llx_facture, type = Invoice_Fournisseur)
1:1PeppyBooks expense records capture date, vendor, amount, COA debit account, and tax treatment. They map to Dolibarr llx_facture with type = Invoice_Fournisseur (Supplier Invoice). Each expense line item is linked to the PeppyBooks vendor now mapped as a Dolibarr supplier. Tax code mapping from PeppyBooks to Dolibarr tax rules is applied before expense import to ensure correct VAT or sales tax posting.
PeppyBooks
Manual Journals
Dolibarr ERP
Banking / Financial Account (llx_bank) or Journal Entry
1:1PeppyBooks manual journal entries support multi-line debits and credits with optional references to invoices or expenses. We export the full journal entry including all line items and map them to Dolibarr llx_bank (for bank account movements) or llx_accountrprow (accounting ledger rows) depending on whether the journal entry represents a bank transaction or a pure ledger posting. PeppyBooks journal entry naming conventions are preserved as labels to aid reconciliation.
PeppyBooks
Products
Dolibarr ERP
Product or Service (llx_product)
1:1PeppyBooks Product master records include name, SKU (hs_sku equivalent), unit price, cost, tax category, and stock-on-hand (Premium and above). They map to Dolibarr llx_product with type = Product (for inventory) or Service. PeppyBooks tax category maps to a Dolibarr product tax group. Stock-on-hand migrates with the product record; warehouse assignments (Premium tier) map to Dolibarr warehouse stock entries in llx_product_stock per warehouse location.
PeppyBooks
Warehouses (Premium tier)
Dolibarr ERP
Warehouse (llx_entrepot)
1:1PeppyBooks multi-store warehousing is available on Premium and above. Warehouse location records map to Dolibarr llx_entrepot. Stock levels per product per warehouse migrate to llx_product_stock entries linked to the corresponding warehouse. If PeppyBooks tracks batch numbers, these map to Dolibarr's lot tracking module if activated; otherwise batch data is preserved as a product custom field.
PeppyBooks
Purchase Orders (Premium tier)
Dolibarr ERP
Purchase Order (llx_commande_fournisseur)
1:1PeppyBooks Purchase Orders (headers and line items) at Premium tier map to Dolibarr llx_commande_fournisseur. PO workflow states (Open, Closed, Partial) map to Dolibarr status values (Draft, Validated, Approved, Ordered, Received). Line items link to the mapped Supplier third party and Product records. PeppyBooks PO-to-invoice conversion logic does not map directly to Dolibarr's purchasing workflow; we flag any partially-received POs for manual resolution by the purchasing team.
PeppyBooks
Sales Orders
Dolibarr ERP
Customer Order (llx_commande)
1:1PeppyBooks Sales Orders with headers, line items, and fulfillment status map to Dolibarr llx_commande. Order-to-invoice conversion logic varies; PeppyBooks allows direct invoice creation from orders, which maps to Dolibarr's order-to-invoice action. Order status (Draft, Sent, Fulfilled, Cancelled) maps to Dolibarr status values. PeppyBooks custom order fields migrate to llx_commandedet_extrafields.
PeppyBooks
Leads
Dolibarr ERP
Lead (llx_societe prospects)
1:manyPeppyBooks CRM Leads with source, status, owner, and custom fields map to Dolibarr's llx_societe with Tiers type = Prospect. PeppyBooks lifecycle statuses (New, Contacted, Qualified, Lost) map to Dolibarr ProspectStatus values. PeppyBooks allows multiple contacts per Lead; Dolibarr stores contacts separately, so we create a primary contact and flag additional contacts. PeppyBooks Lead scores and custom fields migrate to llx_societe_extrafields.
PeppyBooks
Deals / Pipeline Stages
Dolibarr ERP
Opportunities (llx_projet with Opportunity flag) or Commercial Proposals
lossyPeppyBooks Deals carry value, stage, expected close date, and associated contact/company. Dolibarr does not have a native CRM Opportunity object in all versions; we map Deals to llx_projet records with the Opportunity flag (Projet type = Opportunity) if the Project module is activated with the Opportunity feature, or to Dolibarr Commercial Proposals (llx_propal) for sales pipeline tracking. PeppyBooks pipeline stage names are fully customizable and map to Dolibarr project status or proposal status values configured during schema setup.
PeppyBooks
Activities (calls, emails, notes, tasks)
Dolibarr ERP
Interventions / Notes / Tasks (llx_actioncomm, llx_note, llx_task)
1:1PeppyBooks Activity records capture calls, emails, notes, and tasks linked to contacts or deals. They map to Dolibarr llx_actioncomm (for calendar events and calls), llx_note (for text notes), and llx_task (for task records). Activity type taxonomy differs; we classify PeppyBooks call records as Dolibarr Interventions (llx_fichinter), emails as Notes with an email flag, and tasks as llx_task. Historical timestamps are preserved as ActivityDate on the Dolibarr record. PeppyBooks CRM attachment links migrate as Dolibarr document attachments.
PeppyBooks
Projects (Professional plan)
Dolibarr ERP
Project (llx_projet)
1:1PeppyBooks Projects, Milestones, and Tasks are available on the Professional plan tier. They map to Dolibarr llx_projet with the Project type (not Opportunity). Milestones map to Dolibarr Task parent records, and PeppyBooks Tasks map to Dolibarr child Task records. PeppyBooks Resource Allocation and Time Spent tracking fields migrate to Dolibarr llx_projet_task_time if the TimeSpent module is activated; otherwise they are preserved in project custom fields for manual time entry.
| PeppyBooks | Dolibarr ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | Accounting Account (llx_accounting_account)1:1 | Fully supported | |
| Clients | Third Party - Customer (llx_societe, Tiers type = Customer)1:1 | Fully supported | |
| Vendors | Third Party - Supplier (llx_societe, Tiers type = Supplier)1:1 | Fully supported | |
| Invoices (Customer) | Invoice (llx_facture)1:1 | Fully supported | |
| Expenses | Supplier Invoice (llx_facture, type = Invoice_Fournisseur)1:1 | Fully supported | |
| Manual Journals | Banking / Financial Account (llx_bank) or Journal Entry1:1 | Mapping required | |
| Products | Product or Service (llx_product)1:1 | Fully supported | |
| Warehouses (Premium tier) | Warehouse (llx_entrepot)1:1 | Fully supported | |
| Purchase Orders (Premium tier) | Purchase Order (llx_commande_fournisseur)1:1 | Fully supported | |
| Sales Orders | Customer Order (llx_commande)1:1 | Mapping required | |
| Leads | Lead (llx_societe prospects)1:many | Mapping required | |
| Deals / Pipeline Stages | Opportunities (llx_projet with Opportunity flag) or Commercial Proposalslossy | Mapping required | |
| Activities (calls, emails, notes, tasks) | Interventions / Notes / Tasks (llx_actioncomm, llx_note, llx_task)1:1 | Fully supported | |
| Projects (Professional plan) | Project (llx_projet)1: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.
PeppyBooks gotchas
No published public API with documented auth or rate limits
Tier-gated features create schema gaps in migrated data
Malaysia SST and multi-regime tax handling complicates transaction migration
Chart of Accounts is customizable and may not align with destination defaults
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 tier audit
We audit the source PeppyBooks account across tier (Growth/Premium/Ultimate/Professional), enabled modules, custom Chart of Accounts structure, third-party record count (Clients and Vendors), transaction volume (invoices, expenses, journal entries), inventory records (Products, SKUs, Warehouses), and open purchase and sales orders. We also identify any PeppyBooks tier-gated data that requires an upgrade before export. On the destination side, we confirm the Dolibarr installation version, active modules, and hosting environment (self-hosted VPS, managed LAMP, or Dolibarr Cloud). The discovery output is a written migration scope, an export checklist per PeppyBooks tier, and a Dolibarr module activation checklist for the customer's admin.
Export request and data extraction
We request CSV exports from PeppyBooks for each object identified in scoping. Where CSV export is not available for tier-gated objects (inventory on Growth tier, projects on Growth tier), we coordinate with the customer to either upgrade PeppyBooks temporarily for export or provide direct database credentials if the customer has self-hosted PeppyBooks or database access. We extract the Chart of Accounts first as a structured list, followed by third-party records (Clients and Vendors), then transaction records (invoices and expenses), then inventory and orders. Each export is validated against a row-count reconciliation report before transformation begins.
Schema design and tax authority configuration
We design the destination Dolibarr schema by mapping the PeppyBooks COA to Dolibarr llx_accounting_account, configuring the PeppyBooks tax codes as Dolibarr tax rules, and setting up the Dolibarr third-party type flags (Customer, Supplier, Prospect) based on the PeppyBooks entity split. We pre-create any missing Dolibarr modules not yet activated by the customer's admin, including Products, Purchases, Projects, and Interventions. The customer configures US sales tax rates or SST tax authorities in Dolibarr's Tax Categories before transaction import; we document the tax rule mapping as a configuration guide with each PeppyBooks tax code as a stub entry.
Data transformation and import sequencing
We run data transformation in dependency order: COA accounts first (so account codes are available for transaction mapping), then third parties (Clients and Vendors split by type flag), then Products and Warehouses (for inventory), then open purchase orders and sales orders, then invoices and expenses (with tax code stubs resolved to Dolibarr tax rule IDs), then activity records. PeppyBooks multi-currency amounts are preserved with their original exchange-rate context in custom fields until the customer configures the Dolibarr multi-currency module and exchange rate table. We load data through Dolibarr's native CSV import wizard for standard objects and through direct database insert for custom fields and lookup resolutions that the import wizard cannot handle.
Sandbox validation and reconciliation
We run a full migration into a Dolibarr test environment (a separate database or a staged copy of the destination installation) before production import. The customer reconciles record counts (Accounts, Third Parties, Products, Invoices, Expenses, Orders), spot-checks 25-50 random records against the PeppyBooks source, and validates that PeppyBooks tax codes resolved to the correct Dolibarr tax postings. Any mapping corrections, tax rule gaps, or module activation issues are resolved in the test environment before production migration begins.
Production cutover and automation inventory handoff
We freeze PeppyBooks writes during the cutover window, run a final delta migration of any records modified since the test migration, then point the customer's team to Dolibarr as the system of record. We deliver a written inventory of PeppyBooks Workflows, automations, and report configurations that do not migrate to Dolibarr, with a per-item description of the original behavior and a recommended Dolibarr equivalent (Dolibarr's workflow module or manual process guidance). We do not rebuild PeppyBooks automations as Dolibarr workflows inside the migration scope; that is a separate engagement or an internal admin task. We support a one-week post-cutover window for reconciliation issues.
Platform deep dives
PeppyBooks
Source
Strengths
Weaknesses
Dolibarr ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across PeppyBooks and Dolibarr ERP.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
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
PeppyBooks: Not publicly documented.
Data volume sensitivity
PeppyBooks 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 PeppyBooks to Dolibarr ERP migration scoping. Not seeing yours? Book a call.
Walk through your PeppyBooks 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 PeppyBooks
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.