CRM migration

Migrate from WennSoft to Odoo CRM

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

WennSoft logo

WennSoft

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between WennSoft and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

WennSoft is a field service and construction software suite built on Microsoft Dynamics GP, designed for commercial skilled trades. Its core objects — Service Calls, Customer Locations, Equipment, Employees, Time Entries, Job Costs, and Billing Rates — reflect a job-costing and dispatch-oriented data model. Odoo CRM is a modular open-source ERP where field service data must be mapped into crm.lead (opportunities), project (work orders), stock.production.lot (equipment), and res.partner (contacts and companies) models. We map WennSoft Service Calls to project.task records with custom stage labels, Equipment to Odoo's lot/serial model or a custom field_service.equipment model, Employees to Odoo res.users, and Job Cost entries to analytic.account.line records with the project_id set to the corresponding work order. Billing rate matrices and markup structures from WennSoft require Odoo product pricelist rules or custom fields because Odoo has no native cost-plus billing matrix. We migrate all standard objects, custom fields, attachments, and activity history via Odoo's XML-RPC API, respecting rate limits and preserving original creation timestamps. Workflows, dispatch board automations, and trigger-based field updates do not migrate — we document them as a rebuild reference for Odoo Studio or server actions. The migration runs in a staged sequence: Customers and Locations first, then Equipment, then Employees, then Service Calls, then Time and Job Cost entries, so foreign-key dependencies resolve correctly in Odoo's PostgreSQL-backed relational schema.

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

WennSoft logo

WennSoft

What's pushing teams away

  • Integration projects take longer than expected with frequent glitches, and Capterra reviewers flag customer support responsiveness as a pain point during implementation and troubleshooting.
  • The product is described as very inflexible: billing rates cannot be changed once an invoice is posted, and cost-plus job billing amounts have limited adjustability after posting.
  • The CRM component (Key2Act legacy product) is considered underpowered compared to modern CRMs, pushing sales-focused teams toward Salesforce or HubSpot.
  • Onboarding new users requires significant training due to the dense, ERP-style UI rather than modern SaaS conventions, increasing total cost of ownership.
  • Companies outgrowing Dynamics GP as their ERP find the tight WennSoft–GP coupling a liability and migrate the whole stack together to Business Central or a cloud-native FSM.

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 WennSoft objects map to Odoo CRM

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

WennSoft

Customer / Location

maps to

Odoo CRM

res.partner

1:1
Fully supported

WennSoft customers map to Odoo res.partner records. A Customer record with multiple Locations becomes the parent res.partner with each Location added as a child contact (address type = 'contact') so Odoo's address model handles multi-location correctly. Primary contact person within the location becomes the contact's name fields. Phone, email, and notes carry over directly.

WennSoft

Service Call

maps to

Odoo CRM

project.task

1:1
Fully supported

Service Calls are the core WennSoft object and map to Odoo project.task records. Each Service Call becomes a task linked to a project record representing the customer location. Call status (Open, Dispatched, In Progress, Complete, On Hold) maps to custom task stage IDs configured in Odoo before migration. Original dispatch timestamps, problem type, and call type are stored in custom fields on the task.

WennSoft

Equipment

maps to

Odoo CRM

stock.production.lot / maintenance.equipment

1:1
Fully supported

Odoo has no native customer-linked equipment model that mirrors WennSoft's Equipment Manager. We recommend creating a custom field_service.equipment model inheriting from stock.production.lot with fields for customer_id, location_id, serial_number, equipment_type, problem_type, and last_service_date. Equipment history is stored as task records linked to the equipment. If Odoo's maintenance module is installed, equipment records are also registered there for preventive maintenance scheduling.

WennSoft

Employee / Technician

maps to

Odoo CRM

res.users + hr.employee

1:1
Fully supported

WennSoft employee records map to Odoo res.users (for system login) paired with hr.employee (for HR and timesheet context). Email, name, and department carry over directly. Technician skill certifications and dispatch-enabled flags map to hr.employee fields and tags. Active/inactive status on the WennSoft employee record controls the res.users active flag.

WennSoft

Time Entry

maps to

Odoo CRM

account.analytic.line

1:1
Fully supported

WennSoft TimeTrack entries migrate as Odoo account.analytic.line records linked to the project (work order) and the hr.employee (technician). Billable flag, labor type, and billing rate carry over as custom fields — Odoo timesheet lines do not natively support WennSoft's per-call-type billing rate lookup, so we store the rate as a computed field on the analytic line. Timesheet entries are created via Odoo's hr_timesheet module.

WennSoft

Job Cost Entry

maps to

Odoo CRM

account.analytic.line

1:1
Fully supported

