CRM migration
Field-level mapping, validation, and rollback between Agent Legend and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Agent Legend
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Agent Legend and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Teams migrate from Agent Legend to Odoo CRM to escape the per-contact consumption pricing model that inflates costs as contact volumes grow, and to consolidate CRM operations into a full ERP suite. Agent Legend serves insurance agents, real estate professionals, and mortgage brokers well as an AI-powered standalone CRM with Lily lead scoring and campaign sequencing. Odoo CRM is one module inside Odoo's open-source all-in-one business suite — covering CRM, sales, accounting, inventory, and project management with a single PostgreSQL database and per-user pricing. FlitStack AI extracts data from Agent Legend via API or structured exports, audits the schema for Lily scores, campaign membership data, and custom fields, then maps contacts to Odoo res.partner, campaigns to crm.campaign, activities to crm.activity, and Lily AI scores to custom float fields on crm.lead. Automations, email sequences, and campaign builder logic do not transfer — we export workflow definitions as a rebuild reference for Odoo Action Rules and Server Actions. The migration runs against Odoo using XML-RPC API with full CRUD support and transactional rollback, preserving original create_date and activity timestamps throughout the run.
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 Agent Legend 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.
Agent Legend
Contact
Odoo CRM
res.partner
1:1Agent Legend contacts map directly to Odoo res.partner records. Odoo distinguishes individuals from companies via the is_company flag — contacts without a company association in Agent Legend land as individual partner records. We set is_company=False and preserve the Agent Legend contact name split across name, firstname, and lastname fields. Partner addresses, phone numbers, and email map 1:1 to Odoo partner contact fields.
Agent Legend
Contact (Lily score)
Odoo CRM
crm.lead (custom float field)
1:1Agent Legend Lily AI lead scores (0–100 scale using 1,600+ third-party data points) have no native Odoo equivalent. FlitStack creates a float field on crm.lead called agent_legend_lily_score__c, preserving the original numeric score. Odoo admins can display this field in list views or integrate it into Odoo's built-in probability-based lead scoring for combined ranking.
Agent Legend
Campaign
Odoo CRM
crm.campaign
1:1Agent Legend campaigns map to Odoo crm.campaign records, preserving campaign name, description, start and end dates. Odoo campaigns support utm.source tracking, email marketing integration, and child campaigns. Campaign membership — which Agent Legend tracks as a per-contact property — maps to a many2many relation on the contact's partner record linking to crm.campaign.
Agent Legend
Campaign Membership
Odoo CRM
res.partner (many2many crm.campaign)
1:1Agent Legend tracks which campaigns a contact belongs to as a property on the contact record. Odoo has no per-contact campaign membership property — instead, we create a many2many relation on res.partner linking to crm.campaign. Each Agent Legend campaign a contact belongs to becomes a link in this relation. Odoo campaign reporting then aggregates partner records by campaign.
Agent Legend
Lead Source
Odoo CRM
utm.source / tag
1:1Agent Legend lead sources (Inbound Call, Referral, Zillow, Realtor.com, etc.) map to Odoo utm.source records when Odoo Marketing is installed. If only CRM is installed, we create tags on res.partner for each unique source value. We build a value map during the audit phase mapping each Agent Legend source string to its corresponding Odoo utm.source or tag name.
Agent Legend
Activity (Call)
Odoo CRM
crm.activity (type=call)
1:1Agent Legend logged calls map to Odoo crm.activity records with activity_type_id set to the Call activity type. Odoo stores call notes in the activity's note field, the contact as res.partner, and the responsible user as res.users — owner resolution handled via email match. Original call date and duration preserved in activity_date_deadline and Odoo's duration field.
Agent Legend
Activity (Email)
Odoo CRM
crm.activity (type=email)
1:1Agent Legend email records map to Odoo crm.activity with activity_type_id set to Email. Subject, body content, and timestamp migrate to the activity record. Odoo's mail.message threading attaches to the partner record. Original send date preserved as activity_date_deadline or a custom Created_Date__c field if the email timestamp needs to survive past the deadline field.
Agent Legend
Activity (Meeting)
Odoo CRM
calendar.event
1:1Agent Legend scheduled meetings map to Odoo calendar.event records. Event subject, start_datetime, stop_datetime, and location migrate directly. The meeting is linked to the relevant res.partner records as attendees. Owner attribution preserved via res.users match. If Odoo Calendar module is not installed, meetings fall back to crm.activity with a Meeting activity type.
Agent Legend
Note
Odoo CRM
Note (ir_attachment)
1:1Agent Legend notes map to Odoo ir_attachment records with res_model=res.partner and res_id pointing to the partner record. Rich-text formatting from Agent Legend converts to HTML within Odoo's note field. Original create date and author preserved as ir_attachment create_date and create_uid fields. All attachments on contact, company, and deal records migrate as ir_attachment with the appropriate res_model and res_id values.
Agent Legend
Custom Property
Odoo CRM
Custom field on target model
1:1Agent Legend custom properties (fields your team has configured beyond standard contact fields) migrate to Odoo custom fields. In Odoo, custom fields are created via Settings > Technical > Database Structure > Models, selecting the target model (res.partner, crm.lead, etc.) and field type. Agent Legend selection fields map to Odoo selection fields; multi-selection fields require a custom module using x_model_fields since Odoo does not natively support many2many tags without custom development.
Agent Legend
Company
Odoo CRM
res.partner (is_company=True)
1:1Agent Legend company records map to Odoo res.partner with is_company=True, distinguishing them from individual contacts. Company name, website, industry classification, employee count, and annual revenue map to their Odoo counterparts. Agent Legend contacts linked to a company receive Odoo's parent_id pointing to the company partner record, establishing the contact hierarchy Odoo expects.
Agent Legend
Deal / Opportunity
Odoo CRM
crm.lead (type=opportunity)
1:1Agent Legend deals map to Odoo crm.lead records with type=opportunity. Deal name, expected revenue (amount), stage, probability, expected close date, and responsible user migrate to Odoo's crm.lead fields. Agent Legend pipeline stages map to crm.stage records within each crm.team — stage IDs must be recorded during the Odoo setup phase before migration, as stage assignment is by database ID rather than name.
| Agent Legend | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Contact (Lily score) | crm.lead (custom float field)1:1 | Fully supported | |
| Campaign | crm.campaign1:1 | Fully supported | |
| Campaign Membership | res.partner (many2many crm.campaign)1:1 | Fully supported | |
| Lead Source | utm.source / tag1:1 | Fully supported | |
| Activity (Call) | crm.activity (type=call)1:1 | Fully supported | |
| Activity (Email) | crm.activity (type=email)1:1 | Fully supported | |
| Activity (Meeting) | calendar.event1:1 | Fully supported | |
| Note | Note (ir_attachment)1:1 | Fully supported | |
| Custom Property | Custom field on target model1:1 | Fully supported | |
| Company | res.partner (is_company=True)1:1 | Fully supported | |
| Deal / Opportunity | crm.lead (type=opportunity)1: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.
Agent Legend gotchas
Lily AI scores do not export from Agent Legend
CRM integration tokens and OAuth connections do not transfer
Contact-level per-message pricing creates billing risk on high-volume imports
Custom fields are not fully documented in the public API
Letter templates use proprietary merge tag syntax
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 audit Agent Legend data via API
We connect to Agent Legend using your API credentials or structured platform exports and pull a complete data inventory: all contacts with Lily scores and campaign membership, companies, deals, activity logs, notes, attachments, and custom property definitions. The audit phase identifies every Agent Legend-specific field requiring Odoo custom field creation, maps campaign names to Odoo crm.campaign IDs, and surfaces any data-quality issues — duplicate records, missing required fields, or contacts without email — before mapping logic is written.
Stand up Odoo CRM schema and custom fields
Before data moves, we install the Odoo CRM module and create any custom fields required for Agent Legend properties: agent_legend_lily_score__c on crm.lead as a float field, campaign_ids many2many on res.partner linking to crm.campaign, and custom Char fields for Agent Legend property values that don't fit Odoo's standard field types. We also create crm.stage records matching your Agent Legend pipeline stage names and record their database IDs — stage_id assignment by integer ID is required before deals can migrate. API access is verified during this phase; Odoo Custom plan must be active for XML-RPC connectivity.
Map Agent Legend fields to Odoo fields and resolve owners by email
We build the complete field map: every Agent Legend contact, company, deal, activity, and custom property mapped to its Odoo equivalent — direct fields, transformed fields, and custom fields. Owner resolution matches Agent Legend owner email addresses to Odoo res.users records. Any owners without an Odoo user account are flagged for team action — either create the user in Odoo first or assign to a fallback owner before migration. Custom property selection fields map value-by-value to Odoo selection fields; multi-selection Agent Legend properties are flagged for custom module development if many2many tags are required.
Run sample migration with field-level diff
A representative slice of 100–500 records migrates first: contacts spanning different campaign memberships, companies with associated contacts, deals across all pipeline stages, and a sample of activities. We generate a field-level diff comparing source Agent Legend values against destination Odoo records — verifying Lily score preservation, campaign membership links, stage assignment by ID, owner resolution, and activity timestamp fidelity. You review the diff and approve before the full run commits. Any mapping adjustments are made at this stage.
Full migration run with delta-pickup and rollback
The full migration runs in dependency order: companies first (to resolve parent_id), then contacts with user_id assignment and campaign_ids links, then deals with stage_id mapped by database ID and owner resolution, then activity logs and attachments. All records preserve original create dates, activity timestamps, and owner attribution. A 24–48-hour delta-pickup window runs concurrently — any records created or modified in Agent Legend during the cutover are captured and merged before final reconciliation. The entire operation is transactional; one-click rollback reverts Odoo to its pre-migration state if validation fails.
Platform deep dives
Agent Legend
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Agent Legend and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Agent Legend and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Agent Legend 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
Agent Legend: Not publicly documented.
Data volume sensitivity
Agent Legend 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 Agent Legend to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Agent Legend 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 Agent Legend
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.