CRM migration
Field-level mapping, validation, and rollback between work4all and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
work4all
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between work4all and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Migrating from work4all to Odoo CRM moves data from a Windows-desktop-first German ERP-CRM with no public REST API onto a modern web-native all-in-one platform with over 5 million users. The structural difference is significant: work4all organises around a flat master-data model (Customers, Suppliers, Items) with linked ERP documents and CRM activities, while Odoo CRM uses a res.partner-based Contact and Address model, crm.lead for pipeline tracking, and stock picking objects for item management. The highest-risk phase of any work4all migration is the export itself, because work4all has no self-service API and relies on Excel templates or vendor-scripted database extracts. We resolve Light-licence export restrictions, enumerate custom fields through schema inspection of exported data, and reconcile Open Items with partial payments before loading into Odoo. Workflows, automations, and forms do not migrate; we deliver a written inventory of every automation requiring Odoo Studio or Python-module rebuild by the customer's admin team post-migration.
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 work4all object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
work4all
Customer (Debitoren)
Odoo CRM
res.partner (as Customer)
1:1work4all Customer master data maps to Odoo res.partner with partner_type set to 'contact' and customer_rank set to a positive value. The Customer's commercial figures (credit limit, payment terms) map to Odoo's internal fields on res.partner where supported. The customer's primary address becomes the partner's main address record; additional addresses map to res.partner with type='delivery' or type='invoice'. We flag any industry-extension custom fields discovered in the exported schema for manual mapping in Odoo Studio post-migration.
work4all
Supplier (Kreditoren)
Odoo CRM
res.partner (as Supplier)
1:1work4all Supplier master data maps to Odoo res.partner with supplier_rank set and partner_type left blank or set to 'supplier'. Supplier purchasing history (last purchase price, default lead times) map to equivalent fields if present in the export; otherwise we preserve as custom fields on the partner record. The same address-role splitting logic applies as with Customers.
work4all
Item (Artikel)
Odoo CRM
product.product or product.template
1:1work4all Items map to Odoo product.template with product variants handled via product.attribute and product.attribute.value if the source includes variant definitions. The item's pricing tiers map to Odoo product.pricelist.item entries on the applicable Pricelist. Stock quantity information from work4all's inventory module maps to Odoo's stock.quant records if the customer activates the Inventory app; otherwise we import the item without stock data and note the gap for the customer's inventory admin.
work4all
Sales Opportunity
Odoo CRM
crm.lead (as Opportunity)
1:1work4all Sales Opportunities map to Odoo crm.lead records with type='opportunity'. The opportunity's stage, estimated value, and linked Customer and Contact references migrate directly. work4all's opportunity-level custom fields (industry-extension fields visible in the export) map to crm.lead custom fields created in Odoo Studio before migration. Owner assignment from work4all maps to Odoo crm.lead user_id after User reconciliation in Step 5 of the approach.
work4all
Customer Contact Persons
Odoo CRM
res.partner (with contact type)
1:1work4all contact persons linked to a Customer map to Odoo res.partner records with parent_id pointing to the Customer partner record and type='contact'. Email, phone, and function/title fields migrate directly. The relationship graph between contact persons and their parent organisation is preserved by resolving the parent_id reference after the Customer partner records are created.
work4all
Invoice and ERP Documents (Offers, Invoices, Cost Receipts)
Odoo CRM
sale.order or account.move
1:manywork4all ERP document headers and line items map to Odoo sale.order (for Quotes and Offers) or account.move (for Invoices and Cost Receipts) depending on document state. Draft or offered documents map to sale.order with state='draft'; sent or confirmed documents map to sale.order with state='sent' or 'sale'; posted accounting documents map to account.move with state='posted'. Document line items map to sale.order.line or account.move.line with product, quantity, and price resolved against the imported product catalogue.
work4all
Open Items (Offene Posten)
Odoo CRM
account.move (reconciliation)
lossywork4all Open Items represent unpaid or partially paid invoices and credit memos. We export the open item with invoice reference, amount open, due date, and currency. Partial payments require the customer to confirm whether partial payment records exist and, if so, to provide payment history so we can reconstruct the correct open amount and create matching account.payment entries in Odoo. If payment history is unavailable, we flag the discrepancy and document it in the reconciliation report for the customer's accountant to resolve post-migration.
work4all
Telephone Notes and Call Logs
Odoo CRM
crm.phone.call.log (or crm.lead.note)
1:1work4all telephone notes are CRM activities linked to a Customer and Contact with a free-text summary and timestamp. They map to Odoo crm.phone.call.log records if the customer's Odoo instance has the crm_phonecall module installed, or to crm.lead chatter notes if not. Caller ID and duration are preserved as custom fields where present in the export. TAPI caller-ID data is extracted from the note text field if it appears in a structured format.
work4all
Visit Reports
Odoo CRM
note.note + crm.lead
1:1work4all visit reports are time-stamped CRM records associated with a Customer and an Owner. They may contain custom fields depending on industry extension usage. We export the report body as plain text and create an Odoo note.note record linked to the relevant res.partner (customer). If the customer uses the Odoo Field Service module, we map visit reports to field.service.task or project.task with the customer set as the partner. Custom fields from industry extensions map to custom fields on the target object.
work4all
Tasks
Odoo CRM
project.task or crm.lead
1:1work4all Tasks are standalone CRM objects with status, priority, due date, and owner assignment. Tasks linked to a Customer map to Odoo project.task (if the customer uses project tracking) or to crm.lead if the task is pipeline-adjacent. Tasks with no CRM context map to project.task in a catch-all project created for migration purposes. Status and priority enums are mapped to Odoo's equivalent picklist values during the transform phase.
work4all
Time Recordings
Odoo CRM
account.analytic.line (timesheet)
1:1work4all time entries are linked to Employees, Projects, or Tasks depending on configuration. Light-tier users have restricted time entry access only, which we identify during scoping. Time recordings map to Odoo account.analytic.line records if the Project Management or Timesheet app is active; otherwise we export as note.note records with a time_spent field for manual re-entry. We resolve the Employee reference by matching against Odoo hr.employee records created from work4all's user list.
work4all
Custom Fields
Odoo CRM
Custom fields on target objects
lossywork4all supports custom fields across CRM activities and ERP documents, particularly in industry extensions, but these are not exposed in a self-service metadata endpoint. We address this by requesting the customer to provide a field inventory of any custom fields they have created, and by performing schema inspection on the exported data to detect fields not in the standard object list. Any discovered custom fields are pre-created in Odoo as custom fields on the mapped target object before the data load phase begins.
| work4all | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer (Debitoren) | res.partner (as Customer)1:1 | Fully supported | |
| Supplier (Kreditoren) | res.partner (as Supplier)1:1 | Fully supported | |
| Item (Artikel) | product.product or product.template1:1 | Fully supported | |
| Sales Opportunity | crm.lead (as Opportunity)1:1 | Fully supported | |
| Customer Contact Persons | res.partner (with contact type)1:1 | Fully supported | |
| Invoice and ERP Documents (Offers, Invoices, Cost Receipts) | sale.order or account.move1:many | Fully supported | |
| Open Items (Offene Posten) | account.move (reconciliation)lossy | Mapping required | |
| Telephone Notes and Call Logs | crm.phone.call.log (or crm.lead.note)1:1 | Mapping required | |
| Visit Reports | note.note + crm.lead1:1 | Mapping required | |
| Tasks | project.task or crm.lead1:1 | Fully supported | |
| Time Recordings | account.analytic.line (timesheet)1:1 | Mapping required | |
| Custom Fields | Custom fields on target objectslossy | Mapping required |
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.
work4all gotchas
Light licence users cannot export all data types
No public REST API; migrations rely on Excel templates and vendor-assisted exports
Custom fields are not discoverable via a metadata endpoint
Open items require reconciliation against payment history before export
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and export method determination
We audit the source work4all instance across licence tiers (Light, Basic, Professional, Ultimate), identifying which users hold which licence and which data objects each tier can access. We confirm the export method: for Customers, Suppliers, and Items, we use work4all's built-in Excel export templates; for CRM activities (Opportunities, Telephone Notes, Visit Reports, Tasks) and ERP documents (Invoices, Offers, Cost Receipts, Open Items), we request a vendor-scripted database export or coordinate with the work4all support team for a structured data dump. We ask the customer to provide a field inventory for any custom fields used in industry extensions. The discovery output is a written migration scope with confirmed export method, licence-tier data-access map, and a list of any custom fields requiring Odoo custom-field creation.
Odoo environment provisioning and schema design
We provision an Odoo environment (Odoo.sh staging or self-hosted) and design the destination schema. This includes creating product.product and product.template records with variants, configuring account.account charts and fiscal position for the customer's country (Germany, Austria, or Switzerland), setting up crm.lead pipeline stages mapped from work4all opportunity stages, and creating any custom fields required for work4all custom field equivalents. We configure res.partner address roles (contact, invoice, delivery) and set partner_rank for Customer and Supplier classification. The schema design is validated against the exported data sample before bulk import begins.
Master data export and load (Customers, Suppliers, Items)
We execute the master-data export from work4all using Excel templates for Customers, Suppliers, and Items. Each export is validated for column completeness, duplicate records (deduped by email for contacts and by name+address for organisations), and missing required fields. We load into Odoo in dependency order: Items first (for product reference resolution), then Customers and Suppliers (with parent_id resolved for contact persons after the organisational partner record exists). External IDs are assigned to each imported record for relationship resolution in subsequent phases.
ERP document export and Open Item reconciliation
We export work4all ERP documents (Offers, Invoices, Cost Receipts) as structured header-line datasets and map them to Odoo sale.order or account.move records depending on document state and posting status. Open Items are exported separately and reconciled against the invoice history to determine the correct outstanding balance. If partial payments exist and payment records are available, we create account.payment entries to clear the open items. If payment records are not available, we load the open item at its current outstanding balance and document the discrepancy for the customer's accountant. Vendor-assisted export is coordinated at this stage for any ERP document types not accessible via the standard Excel template.
CRM activity export and Owner reconciliation
We export CRM activities (Sales Opportunities, Telephone Notes, Visit Reports, Tasks) from work4all and map them to Odoo crm.lead, crm.phone.call.log (or note.note), and project.task. Owner reconciliation matches work4all users by email to Odoo res.users records. Any work4all Owner without a matching Odoo User goes to a reconciliation queue for the customer's admin to provision. Migration cannot proceed past this step for owner-dependent records. Time recordings from Light-licence-restricted accounts are flagged if admin-assisted export was not arranged, and a note is added to the migration report for the customer to complete manually if needed.
Sandbox migration, validation, and cutover handoff
We run a full migration into an Odoo staging database using production-like data volume. The customer's admin reconciles record counts (Customers in, Suppliers in, Items in, Open Items in, Opportunities in, Activities in), spot-checks twenty to fifty random records against the work4all source, and signs off the schema and mapping before production migration begins. We freeze work4all writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver a written inventory of every work4all automation, workflow, and form requiring Odoo Studio rebuild by the customer's admin team. We do not rebuild work4all automations as Odoo Studio workflows inside the migration scope; that is a separate engagement.
Platform deep dives
work4all
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM 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 work4all and Odoo CRM.
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
work4all: Not publicly documented.
Data volume sensitivity
work4all 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 work4all to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your work4all to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave work4all
Other ways to arrive at Odoo CRM
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.