WennSoft Job Cost lines (labor, materials, subcontractors) map to Odoo analytic lines with the appropriate product category. Cost codes map to Odoo's analytic account structure — each Job in WennSoft becomes an analytic account in Odoo, and the cost lines become child analytic lines under it. Actual cost and budgeted cost are stored as amount and planned_amount respectively on the analytic line.

WennSoft

Unbilled Cost Line

maps to

Odoo CRM

account.move.line

1:1
Fully supported

WennSoft's Unbilled Costs report lists all labor and material costs on unposted service calls. Odoo has no native unbilled cost register equivalent — we preserve the unbilled total and per-call cost breakdown as custom fields on the project.task and as analytic line records with a flag unbilled=True. This lets your Odoo admin generate an unbilled cost report in a spreadsheet without a native equivalent.

WennSoft

Billing Rate Matrix

maps to

Odoo CRM

product.pricelist.rule

1:1
Fully supported

WennSoft's Extended Pricing Matrix sets billing amounts by call type, problem type, and equipment type per contract. Odoo product pricelists handle volume-based and rule-based pricing but not the multi-axis cost-plus matrix. We map the matrix to a combination of product.pricelist.item records and custom fields on the service call task. Each pricing rule references the product (labor type or service part) and the pricelist scoped to the customer or contract.

WennSoft

Attachment / Document

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

WennSoft documents attached to service calls, equipment records, and customers migrate to Odoo ir.attachment records linked to the corresponding task, equipment model, or partner. The original filename, mimetype, and binary content are preserved. Inline images in notes are rehosted in Odoo's filestore under the project's directory.

WennSoft

Trigger / Workflow Rule

maps to

Odoo CRM

N/A — not migratable

1:1
Fully supported

WennSoft's Signature platform supports custom triggers and workflow rules tied to call status changes, technician assignments, and billing events. These run inside the Dynamics GP extension layer and have no Odoo equivalent. We export all trigger definitions and logic as a human-readable rebuild guide mapped to Odoo Studio actions, server actions, and action rules so your Odoo admin can reconstruct the automation logic post-migration.

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.

WennSoft logo

WennSoft gotchas

High

Invoice posting locks billing rates permanently

High

Unposted Costs and Unbilled Costs require separate extraction

Medium

Integration complexity and frequent glitches slow migrations

Medium

No public bulk export API documented

Low

Dynamics GP edition gating may block migration paths

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

  • Odoo has no native field service dispatch board — service calls must be modeled as project tasks

    WennSoft's dispatch board is a first-class UI object where call status, problem type, technician, and time entries all live on one screen. Odoo CRM has no equivalent — the base Project app treats tasks as project-management items, not field service dispatch records. FlitStack AI maps Service Calls to project.task with custom stage names matching call statuses, and custom fields for problem type and dispatch timestamps. For full dispatch-board parity, your Odoo admin should evaluate Odoo's field service community apps or custom kanban views before migration data lands, because the view structure determines how your technicians interact with tasks day-to-day.

  • Equipment records require a custom Odoo model — lot/serial tracking is not customer-aware by default

    WennSoft's Equipment Manager links each piece of equipment to a Customer and Location, with serial number, type, problem history, and service contract details. Odoo's stock.production.lot tracks lot/serial numbers for inventory but has no native customer_id field. FlitStack AI creates a custom field_service.equipment model inheriting from stock.production.lot with many2one fields for customer and location, plus x_problem_history as a custom text field. If your Odoo deployment uses the maintenance module, equipment is also registered there for preventive maintenance scheduling — we map the equipment link to both models during migration.

  • Job cost line structures require pre-migration analytic account planning

    WennSoft's Job Cost module lets you track budgeted vs. actual costs across labor, materials, and subcontractors per job, with cost codes that map to WennSoft's internal GL structure. Odoo's analytic accounting model supports cost tracking but requires a pre-configured analytic plan with accounts created per job before migration runs. FlitStack AI generates the analytic account structure from WennSoft Job Cost records during the planning phase and creates the accounts in Odoo before data loads, so analytic lines land under the correct parent account. If your WennSoft setup uses non-standard cost codes, value-mapping tables are built before migration — not during.

  • WennSoft's extended pricing matrix has no native Odoo equivalent — billing rates need custom fields or pricelist rules

    WennSoft's Extended Pricing Matrix lets you define billing amounts and markup percentages per call type, problem type, equipment type, and contract — a multi-dimensional pricing table. Odoo product pricelists support rule-based pricing but not this multi-axis matrix natively. FlitStack AI maps the pricing matrix to a combination of product.pricelist.item records scoped by product and partner, plus custom fields on project.task (x_billing_rate_labor, x_markup_percentage) that your Odoo admin can use to calculate invoice amounts from service call records. For cost-plus contracts, we recommend using Odoo's sale.order.line with manual price computation from the stored billing rate.

  • Unbilled costs from unposted service calls have no native Odoo register

    WennSoft's Unbilled Costs report aggregates all labor and material costs on service calls with status other than Complete, showing exactly what revenue is at risk of being missed before a call is posted. Odoo has no native unbilled cost register — when a task is not yet invoiced, its analytic lines exist but are not surfaced as a unified unbilled report. FlitStack AI preserves the unbilled totals and per-call cost breakdown as custom fields on project.task (x_unbilled_labor, x_unbilled_materials) and as analytic line records flagged x_unbilled=True. This allows your team to generate a custom unbilled report from Odoo's analytic or project views post-migration without a native equivalent.

