CRM migration

Migrate from Swivl Tech to Odoo CRM

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

Swivl Tech logo

Swivl Tech

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

14 of 14

objects map 1:1 between Swivl Tech and Odoo CRM.

Complexity

BStandard

Timeline

3–5 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Swivl Tech targets small and mid-sized field service businesses with a combined CRM and job-management tool. Its data model centers on Contact, Company, Work Order (with status, assigned technician, line items, and GPS coordinates), Activity Log, and custom properties stored as key-value attributes. Odoo CRM uses a different architecture: crm.lead as a unified object for both leads and opportunities, res.partner for contacts and companies, crm.team for groupings, and crm.stage for pipeline phases. We migrate Swivl Tech contacts and companies to res.partner, work orders to crm.lead with custom fields preserving job status and service details, activity logs to mail.message records, and all custom properties to Odoo custom fields on crm.lead via Settings → Technical → Fields. Workflows, automation rules, and notification templates cannot migrate and must be rebuilt in Odoo's Automations menu. FlitStack uses Odoo's XML-RPC API for record creation and its native CSV import for bulk attachments, sequencing parent objects before child records so foreign-key references resolve correctly. The delta-pickup window captures any Swivl records modified during the cutover, and audit logs document every migrated row for reconciliation.

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

Swivl Tech logo

Swivl Tech

What's pushing teams away

  • Swivl has no publicly documented REST API, making third-party integrations and automated data pipelines impossible without manual exports and imports.
  • The platform is built for small to mid-market operations; customers running 50+ technicians across multiple locations report that advanced multi-location management lags competitors like ServiceTitan.
  • No bulk data export mechanism is documented on the public website, creating risk for businesses that need to extract years of job and customer history for reporting or compliance purposes.

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

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

Swivl Tech

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Swivl Tech Contact maps directly to Odoo res.partner. The email, phone, address, and company association fields align structurally. Swivl contacts without a company map to res.partner records with no parent_id. Multi-address contacts collapse to the primary address; secondary addresses are stored as custom fields for reference.

Swivl Tech

Company

maps to

Odoo CRM

res.partner (company type)

1:1
Fully supported

Swivl Tech Company maps to Odoo res.partner with partner_type='company'. The company name maps to the name field, domain to website, industry to industry_id (from res.partner.industry), and employee_count to employee_count. Parent-child company hierarchies in Swivl map to parent_id on res.partner. Additional company metadata such as fiscal year information, tax identification numbers, and credit limits are preserved as custom fields to ensure complete data transfer across your organizational structure.

Swivl Tech

Work Order

maps to

Odoo CRM

crm.lead (as opportunity record)

1:1
Fully supported

Swivl Tech work orders have no direct Odoo equivalent. We map them to crm.lead records where type='opportunity'. Job description maps to description, scheduled_date to date_deadline, and the assigned technician's email resolves to an Odoo res.user linked via a custom x_tech_id field. Job status becomes a crm.stage within the active pipeline.

Swivl Tech

Job Status

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Swivl Tech's job_status values (New Job, Scheduled, In Progress, Completed, Invoiced, Cancelled) map one-to-one to Odoo crm.stage entries in the target pipeline. Each stage gets a sequence number matching Swivl's workflow order. Probability values are applied per stage from Odoo's standard defaults.

Swivl Tech

Job Line Item

maps to

Odoo CRM

sale.order.line (requires Odoo Sale app)

1:1
Fully supported

Swivl Tech line items (service description + amount) on a work order map to sale.order.line records when the Odoo Sale app is installed. If the Sale app is not active, line item data is preserved as a custom Char field (x_line_items) on crm.lead in a structured text format. We surface this decision before migration runs.

Swivl Tech

Service Activity Log

maps to

Odoo CRM

mail.message

1:1
Fully supported

Swivl Tech stores job notes, GPS check-ins, and customer interactions as Activity Log entries with a timestamp and internal-user attribution. We migrate these as Odoo mail.message records linked to the crm.lead or res.partner via res_model and res_id. The Swivl create_date field maps to mail.message's date for timestamp continuity.

Swivl Tech

Scheduled Visit / Appointment

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Swivl Tech scheduled visits with technician assignment, date/time, and customer map to Odoo calendar.event records linked to the technician's res.user (user_id) and the customer's res.partner (partner_ids). Swivl's scheduled_date maps to start_datetime and stop_datetime in Odoo. Additional visit metadata such as visit purpose, location details, and any associated notes are preserved to maintain full contextual information about each scheduled customer interaction.

Swivl Tech

Before/After Photos

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Swivl Tech photo attachments migrate as binary records in Odoo's ir.attachment table with res_model pointing to crm.lead or res.partner. The original filename and content type are preserved. Inline images embedded in job notes are downloaded and re-uploaded as ir.attachment records.

Swivl Tech

Custom Properties (Contact, Company, Work Order)

maps to

Odoo CRM

ir.model.fields (custom x_ fields on crm.lead / res.partner)

