CRM migration
Field-level mapping, validation, and rollback between Field2Base and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Field2Base
Source
Odoo CRM
Destination
Compatibility
13 of 13
objects map 1:1 between Field2Base and Odoo CRM.
Complexity
BStandard
Timeline
2–5 days
Overview
Field2Base is a field service automation platform built around form templates, submitted records, and mobile workers. Its data model has no native CRM concept — form submissions store raw field data with no inherent distinction between a prospect inquiry and a completed service record. Odoo CRM structures everything around res.partner (contacts/companies), crm.lead (prospect pipeline), and crm.stage (pipeline stages), with a relational model where every record belongs to a partner and moves through stages. The migration maps Field2Base submitted forms to Odoo crm.lead records, Field2Base users to res.partner records, and Field2Base form-region fields to Odoo custom fields on crm.lead. GPS coordinates, timestamps, approval status, and file attachments are all preserved as custom fields and re-uploaded to Odoo attachments. Workflows, integration connectors (DIM/EDM), and form template logic must be rebuilt in Odoo using FlitStack's exported definitions as a reference. We run a delta-pickup window during cutover to capture any new submissions made during the transition window.
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 Field2Base 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.
Field2Base
User (Field2Base Admin/Mobile Worker)
Odoo CRM
res.partner
1:1Field2Base users (admin portal users and mobile workers) map directly to Odoo res.partner records. Email addresses serve as the unique identifier for matching. Mobile worker role flags (is_mobile_worker__c) are stored as a boolean custom field on res.partner. Field2Base does not have a separate contact/company split, so every user lands as a partner record.
Field2Base
Form Template
Odoo CRM
crm.stage + ir.model.data
1:1Field2Base form templates have no direct Odoo equivalent. We map each distinct form template to an Odoo crm.stage (pipeline stage) and store the original template name as Form_Template_Name__c on crm.lead. If there are more than 15 templates, we recommend grouping by category and creating one stage per category rather than one per template to avoid Odoo pipeline clutter.
Field2Base
Form Submission
Odoo CRM
crm.lead
1:1Each Field2Base submitted form becomes one Odoo crm.lead record. The submission's JSON payload is parsed, and every region (form field) becomes a mapped field on crm.lead. Submissions are deduplicated by Field2Base submission ID stored as Source_Submission_ID__c on crm.lead. Submissions submitted by the same user that have identical region values within a 24-hour window are flagged as potential duplicates for manual review.
Field2Base
Region — Text (single-line)
Odoo CRM
crm.lead — custom char field
1:1Single-line text regions from Field2Base map to Odoo custom char fields on crm.lead. Field naming follows Odoo's snake_case convention: a Field2Base region named 'Customer Notes' becomes customer_notes__c. Character limits are preserved from the Field2Base region definition — Odoo char fields have a configurable size limit that must match or exceed the source.
Field2Base
Region — Numeric
Odoo CRM
crm.lead — custom float/integer field
1:1Numeric regions in Field2Base (integer or decimal) map to Odoo float or integer fields on crm.lead depending on the source region type. Units of measurement from the Field2Base region definition (e.g., 'gallons', ' PSI') are stored as a separate custom char field for display context.
Field2Base
Region — Dropdown / Multi-Select
Odoo CRM
crm.lead — custom selection field
1:1Field2Base dropdown regions map to Odoo selection fields on crm.lead with value-by-value mapping of each pick-list option. The selection list in Odoo is defined as a static selection list; the source values from Field2Base are enumerated exactly as they appear in the form template. If values in Field2Base were changed after some submissions were made, the migration records the original value and flags mismatches.
Field2Base
Region — Camera (Photo)
Odoo CRM
ir.attachment + crm.lead custom field
1:1Photos captured in Field2Base camera regions are downloaded from Field2Base blob storage and re-uploaded as Odoo ir.attachment records linked to the corresponding crm.lead via res_model='crm.lead' and res_id=<lead_id>. A custom char field Photo_Count__c on crm.lead tracks how many photos were attached for quick reference without loading attachments.
Field2Base
Region — Signature
Odoo CRM
ir.attachment + crm.lead custom field
1:1Signature fields captured in Field2Base are stored as PNG images. These are re-uploaded as Odoo ir.attachment records with the same parent linking to crm.lead. A boolean custom field Signature_Captured__c on crm.lead indicates whether a signature was present in the original submission.
Field2Base
Region — GPS Coordinates
Odoo CRM
crm.lead — custom float fields
1:1GPS data captured by Field2Base (latitude and longitude) maps to two custom float fields on crm.lead: Submission_Latitude__c and Submission_Longitude__c. Odoo does not have a native geolocation field type, so this is handled as paired float fields. The original GPS capture timestamp from Field2Base is stored as Submission_GPS_Timestamp__c for audit continuity.
Field2Base
Form Workflow Approval
Odoo CRM
crm.stage + custom fields
1:1Field2Base Workflow approval status (pending, approved, rejected) maps to a combination of crm.stage and custom status fields on crm.lead. If the workflow has multi-step approvals, each approval step becomes a custom char field (Approval_Step_1__c, Approval_Step_2__c) storing the approver's name and timestamp. Odoo's native stage model does not support multi-step approvals natively without Odoo Studio, so the migration surfaces the full approval history as custom fields.
Field2Base
Form Submission Timestamp
Odoo CRM
crm.lead — create_date + Submission_Datetime__c
1:1The Field2Base submission timestamp (when the form was originally submitted, not when it synced) maps to a custom datetime field Submission_Datetime__c on crm.lead. Odoo's native create_date is set at migration time; the original submission datetime is preserved separately for reporting continuity. If the submission was captured offline, the local device timestamp is preserved in Offline_Capture_Timestamp__c.
Field2Base
DIM / EDM Integration Connector
Odoo CRM
External API integration (to be rebuilt)
1:1Field2Base Data Integration Module (DIM) and Enterprise Dispatch Module (EDM) connections — whether ODBC, OLEDB, CSV, XML, API, or Web Services — do not have an Odoo equivalent. FlitStack exports the DIM/EDM connection definitions and mapping configurations as a JSON reference document. Rebuilt Odoo integrations must use Odoo's External API (XML-RPC or jsonrpc) or a middleware connector; FlitStack does not migrate the live connection credentials.
Field2Base
Submission — No Linked Email Address
Odoo CRM
crm.lead — anonymous lead
1:1Some Field2Base form submissions may not include an email address for the submitter — particularly for field inspection forms filled out by third parties. These submissions become Odoo crm.lead records with partner_id set to False (anonymous lead). A custom boolean field No_Email_Flag__c is set to True for these records, and a note is added to the lead description recommending manual partner linking if the contact's email becomes known.
| Field2Base | Odoo CRM | Compatibility | |
|---|---|---|---|
| User (Field2Base Admin/Mobile Worker) | res.partner1:1 | Fully supported | |
| Form Template | crm.stage + ir.model.data1:1 | Fully supported | |
| Form Submission | crm.lead1:1 | Fully supported | |
| Region — Text (single-line) | crm.lead — custom char field1:1 | Fully supported | |
| Region — Numeric | crm.lead — custom float/integer field1:1 | Fully supported | |
| Region — Dropdown / Multi-Select | crm.lead — custom selection field1:1 | Fully supported | |
| Region — Camera (Photo) | ir.attachment + crm.lead custom field1:1 | Fully supported | |
| Region — Signature | ir.attachment + crm.lead custom field1:1 | Fully supported | |
| Region — GPS Coordinates | crm.lead — custom float fields1:1 | Fully supported | |
| Form Workflow Approval | crm.stage + custom fields1:1 | Fully supported | |
| Form Submission Timestamp | crm.lead — create_date + Submission_Datetime__c1:1 | Fully supported | |
| DIM / EDM Integration Connector | External API integration (to be rebuilt)1:1 | Fully supported | |
| Submission — No Linked Email Address | crm.lead — anonymous lead1: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.
Field2Base gotchas
Offline draft data loss risk at migration cutover
Integration capabilities are tier-gated
API rate limits not publicly documented
Custom Regions require manual field mapping
Submitted form versioning not tracked in exports
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
Extract and profile Field2Base data and form template schema
FlitStack connects to Field2Base via API using scoped read access to extract all submitted form records, user accounts, form template definitions (including all custom region names, types, pick-list values, and validation rules), attachment metadata, and workflow configurations. We produce a data profiling report showing record counts per template, attachment volume, submission datetime range, and the count of submissions without email addresses. This report drives the custom field creation manifest for Odoo and surfaces the anonymous-lead volume before migration day.
Create Odoo CRM custom fields and pipeline stages
FlitStack generates a custom field creation manifest for Odoo based on the Field2Base form template audit. Your Odoo admin creates the custom fields on crm.lead (char, float, integer, selection, datetime) and any required custom fields on res.partner using the manifest. We also map each distinct Field2Base form template to an Odoo crm.stage entry in the pipeline — if there are more templates than practical stages, we group by template category. The Odoo schema must be fully set up before step 3 because Odoo rejects data writes to non-existent custom fields.
Deduplicate submitters and pre-create partner records
Field2Base users and submission submitters are processed for deduplication by email address. Where the same email appears across multiple submissions, one res.partner record is created and linked to all corresponding crm.lead records. Submissions where no email address exists are flagged with No_Email_Flag__c and queued for manual review post-migration. Submitter-to-Odoo-user resolution is handled by email match against Odoo res.users for the user_id field on crm.lead; unmatched users default to the admin user and are flagged for reassignment.
Run a sample migration with field-level verification
A representative sample of 100–300 submissions spanning multiple form templates migrates first. FlitStack generates a field-level diff comparing source Field2Base values against the resulting Odoo crm.lead field values and ir.attachment records. You verify GPS coordinates, custom field population, workflow status mapping, photo re-upload, and anonymous-lead flagging. Any field mapping errors are corrected and the manifest updated before the full migration run. Approval chain mapping is spot-checked for multi-step workflows.
Execute full migration with delta-pickup cutover window
The full migration runs against Odoo CRM using the verified mapping. A delta-pickup window (typically 24–48 hours) is opened at the point of cutover: any new Field2Base submissions created during the migration run are captured and applied as updates or new crm.lead records. FlitStack maintains an audit log of every record created, updated, or skipped with reason codes. One-click rollback reverts all Odoo changes if reconciliation fails. After the migration window closes, the Field2Base integration credentials are revoked.
Post-migration validation and anonymous-lead cleanup
FlitStack delivers a reconciliation report: total submissions migrated vs. total Field2Base records, crm.lead count by stage, attachment count re-uploaded, and count of anonymous leads (No_Email_Flag__c = True). Your team reviews and links anonymous leads to res.partner records using the provided manual-link worksheet. DIM/EDM integration definitions are handed off as a JSON reference document. FlitStack provides 30 days of post-migration support to address any data discrepancies discovered during normal Odoo CRM usage.
Platform deep dives
Field2Base
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Field2Base and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Field2Base and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Field2Base 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
Field2Base: Not publicly documented — we default to 10 req/s and throttle based on 429 responses.
Data volume sensitivity
Field2Base 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 Field2Base to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Field2Base 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 Field2Base
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.