Migration approach

Six steps for a successful WennSoft to Odoo CRM data migration

  1. Audit WennSoft data and plan the Odoo schema

    FlitStack AI exports all WennSoft records via the Signature API and SQL views into a staging environment. We inventory every object — service calls, equipment, employees, time entries, job cost lines, and attachments — and count records per type. We then deliver a schema setup plan for Odoo: which modules to install (CRM, Project, Timesheet, Maintenance, Inventory), which custom model to create for field service equipment, which custom fields to add to project.task, and what analytic account structure to create before migration data lands. Your Odoo admin creates the schema in a sandbox; we validate the structure before the sample run.

  2. Resolve technicians and customers by email and name

    Odoo requires a res.users record before a task can be assigned to a technician. We match WennSoft employee records to Odoo res.users by email address. Unmatched employees are flagged before migration — your team creates the Odoo user accounts first, or assigns those technicians to a fallback user. Customers and locations resolve to res.partner records by name; duplicate partner names are flagged for Odoo deduplication before contacts are created.

  3. Create analytic accounts and equipment records before service calls

    Odoo's relational integrity requires project records to exist before tasks can link to them, and analytic accounts to exist before analytic lines can reference them. We sequence the migration so res.partner records are created first, then equipment (lot/custom model), then analytic accounts (one per WennSoft job), then project records, then project.task records for service calls, then analytic lines for time entries and job costs. This order ensures that every many2one foreign key resolves on first write, preventing orphaned records.

  4. Run a sample migration with field-level validation

    A representative slice of 100–500 records migrates first — spanning customers, locations, equipment, service calls, time entries, and job cost lines. We generate a field-level diff between the source WennSoft records and the destination Odoo records so you can verify stage mapping, technician assignment, analytic line amounts, and billing rate preservation. Any mapping gaps or value-mapping mismatches are corrected before the full run. Custom field names and analytic account structure are validated against Odoo's field API at this stage.

  5. Execute full migration with delta pickup and audit logging

    The full migration runs against Odoo via XML-RPC API, respecting Odoo's rate limits on batched create operations. A delta-pickup window (typically 24–48 hours) captures any WennSoft service calls, time entries, or job cost records modified during the cutover window. Every operation is logged to an audit table with source record ID, destination record ID, operation type, and timestamp. If reconciliation fails, one-click rollback reverts the Odoo database to the pre-migration snapshot. The audit log is delivered as a CSV alongside the migrated database.

Platform deep dives

Context on both ends of the pair

WennSoft logo

WennSoft

Source

Strengths

  • Purpose-built for skilled trades—service calls, job cost, equipment, and scheduling all in one ERP-native suite.
  • Tight integration with Microsoft Dynamics GP and Business Central for finance and accounting continuity.
  • Equipment Manager module provides detailed asset records tied to customer locations and service history.
  • MobileTech gives field technicians offline-capable mobile access to dispatch and time entry.
  • 12,000+ skilled trade professionals actively using MobileTech, indicating production-scale field deployment maturity.

Weaknesses

  • Very limited public API documentation—bulk export requires direct SQL or WennSoft-assisted data pull.
  • Billing rates locked after invoice posting with no retroactive adjustment, creating rigidity in cost-plus billing scenarios.
  • ERP-style UI with a steep learning curve compared to modern cloud FSM products.
  • Customer support responsiveness is cited as a pain point in Capterra reviews, particularly during integration troubleshooting.
  • No native migration tooling; organizations moving off WennSoft must build custom export paths or rely on third-party migration services.
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 WennSoft 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

    WennSoft: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your WennSoft to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most WennSoft to Odoo CRM migrations complete in 48–72 hours for under 10,000 records. Larger datasets with 50,000+ records, complex job cost structures, or multiple equipment-linked service histories extend to 7–14 days. The planning phase — building the custom field_service.equipment model and configuring analytic account structure in Odoo — typically takes 3–5 business days before any data moves. The analytic account and equipment schema setup is the longest pre-migration step.

Adjacent paths

Related migrations to explore

Ready when you are

Move from WennSoft.
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