CRM migration

Migrate from work4all to Odoo CRM

Field-level mapping, validation, and rollback between work4all and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

work4all logo

work4all

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between work4all and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

work4all logo

work4all

What's pushing teams away

  • Organisations scaling beyond 250 users or with complex multi-entity structures find the platform's architecture constraining and look toward enterprise-grade ERP systems like SAP or Microsoft Dynamics.
  • Teams that require extensive API-driven integrations or custom automation find work4all's limited public API documentation a blocker for modern CI/CD and data pipeline workflows.
  • Businesses seeking a modern web-first or mobile-native experience report friction with the Windows-desktop-first interface, which lacks the UX polish of newer SaaS alternatives.
  • Some customers cite difficulty achieving full GDPR compliance tooling within the platform, particularly around automated data retention policies and audit trails for deleted records.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How work4all objects map to Odoo CRM

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)

maps to

Odoo CRM

res.partner (as Customer)

1:1
Fully supported

work4all 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)

maps to

Odoo CRM

res.partner (as Supplier)

1:1
Fully supported

work4all 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)

maps to

Odoo CRM

product.product or product.template

1:1
Fully supported

work4all 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

maps to

Odoo CRM

crm.lead (as Opportunity)

1:1
Fully supported

work4all 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

maps to

Odoo CRM

res.partner (with contact type)

1:1
Fully supported

work4all 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)

maps to

Odoo CRM

sale.order or account.move

1:many
Fully supported

work4all 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)

maps to

Odoo CRM

account.move (reconciliation)

lossy
Mapping required

work4all 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

maps to

Odoo CRM

crm.phone.call.log (or crm.lead.note)

1:1
Mapping required

work4all 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

maps to

Odoo CRM

note.note + crm.lead

1:1
Mapping required

work4all 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

maps to

Odoo CRM

project.task or crm.lead

1:1
Fully supported

work4all 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

maps to

Odoo CRM

account.analytic.line (timesheet)

1:1
Mapping required

work4all 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

maps to

Odoo CRM

Custom fields on target objects

lossy
Mapping required

work4all 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.

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.

work4all logo

work4all gotchas

High

Light licence users cannot export all data types

High

No public REST API; migrations rely on Excel templates and vendor-assisted exports

Medium

Custom fields are not discoverable via a metadata endpoint

Medium

Open items require reconciliation against payment history before export

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • work4all has no public API; export relies on vendor coordination

    work4all does not publish a public API reference. Data export is handled through built-in Excel import templates for Customers, Suppliers, and Items, and through custom vendor-scripted exports for other objects. We work around this by requesting the vendor to run a database-level export or by iterating the Excel import templates in reverse where the platform allows. This adds three to five business days to migration scoping compared to platforms with open APIs, and any custom fields not visible in the standard Excel template require a separate vendor engagement to extract. We flag this timeline impact in the project schedule before any scoping meeting begins.

  • Light-licence users cannot export all data types

    The work4all Light licence tier is designed for field technicians who only need to track time or view delivery notes. It restricts access to full CRM activities and ERP document detail. When scoping a migration from work4all, we identify every user with a Light licence and confirm which data objects their accounts can actually reach. If a technician's time entries are locked under a restricted account, we request an upgrade or admin-assisted export to avoid silent data loss in the technician activity history. This step can require the customer's work4all admin to engage the vendor directly, which we coordinate.

  • Open Items require partial-payment reconciliation before export

    work4all Open Items (offene Posten) track outstanding invoices and credit memos but do not automatically include payment history. If a customer has partial payments, the open amount must be calculated from the original invoice amount minus any recorded payments. We request the customer to confirm whether partial payments exist and, if so, we ask the vendor to include payment records in the export or we reconstruct open amounts from invoice and payment data separately. If payment history is not available, we document the discrepancy and load the current outstanding balance only, flagging the gap for the customer's accountant to reconcile post-migration.

  • Custom fields are not discoverable via a metadata endpoint

    work4all supports custom fields for CRM activities and ERP documents, particularly in industry extensions, but these are not enumerated in a self-service interface or API. We address this by asking the customer to provide a screenshot or field inventory of any custom fields they have created. If the customer cannot enumerate them, we perform schema inspection of the exported data to detect fields that are not in the standard object list. This discovery step adds one to two days to scoping. Any discovered custom fields must be pre-created in Odoo as custom fields on the mapped target object before the data load phase begins.

  • Odoo's Lead-Contact model requires owner and partner reconciliation

    Odoo CRM splits prospects into crm.lead (type='lead') and contacts into res.partner with associated crm.lead (type='opportunity'). work4all has a single Customer object with contact persons as related records. We map work4all Customers to Odoo res.partner (customer role) and contact persons to res.partner with parent_id set to the Customer partner. Unqualified prospects (if tracked in work4all as separate records) require a decision from the customer on whether to import as Odoo Leads or as Contacts with the CRM pipeline role. We document this decision in scoping and apply it consistently across all records.

Migration approach

Six steps for a successful work4all to Odoo CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

work4all logo

work4all

Source

Strengths

  • Combines CRM and ERP in a single platform with shared master data, eliminating duplicate entry between sales and accounting workflows.
  • Supports both cloud-hosted and on-premise server deployment, giving customers control over where their data resides.
  • Industry-neutral base platform with optional industry extensions, allowing targeted functionality without forcing a vertical-specific tool.
  • Pricing model is proportional to role: Light licences for field technicians at low cost, Professional and Ultimate for power users with full CRM and ERP access.
  • Over 35 years of continuous development with 1,000+ corporate customers indicates stability and domain expertise in SME resource planning.

Weaknesses

  • Limited documented public API constrains automated integrations and migration tooling, making data export largely dependent on Excel templates and vendor-assisted custom imports.
  • Windows desktop-first architecture creates friction for organisations expecting browser-based or mobile-native access to core ERP functions.
  • No widely reviewed tier-specific feature matrix makes it difficult to compare licensing options or understand what is locked behind higher tiers without direct vendor engagement.
  • GDPR compliance tooling is not prominently documented, which may concern customers in regulated industries handling EU personal data.
  • Customer reviews are sparse on public platforms (G2 shows limited verified reviews), making independent evaluation harder for prospective buyers.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 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 work4all and Odoo CRM.

  • Object compatibility

    B

    1 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

    work4all: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your work4all to Odoo CRM 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 work4all to Odoo CRM data migrations

Answers to the questions buyers ask most during work4all to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between four and six weeks for accounts under 10,000 Customers, 2,000 Suppliers, and clean ERP document history with no partial-payment open items. Migrations with Light-licence users requiring admin export coordination, industry-extension custom fields discovered during schema inspection, large Open Item portfolios with partial-payment reconciliation, or multiple ERP document types (Invoices, Offers, Cost Receipts) move to eight to fourteen weeks because of the vendor coordination overhead and the ledger reconciliation step.

Adjacent paths

Related migrations to explore

Ready when you are

Move from work4all.
Land in Odoo CRM, 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