CRM migration
Field-level mapping, validation, and rollback between FieldAware by GPS Insight and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
FieldAware by GPS Insight
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between FieldAware by GPS Insight and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
FieldAware by GPS Insight is a field-service management platform organized around Jobs, Assets, Locations, and Customers — each with entity-specific custom fields. Odoo CRM is organized around Leads, Opportunities, and Contacts via res.partner, with pipelines and stages managed through crm.stage and crm.team. These data models share only two objects in any meaningful sense: FieldAware Customer maps to Odoo res.partner (as a company record), and FieldAware Contact maps to Odoo res.partner (as a person record). Everything else — jobs, assets, locations, work-order history, and invoice records — requires a decision about where it lands in Odoo or whether it should be preserved as reference data rather than live operational records. We run the migration via FieldAware's CSV export tool and JSON REST API, mapping customers to companies and contacts, handling locations as address fields or partner addresses on the res.partner record, and routing jobs to Odoo Opportunities (crm.lead) or Project Tasks (project.task) depending on whether Odoo Project is installed. FieldAware custom fields per entity type require Odoo property fields or custom.char notes. Our audit phase surfaces every non-mappable record before migration commits, so nothing is lost silently. A 24–48 hour delta pickup window captures any FieldAware changes during cutover.
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 FieldAware by GPS Insight 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.
FieldAware by GPS Insight
Customer
Odoo CRM
res.partner (company type)
1:1FieldAware Customer maps to Odoo res.partner with partner_type set to 'company'. The customer name, primary address, phone, and email transfer directly. FieldAware's customer_id becomes the Odoo partner id. If the FieldAware customer has multiple locations, each location is imported as a child contact (address type) under the parent res.partner record.
FieldAware by GPS Insight
Contact
Odoo CRM
res.partner (person type)
1:1FieldAware Contact maps to Odoo res.partner as a person-type partner linked to its parent customer (company) via type='contact'. The contact name, email, phone, mobilephone, and job title transfer directly. If the same person appears under multiple FieldAware customers, Odoo's contact-de-duplication wizard identifies duplicates by email before insertion.
FieldAware by GPS Insight
Location
Odoo CRM
res.partner (address) or custom.stock.location
1:1FieldAware Location records carry GPS coordinates, address, and location-specific contact info. Odoo CRM has no native Location object. We map Location records as child res.partner address records under the parent Customer, preserving street, city, state, zip, and country. GPS latitude/longitude is stored in custom fields on the address partner since Odoo core lacks geolocation without the geoengine module.
FieldAware by GPS Insight
Job (Work Order)
Odoo CRM
crm.lead (Opportunity) or project.task
1:manyFieldAware Job records have no direct Odoo CRM equivalent. We offer two migration paths: (1) Map Job to crm.lead as an Opportunity, capturing job_number as name, job status as stage_id, and scheduled date as date_deadline. (2) If Odoo Project is installed, map Job to project.task with the customer as project partner. The split is decided during the audit phase based on whether the customer uses Odoo Project and whether job records need to be tracked as billable project tasks or as closed historical records.
FieldAware by GPS Insight
Job Line Item / Service Line
Odoo CRM
sale.order.line (via quotation) or custom.note
1:1FieldAware job line items (parts, labor, services) carry item name, quantity, unit price, and tax. Odoo Opportunity has no line-item structure. If Odoo Sales is activated, we create a draft quotation (sale.order) linked to the Opportunity and populate line items from the Job record. If Sales is not activated, line items are preserved as a formatted text note on the Opportunity record for manual re-entry.
FieldAware by GPS Insight
Asset
Odoo CRM
maintenance.equipment (if Odoo Maintenance installed) or no_equivalent
1:manyFieldAware Asset records store serial_number, make_model, location, and maintenance history. Odoo CRM has no Asset object. If the Odoo Maintenance module (maintenance.equipment) is installed, we map Asset to equipment records linked to the customer partner. If Maintenance is not installed, Asset data is preserved as a reference custom field on the customer res.partner record for manual re-entry into a future asset-tracking system.
FieldAware by GPS Insight
Invoice
Odoo CRM
account.move (Customer Invoice)
1:1FieldAware Invoice records map to Odoo account.move with move_type='out_invoice'. Invoice number, partner_id, invoice date, amount, and status transfer directly. If the FieldAware invoice references a Job, the job_number is stored in Odoo's invoice reference field. Line items from the FieldAware invoice are mapped to account.move.line records. Odoo Accounting must be installed and configured before this mapping runs.
FieldAware by GPS Insight
Quote / Estimate
Odoo CRM
sale.order (Quotation)
1:1FieldAware Quote records map to Odoo sale.order with state='draft'. Quote number, customer, line items, and total amount transfer directly. If the FieldAware Quote has a status of 'accepted', we set Odoo's sale.order to state='sent' to reflect that it has been delivered. Status 'expired' maps to Odoo's validity_date check.
FieldAware by GPS Insight
Task
Odoo CRM
project.task (if Odoo Project installed) or crm.lead activity
1:1FieldAware Tasks linked to Jobs map to project.task records under the corresponding Job-Project if Odoo Project is installed. Standalone FieldAware Tasks (not linked to a job) map to crm.lead activities (mail.message) on the related customer partner record, preserving the task name, description, and due date as a logged note.
FieldAware by GPS Insight
Custom Field Declaration (per entity)
Odoo CRM
ir.model.field or ir.property
1:1FieldAware custom fields are declared per entity type and carry type (Text, Number, CheckBox, Dropdown, Date, Time). Odoo defines custom fields via ir.model.fields globally. We map FieldAware's custom fields to Odoo ir.model.fields on the equivalent model: custom fields on FieldAware Customer become fields on res.partner; custom fields on Job become fields on crm.lead or project.task depending on job mapping choice. Dropdown-type custom fields require Odoo selection fields with value-by-value mapping.
FieldAware by GPS Insight
User / Technician
Odoo CRM
res.users
1:1FieldAware User records include name, email, role, and mobile. Odoo res.users records represent system login accounts. We map FieldAware users to Odoo res.users by email match. If the FieldAware user has no Odoo login yet, they are flagged as unassigned and routed to the customer for user provisioning. Technician-specific fields ( certifications, service areas) migrate as custom fields on the res.users record.
FieldAware by GPS Insight
Item / Parts Catalog
Odoo CRM
product.product
1:1FieldAware Item records (part number, description, unit price) map to Odoo product.product. Item type (service vs. consumable) maps to Odoo's product.type field. If the FieldAware item has a custom barcode, we store it in product.product.barcode. The product is created as a 'can be sold' product template so it is available in Odoo Sales quotations.
| FieldAware by GPS Insight | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer | res.partner (company type)1:1 | Fully supported | |
| Contact | res.partner (person type)1:1 | Fully supported | |
| Location | res.partner (address) or custom.stock.location1:1 | Fully supported | |
| Job (Work Order) | crm.lead (Opportunity) or project.task1:many | Fully supported | |
| Job Line Item / Service Line | sale.order.line (via quotation) or custom.note1:1 | Fully supported | |
| Asset | maintenance.equipment (if Odoo Maintenance installed) or no_equivalent1:many | Fully supported | |
| Invoice | account.move (Customer Invoice)1:1 | Fully supported | |
| Quote / Estimate | sale.order (Quotation)1:1 | Fully supported | |
| Task | project.task (if Odoo Project installed) or crm.lead activity1:1 | Fully supported | |
| Custom Field Declaration (per entity) | ir.model.field or ir.property1:1 | Fully supported | |
| User / Technician | res.users1:1 | Fully supported | |
| Item / Parts Catalog | product.product1: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.
FieldAware by GPS Insight gotchas
User tier cap misalignment at migration time
Custom field format type immutability
API rate limits are not publicly documented
Asset-to-Job linkage reconstruction
FieldAware brand transition to GPS Insight
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 FieldAware data export and API reachability
We connect to FieldAware via API key authentication (api.fieldaware.net) and run a parallel CSV export from the FieldAware portal for all entity types: Customers, Locations, Contacts, Jobs, Assets, Invoices, Quotes, Tasks, Items, and custom field declarations. We validate API rate limits, confirm record counts per entity, and verify that custom field declarations are accessible via the custom_field resource. The output is a comprehensive data inventory document showing record counts, field coverage, and any API-accessible data that is not present in the CSV export (such as signature images and attachment binary URLs).
Build the Odoo mapping plan and schema setup checklist
FlitStack produces a mapping plan that lists every FieldAware entity, its Odoo destination model, the field-by-field translation, and a decision flag for each split mapping (Job → crm.lead vs. project.task, Asset → maintenance.equipment vs. res.partner custom field). For each custom field declaration we identify the Odoo model, field type (char, selection, float, date), and any pick-list value mapping required. The checklist also includes Odoo-side prerequisites: installing Odoo Project for job-as-task migration, installing Odoo Maintenance for asset records, activating Odoo Accounting for invoice migration, and creating any custom ir.model.fields before data loads.
Load Companies, Contacts, and Locations in sequence
Data loads in dependency order: companies (res.partner, type='company') first, then locations as child address partners under each company, then contacts as person-type partners linked to their parent company. We use Odoo's XML-RPC write method or CSV import for each batch. Location GPS coordinates and FieldAware-specific address attributes are stored in custom fields on the address partner record. Email de-duplication runs automatically: if two FieldAware contacts share the same email address, Odoo's wizard flags them for merge before insertion. Owner resolution matches FieldAware technician and customer email addresses to Odoo res.users and res.partner records respectively.
Migrate Jobs, Invoices, and Assets with chosen mapping paths
Job records are loaded as crm.lead Opportunity records using the job_number as name, status as stage_id, scheduled date as date_deadline, and total_amount as planned_revenue. Technician assignment and job line items are stored in custom fields on the Opportunity record. If Odoo Project is activated, job records are loaded as project.task with the customer partner as the project partner and line items populated on the task. Asset records are loaded as maintenance.equipment if Odoo Maintenance is installed; otherwise they are preserved as custom fields on the customer partner. Invoice records are loaded as account.move entries with line items; Odoo Accounting must be in a configured state before this batch runs.
Validate sample records and run delta-pickup cutover
We run a sample migration of 100–300 records covering the full entity range before committing the full dataset. Field-level validation compares source FieldAware values against the Odoo API response for each mapped field, flagging any transformation errors (date format mismatches, pick-list value gaps, truncated text). After validation sign-off, the full migration runs and a 24–48 hour delta-pickup window opens to capture any FieldAware records created or modified during the cutover. An audit log records every insert, update, and skip operation. One-click rollback reverts the Odoo database to its pre-migration state if reconciliation fails.
Platform deep dives
FieldAware by GPS Insight
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 FieldAware by GPS Insight 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
FieldAware by GPS Insight: Not publicly documented in the FieldAware REST API reference..
Data volume sensitivity
FieldAware by GPS Insight 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 FieldAware by GPS Insight to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your FieldAware by GPS Insight 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 FieldAware by GPS Insight
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.