1:1
Fully supported

Swivl Tech custom properties (e.g., x_vehicle_id, x_contract_type) are stored as arbitrary key-value pairs with no schema. We read every unique property key across all records, then create matching custom fields on crm.lead or res.partner via Settings → Technical → Fields in Odoo. Field type is inferred from the data: text values become char, numeric values become float or integer, dates become date.

Swivl Tech

Owner / Assigned Technician

maps to

Odoo CRM

res.user

1:1
Fully supported

Swivl Tech stores the assigned technician by email in work_order.assigned_tech. We match this email against Odoo res.user records (filtered by login). Unmatched technicians are flagged before migration; the team either creates the Odoo user first or assigns the crm.lead to a fallback user chosen at migration setup.

Swivl Tech

Job Status History

maps to

Odoo CRM

mail.message (as stage-change entries)

1:1
Fully supported

Swivl Tech maintains a timestamped history of job status changes. We represent each status transition as a mail.message with a structured body noting the old and new status values and the transition timestamp. This gives Odoo users an audit trail of the job's full lifecycle on the crm.lead record.

Swivl Tech

Work Order Invoice Reference

maps to

Odoo CRM

account.move (requires Odoo Accounting app)

1:1
Fully supported

Swivl Tech invoices created against a work order map to Odoo account.move records when the Odoo Accounting app is installed. If Accounting is not active, the invoice number and amount are stored as custom fields on the crm.lead for reference. We surface this dependency at scoping.

Swivl Tech

Customer Signature

maps to

Odoo CRM

x_customer_signature (custom field on crm.lead)

1:1
Fully supported

Swivl Tech captures customer signatures as base64-encoded images stored against the work order. Odoo CRM has no native signature field on crm.lead. We preserve the signature as a binary custom field (x_customer_signature) on crm.lead and attach the original image as an ir.attachment for audit visibility.

Swivl Tech

Customer Star Rating

maps to

Odoo CRM

x_swivl_rating (custom field on crm.lead)

1:1
Fully supported

Swivl Tech records post-job star ratings as integer values. Odoo CRM has no native star-rating construct. We preserve the rating as an integer custom field (x_swivl_rating, range 1–5) on crm.lead for reporting and historical reference. This enables you to analyze customer satisfaction trends over time, evaluate technician performance based on ratings received, and identify patterns in service delivery that can inform training and process improvements.

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.

Swivl Tech logo

Swivl Tech gotchas

High

No documented REST API for automated data extraction

Medium

Attachment files are not accessible via export

Low

Swivl brand name overlaps with unrelated products

Low

AI estimator outputs are not a standard CRM object

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

  • Swivl Tech work orders have no native Odoo CRM equivalent — job data disperses across custom fields

    Swivl Tech's Work Order object stores a rich job record with status, assigned technician, service address, line items, photos, and customer signature in a single object. Odoo CRM has no work-order model; crm.lead is a lead/opportunity record designed for sales pipelines, not field-service jobs. We map Swivl work orders to crm.lead as opportunity records and store job-specific fields (technician assignment, service address, line items, signature) as custom fields on crm.lead via Settings → Technical → Fields. If Odoo's Project app is active, we can create project.task records linked to crm.lead for a richer job structure — this requires a separate planning step with your Odoo admin before migration so the project and task sequences are configured.

  • Custom property proliferation creates Odoo custom field overhead per unique property key

    Swivl Tech stores custom properties as free-form key-value attributes per record, with no enforced schema. When migrating, every unique property key across contacts, companies, and work orders requires a separate Odoo custom field created via Settings → Technical → Fields. Swivl setups with 30+ custom properties across different record types generate 30+ custom fields on crm.lead and res.partner. This is technically supported in Odoo but clutters the form view and requires Odoo Studio or developer-mode configuration to organize fields into tabs. We deliver a custom field manifest before migration so your admin can group them into field sections before data lands.

  • Swivl Tech's job status labels do not align with Odoo crm.stage probabilities by default

    Swivl Tech uses flat job_status labels (New Job, Scheduled, In Progress, Completed, Invoiced, Cancelled) with no probability or forecast-category data attached. In Odoo CRM, each crm.stage has a sequence number and an optional probability percentage used for sales forecasting. The In Progress stage in Swivl may have a 40% probability expectation in Odoo while Swivl treats it as a workflow label only. We map stages one-to-one by name and apply Odoo's standard probability values per stage, but your sales team should review and adjust stage probabilities in CRM → Configuration → Stages after migration to match your actual close rates.

  • Customer signatures and star ratings have no Odoo CRM equivalent and require custom field handling

    Swivl Tech captures customer sign-off images as base64 fields on completed work orders and stores post-job star ratings as integers. Odoo CRM has no native signature field on crm.lead and no star-rating mechanism at the CRM level. We preserve signature data as a binary custom field (x_customer_signature) and ratings as an integer custom field (x_swivl_rating) on crm.lead. These fields are searchable and reportable in Odoo but are not part of the standard Odoo CRM UI — your team will need Odoo Studio access or developer mode to add them to form views.

  • Swivl Tech's technician assignment by email requires pre-existing Odoo users before migration

    Swivl Tech assigns technicians and staff by email address stored on work orders. Odoo CRM links records to users via the res.users model, which must exist in the Odoo database before we can resolve a Many2one reference. If a Swivl technician has no corresponding Odoo user account, the crm.lead record cannot store a valid x_tech_id reference. We run an email-matching step before migration: any technician email without an Odoo user match is flagged and your team either creates the user in Odoo first or designates a fallback user to receive those records.

