CRM migration
Field-level mapping, validation, and rollback between WorkBuddy and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
WorkBuddy
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between WorkBuddy and Odoo CRM.
Complexity
BStandard
Timeline
24–72 hours
Overview
WorkBuddy organizes field-service operations around jobs, quotes, assets, and scheduling with a focus on trade and multi-trade service businesses. Odoo CRM models the same domain around crm.lead (which covers both inbound leads and field-service requests), res.partner (unified contact and company record), and crm.lead / sale.order for quotes and work orders. The migration must bridge WorkBuddy's job-status lifecycle, service-area assignments, and timesheet records into Odoo's stage-driven pipeline and contact model — a non-trivial schema translation because Odoo does not have a native field-service scheduling module in its standard CRM app; those capabilities live in Odoo's Project and Planning apps which are separate installs. We map WorkBuddy customer and contact records to res.partner, WorkBuddy job records to crm.lead with a custom job_type field, WorkBuddy quotes to sale.order (or sale.quotation depending on Odoo version), WorkBuddy assets to stock.production.lot or a dedicated custom asset model, and WorkBuddy timesheets to account.analytic.line. WorkBuddy's custom properties (safety compliance fields, service-area tags, subcontractor assignments) migrate as Odoo custom fields on the respective model — requiring your Odoo admin to pre-create those fields before the migration runs. All automation rules, job workflows, and scheduling triggers in WorkBuddy are platform-native constructs that do not transfer; we export them as JSON reference files for your team to rebuild in Odoo Studio or via custom modules. The migration runs via Odoo's xmlrpc / jsonrpc API against your target database, with a scoped WorkBuddy read-only export preceding the load to validate field mapping before any data commits.
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 WorkBuddy 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.
WorkBuddy
WorkBuddy Customer
Odoo CRM
res.partner
1:1WorkBuddy customers (company-level B2B records) map directly to Odoo res.partner with partner_type='contact' and is_company=True. The WorkBuddy customer name becomes partner.display_name, address fields map to street, city, state_id, country_id, and zip. Any WorkBuddy customer notes migrate to res.partner.comment as plain text. WorkBuddy customer-specific custom properties (e.g., ABN, industry segment) become custom fields on res.partner.
WorkBuddy
WorkBuddy Contact
Odoo CRM
res.partner
1:1WorkBuddy contacts (individual people linked to a customer) map to Odoo res.partner records with is_company=False and parent_id pointing to the partner record created from the WorkBuddy customer. Name fields split into lastname and firstname using WorkBuddy's name field. Email, phone, and mobile map directly. WorkBuddy contact custom properties migrate as res.partner custom fields.
WorkBuddy
WorkBuddy Job
Odoo CRM
crm.lead
1:1WorkBuddy job records map to Odoo crm.lead in lead mode (type='lead'), not opportunity mode. The job title becomes crm.lead.name; job description maps to crm.lead.description. Job status from WorkBuddy maps to a custom picklist field Job_Status__c on crm.lead and also influences the crm.lead.stage_id by routing statuses to Odoo stage names defined per migration plan. Job type (e.g., Electrical, Plumbing) migrates as a custom field crm.lead.x_workbuddy_job_type. If the WorkBuddy job is tied to a quote, the opportunity conversion path is used after migration.
WorkBuddy
WorkBuddy Quote
Odoo CRM
sale.order / sale.quotation
1:1WorkBuddy quotes (pricing proposals attached to a job) map to Odoo sale.order in draft/quotation state. Quote line items map to sale.order.line records linked to a product in the Odoo product.product catalog; if no matching product exists in Odoo, a placeholder product is created. Quote total, taxes, and discounts are preserved on the sale.order.amount_total and sale.order.line.price_unit / price_subtotal fields. The Odoo version determines whether the model name is sale.order (v16) or sale.quotation (v17+).
WorkBuddy
WorkBuddy Asset
Odoo CRM
stock.production.lot / maintenance.equipment
1:1WorkBuddy asset records (equipment or property items tracked per job) map to Odoo stock.production.lot for inventory-tracked items or maintenance.equipment for service-maintenance records. The mapping choice depends on how the Odoo instance is configured. Asset name maps to lot_name or name; asset serial number maps to ref; WorkBuddy asset notes migrate to the description field on the target model. If Odoo's maintenance app is not installed, assets migrate to a custom asset model defined in the migration plan.
WorkBuddy
WorkBuddy Timesheet / Timesheet Entry
Odoo CRM
account.analytic.line
1:1WorkBuddy timesheet entries (hours logged per job per technician) map to Odoo account.analytic.line records linked to the account.analytic.account associated with the WorkBuddy job. The entry date, duration (hours), user_id (technician), and description map to date, unit_amount, user_id, and name respectively. If Odoo's timesheet app is active, records appear in the timesheet dashboard; otherwise they are available as analytic entries for reporting.
WorkBuddy
WorkBuddy User / Staff Member
Odoo CRM
res.users
1:1WorkBuddy user IDs (technicians, dispatchers, admin staff) are resolved by email address match against Odoo res.users records. FlitStack creates a mapping table of WorkBuddy user ID to Odoo res.users.id. If a WorkBuddy user has no matching Odoo user, their records are assigned to a fallback Odoo user (typically the migration admin) and flagged in the audit log for post-migration reassignment. Odoo does not create users from scratch during migration — Odoo user provisioning must happen before migration or concurrently.
WorkBuddy
WorkBuddy Custom Property (Job)
Odoo CRM
crm.lead custom field
1:1WorkBuddy custom properties on job records — safety compliance tags, service-area codes, subcontractor assignments — do not exist in Odoo's standard crm.lead schema. FlitStack maps each custom property to a custom field on crm.lead (x_ prefixed by Odoo convention), with field type matching the source data type: Char for text, Selection for picklists, Boolean for flags, Date/Datetime for timestamps. The Odoo admin must pre-create these fields before migration or approve FlitStack's schema-creation module as part of the migration package.
WorkBuddy
WorkBuddy Attachment / File
Odoo CRM
ir.attachment
1:1WorkBuddy file attachments (photos, PDFs, signed documents) linked to jobs or contacts migrate as Odoo ir.attachment records with res_model set to the target Odoo model (crm.lead or res.partner) and res_id set to the migrated record's Odoo ID. The file binary content is downloaded from WorkBuddy and re-uploaded to Odoo's filestore via the /web/binary/attachment route or direct filestore write. Attachment names and create dates are preserved. Large files exceeding Odoo's default size limit are flagged for manual handling.
WorkBuddy
WorkBuddy Job Workflow / Automation
Odoo CRM
Not migrated
1:1WorkBuddy workflow rules (automatic job status transitions, notification triggers, scheduling rules) are platform-native automation constructs that have no Odoo equivalent at the data layer. FlitStack exports the workflow definitions as a JSON reference file containing rule names, trigger conditions, and action sequences. This file is handed to the Odoo admin or consultant to rebuild in Odoo Studio or as a custom module using Odoo's ir.actions.server and base.action.rule models.
WorkBuddy
WorkBuddy Subcontractor Assignment
Odoo CRM
res.partner (subcontractor) + custom link
1:1WorkBuddy subcontractor management links a job to one or more subcontractor contacts. Odoo CRM does not have a native subcontractor object — FlitStack maps each subcontractor to a res.partner record (created or matched by email) and creates a custom many2many field x_workbuddy_subcontractors on crm.lead linking the job to the subcontractor partner records. If Odoo's purchase module is installed, purchase orders can be raised against the subcontractor partner after migration.
WorkBuddy
WorkBuddy Job Safety Record
Odoo CRM
crm.lead custom field or maintenance.equipment
1:1WorkBuddy safety and compliance records (SWA forms, site risk assessments, permits) attached to jobs do not map to any standard Odoo object. FlitStack migrates them as ir.attachment records linked to the crm.lead and also creates a custom field x_safety_compliant (Boolean) and x_safety_notes (text) on crm.lead for quick filtering. Full safety document content is preserved as attachments; the compliance status flag is searchable in Odoo.
| WorkBuddy | Odoo CRM | Compatibility | |
|---|---|---|---|
| WorkBuddy Customer | res.partner1:1 | Fully supported | |
| WorkBuddy Contact | res.partner1:1 | Fully supported | |
| WorkBuddy Job | crm.lead1:1 | Fully supported | |
| WorkBuddy Quote | sale.order / sale.quotation1:1 | Fully supported | |
| WorkBuddy Asset | stock.production.lot / maintenance.equipment1:1 | Fully supported | |
| WorkBuddy Timesheet / Timesheet Entry | account.analytic.line1:1 | Fully supported | |
| WorkBuddy User / Staff Member | res.users1:1 | Fully supported | |
| WorkBuddy Custom Property (Job) | crm.lead custom field1:1 | Fully supported | |
| WorkBuddy Attachment / File | ir.attachment1:1 | Fully supported | |
| WorkBuddy Job Workflow / Automation | Not migrated1:1 | Fully supported | |
| WorkBuddy Subcontractor Assignment | res.partner (subcontractor) + custom link1:1 | Fully supported | |
| WorkBuddy Job Safety Record | crm.lead custom field or maintenance.equipment1: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.
WorkBuddy gotchas
No publicly documented REST API
Multi-company accounts split data scopes
Job status must be resolved before cutover
Custom fields vary by industry template
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
Audit WorkBuddy data export and Odoo target configuration
FlitStack connects to WorkBuddy via API using scoped read-only credentials to export all customer, contact, job, quote, timesheet, and asset records. We simultaneously audit the Odoo target instance — confirming the installed apps (CRM, Sale, Project, Timesheet, Maintenance), checking the existing res.partner and crm.lead schema for pre-existing custom fields, and verifying API user access. This step produces a WorkBuddy data inventory count per object, a custom field manifest for Odoo, and a gap analysis identifying WorkBuddy objects with no Odoo target (subcontractor assignments, safety records) so the custom field creation plan can be confirmed before any data moves.
Create Odoo custom fields and schema extensions
For every WorkBuddy custom property and WorkBuddy-native concept without an Odoo equivalent, FlitStack prepares a custom field creation plan. This includes field names following Odoo's x_ prefix convention, field types matching the source data, and a Python module file (ir.config.parameter or a dedicated migrate_workbuddy_data module) that the Odoo admin installs before migration. For the subcontractor many2many field, the custom module includes the field definition and view arch changes to add the field to the crm.lead form. The Odoo admin reviews, approves, and installs this module — or FlitStack can install it directly on Enterprise instances with appropriate access. No data loads until this step is confirmed complete.
Resolve WorkBuddy users to Odoo res.users by email
FlitStack builds a WorkBuddy-to-Odoo user mapping table by matching WorkBuddy user email addresses against Odoo res.users login emails. Technicians, dispatchers, and admin users are resolved to their Odoo counterparts. Any WorkBuddy user with no Odoo match is flagged in the mapping report; the Odoo admin either creates the Odoo user before migration or designates a fallback Odoo user for those records. This step is critical because crm.lead.user_id, account.analytic.line.user_id, and sale.order.user_id all depend on a valid Odoo user ID — orphaning these records with a null user_id causes ownership and reporting issues in Odoo.
Load partner and lead records with field-level diff
FlitStack sequences the load to respect Odoo's foreign-key constraints: res.partner records (customers, contacts, subcontractors) load first, then crm.lead records referencing those partners, then sale.order records referencing crm.lead and partners, then account.analytic.line records referencing users and analytic accounts. A sample migration runs against a staging Odoo database first — typically 200-500 records per object — and produces a field-level diff report comparing source values against Odoo loaded values. The diff is reviewed with the client to confirm stage mapping, custom field population, and owner resolution before the full run commits. Any field mapping adjustments are applied and the sample re-run until the diff passes.
Run full migration with delta-pickup window
The full migration executes against the production Odoo target. A delta-pickup window of 24-48 hours runs concurrently — capturing any new WorkBuddy records or modifications made during the cutover period. FlitStack logs every operation (create, write, link) to an audit table with the source WorkBuddy record ID and the Odoo record ID for full traceability. After the delta window closes, a reconciliation report is generated comparing WorkBuddy final record counts against Odoo loaded counts per object. If any records are missing or orphaned, the audit log pinpoints the failure point. One-click rollback is available within the delta window if reconciliation reveals material discrepancies requiring a re-run.
Platform deep dives
WorkBuddy
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between WorkBuddy and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across WorkBuddy and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between WorkBuddy and Odoo CRM.
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
WorkBuddy: Not publicly documented. We confirm available export channels with WorkBuddy support on a per-customer basis before scoping a migration..
Data volume sensitivity
WorkBuddy 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 WorkBuddy to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your WorkBuddy 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 WorkBuddy
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.