Migration approach

Six steps for a successful Swivl Tech to Odoo CRM data migration

  1. Extract all Swivl Tech data via export tools and API

    FlitStack AI pulls Swivl Tech records using your account's export capabilities and API endpoints. We extract contacts, companies, work orders, activity logs, file attachments, and all custom property values in their raw form. Each record is assigned a source-system ID (Swivl internal identifier) before any transformation begins. The extraction phase also captures the full job status history timeline so we can reconstruct stage-transition timestamps in Odoo mail.message records.

  2. Build Odoo destination schema: custom fields, stages, and user mapping

    We create the Odoo custom fields required to hold Swivl data that has no native equivalent. Using Odoo's Settings → Technical → Fields interface (or direct ir.model.fields writes via XML-RPC for bulk operations), we create x_swivl_work_order_id, x_swivl_rating, x_customer_signature, x_service_address, x_line_items, and other fields on crm.lead and res.partner. We configure crm.stage entries to match Swivl job_status labels in your target pipeline. Finally, we resolve Swivl technician emails to Odoo res.user records; unmatched technicians are flagged for your team to create accounts or assign a fallback user before migration.

  3. Migrate parent objects before child objects with foreign-key sequencing

    Odoo enforces referential integrity: res.partner records must exist before crm.lead records that reference them (via partner_id), and crm.lead records must exist before mail.message records that link via res_id. We sequence the migration in dependency order: res.partner companies, then res.partner contacts, then crm.lead work orders with stage_id and x_tech_id resolved, then mail.message activity logs, then ir.attachment photo records. Swivl's create_date timestamps are preserved as custom datetime fields in Odoo since Odoo's native create_date reflects migration-run time.

  4. Run a sample migration with field-level diff on 50–100 representative records

    A representative slice of Swivl records — spanning contacts, companies, work orders across different statuses, and a few activity logs — is migrated to your Odoo test environment first. We generate a field-level diff showing source values against destination field values for every mapped field. You can verify that Swivl job_status values resolved to the correct crm.stage records, that technician email matched to the right res.user, and that custom property values landed in the correct Odoo custom fields. No records are deleted from Swivl during this phase.

  5. Execute full migration with delta-pickup window and one-click rollback

    The full migration runs against your Odoo production environment after sample approval. A 24–48 hour delta-pickup window captures any Swivl records created or modified during the migration window. An audit log records every create, update, and skip operation with source system IDs. If reconciliation finds orphaned records, missing associations, or mapping failures, FlitStack AI rolls back the full operation with one click. After rollback, your Swivl account is fully intact and no records are overwritten in Odoo.

Platform deep dives

Context on both ends of the pair

Swivl Tech logo

Swivl Tech

Source

Strengths

  • Free Starter plan with no seat limit provides unlimited contacts and basic features at zero cost.
  • Flat-rate monthly pricing at $49/mo Growth and $149/mo Scale Pro means costs are predictable regardless of team headcount.
  • All-in-one FSM stack (CRM, scheduling, GPS, invoicing, website builder) reduces tool sprawl for small service businesses.
  • Dedicated human account manager assigned from day one, uncommon in this price range.
  • Fast onboarding—Swivl claims setup can be achieved in minutes versus the 2–4 month implementation timeline of enterprise competitors.

Weaknesses

  • No publicly documented REST API limits integration options to pre-built connectors only.
  • No bulk data export endpoint means migrating out requires manual data extraction or direct database access.
  • The Scale Pro plan is required for pricebook management and advanced reporting, adding cost for businesses needing those features.
  • Limited documentation on third-party integrations compared to established competitors like Housecall Pro and Jobber.
  • Founded in 2020, Swivl is a younger platform with a shorter operational track record than competitors with 10+ years in the market.
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. 2 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 Swivl Tech and Odoo CRM.

  • Object compatibility

    B

    2 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

    Swivl Tech: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Swivl Tech to Odoo CRM migrations complete in 3–5 days for setups with fewer than 5,000 records and fewer than 30 custom properties. Large migrations with over 100,000 records or extensive custom-property schemas requiring Odoo custom field creation for each unique property key can extend to 2–4 weeks. The longest planning step is the custom field manifest: mapping every unique Swivl custom property key to an Odoo ir.model.fields entry. The migration clock itself (API extraction and record creation in Odoo) is typically 4–8 hours of active data transfer after schema is ready.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Swivl Tech.
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