CRM migration
Field-level mapping, validation, and rollback between Agencyzoom and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Agencyzoom
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Agencyzoom and Odoo CRM.
Complexity
BStandard
Timeline
5–10 days
Overview
AgencyZoom organizes insurance agency data around leads, customers, policies, service tickets, and lifecycle-stage pipelines — with automations and placeholders managing sales and service workflows. Odoo CRM represents the same domain using crm.lead (which covers both leads and opportunities), res.partner (which unifies contacts and companies), sale.order (for quotations), and crm.team for pipeline grouping. The migration challenge is translating AgencyZoom's pipeline stage model into Odoo's stage_id field on crm.lead, mapping policy references to custom fields on res.partner or crm.lead, and resolving AgencyZoom owner IDs to Odoo user_id records by email match. FlitStack AI sequences the migration so res.partner records land first (for contact-to-company lookups), then crm.lead records with stage_id assignments per pipeline, then activities and attachments. Service tickets require a decision on whether Odoo's helpdesk module is active — if not, they route to a service-category crm.lead type. Workflows, automations, and placeholder logic do not migrate and must be rebuilt using Odoo's Studio automation rules or ir.actions.server; we export your automation definitions as a rebuild reference.
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 Agencyzoom 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.
Agencyzoom
Lead
Odoo CRM
crm.lead
1:1AgencyZoom leads map 1:1 to Odoo crm.lead records with type='lead'. The lead's lifecycle_stage value maps to a custom pick-list field (Lifecycle_Stage__c) on crm.lead since Odoo has no native equivalent. Source stage names map to Odoo stage_id values using value mapping per pipeline.
Agencyzoom
Customer
Odoo CRM
res.partner
1:1AgencyZoom customers become Odoo res.partner records representing companies. If the customer has associated individual contacts, FlitStack generates a separate res.partner record for the primary contact and links it to the company via parent_id, with partner_type='contact' for individuals and partner_type='company' for the organizational record.
Agencyzoom
Contact (within Customer)
Odoo CRM
res.partner (child)
1:1AgencyZoom contact records nested under a customer become child res.partner entries linked to the parent company via parent_id. Email, phone, street, city, state, zip, and country fields populate on the child partner. Every child contact inherits the parent's company_id, preserving the organizational hierarchy in Odoo's partner structure.
Agencyzoom
Policy
Odoo CRM
Custom fields on res.partner
1:1AgencyZoom policy records have carrier name, policy number, premium amount, and status fields. These do not map to any native Odoo CRM object. FlitStack creates custom fields on res.partner — Policy_Carrier__c, Policy_Number__c, Policy_Premium__c, Policy_Status__c — to preserve policy data attached to each customer record.
Agencyzoom
Pipeline (Sales / Service / Onboarding)
Odoo CRM
crm.lead + crm.team + stage grouping
1:1AgencyZoom pipelines are not separate objects in Odoo — all pipeline data lives in crm.lead with a stage_id. We map each AgencyZoom pipeline to an Odoo crm.team (sales team) and assign stage records with pipeline-specific prefixes so the kanban view groups by team. Teams without Odoo helpdesk module configured merge into the default CRM pipeline.
Agencyzoom
Pipeline Stage
Odoo CRM
crm.stage
1:1Each AgencyZoom stage within a pipeline (e.g., 'New Lead', 'Quote Sent', 'Bound') maps to a corresponding crm.stage record. Stage display order, probability, and is_won flags are set in Odoo per stage. We preserve stage-entered timestamps as custom datetime fields (Stage_Entered_Date__c) on crm.lead for reporting continuity.
Agencyzoom
Service Ticket
Odoo CRM
helpdesk.ticket (or crm.lead)
1:manyIf Odoo helpdesk module is active, AgencyZoom service tickets map to helpdesk.ticket with priority, assigned group, and resolution status. If helpdesk is not active, service tickets map to crm.lead records with type='service' and a service_category custom field — your admin chooses the routing before migration runs.
Agencyzoom
Task
Odoo CRM
mail.message (or project.task)
1:1AgencyZoom tasks map to Odoo mail.message records attached to the parent crm.lead or res.partner. If the AgencyZoom task has a due date and assigned user, it becomes a mail.activity with type='todo' in Odoo's activity system. Original task status (completed/open) is preserved.
Agencyzoom
Note / Activity Log
Odoo CRM
mail.message
1:1AgencyZoom notes and activity log entries (call summaries, email threads, meeting notes) map to Odoo mail.message records linked to the parent record (crm.lead or res.partner). Original timestamps, authors, and message body text are preserved. Rich-text formatting is converted to Odoo's HTML format.
Agencyzoom
Attachment / File
Odoo CRM
ir.attachment
1:1AgencyZoom file attachments (policy documents, quotes, images) are downloaded from source storage and re-uploaded to Odoo as ir.attachment records linked to the corresponding crm.lead or res.partner. File size limits from Odoo's ir_attachment configuration apply (default 25MB per file). Inline images embedded in notes are extracted and stored as separate attachments.
Agencyzoom
Custom Field (user-defined)
Odoo CRM
ir.model.fields
1:1AgencyZoom custom fields (created under MyAgency > Manage Custom Fields) migrate as Odoo custom fields on the target model (crm.lead or res.partner). Field type mapping follows: text → char, number → float/integer, date → date, pick-list → selection. We create the field definition in Odoo via Settings > Technical > Models before importing data.
Agencyzoom
Owner / User
Odoo CRM
res.users
1:1AgencyZoom owner_id on leads and customers resolves to Odoo res.users by email address matching. Unmatched owner IDs are flagged before migration — your team either creates the Odoo user first or assigns their records to a fallback user. No crm.lead lands without a valid user_id in Odoo.
| Agencyzoom | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | crm.lead1:1 | Fully supported | |
| Customer | res.partner1:1 | Fully supported | |
| Contact (within Customer) | res.partner (child)1:1 | Fully supported | |
| Policy | Custom fields on res.partner1:1 | Fully supported | |
| Pipeline (Sales / Service / Onboarding) | crm.lead + crm.team + stage grouping1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Service Ticket | helpdesk.ticket (or crm.lead)1:many | Fully supported | |
| Task | mail.message (or project.task)1:1 | Fully supported | |
| Note / Activity Log | mail.message1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Custom Field (user-defined) | ir.model.fields1:1 | Fully supported | |
| Owner / User | res.users1: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.
Agencyzoom gotchas
API rate limit of 30 calls per minute constrains migration throughput
Lifecycle automations are not exposed via the public API
Integration account needs agency-owner permissions to see all data
Custom fields are per-agency and require manual cataloging before migration
Search and data integrity issues can surface silently in exported data
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 AgencyZoom data export and define custom field schema in Odoo
We export data from AgencyZoom via Settings > Data Export (CSV format) for contacts, leads, customers, pipelines, service tickets, and custom fields. Simultaneously, we review your AgencyZoom custom field definitions and create matching ir.model.fields in Odoo (via Settings > Technical > Models) for lifecycle_stage, policy fields, and any other user-defined properties. We also confirm whether the Odoo helpdesk module is active for service ticket routing, and we define the pipeline-to-stage value map for each AgencyZoom pipeline.
Resolve owner assignments and configure Odoo user matching
AgencyZoom owner_id values are matched to Odoo res.users records by email address. We run an email-matching report against your Odoo user list and flag any unmatched owners. Your admin either creates the missing Odoo user before migration or assigns a fallback user; no crm.lead migrates without a valid user_id. We also validate that Odoo crm.stage records exist for each mapped pipeline stage — missing stages are created with correct sequence, probability, and is_won flags.
Import res.partner records (customers and companies) before leads
Odoo requires parent records to exist before child records link via foreign key (company_id, parent_id). We import AgencyZoom company records first as res.partner with partner_type='company', then child contact records linked to the parent. Policy custom field values attach at this stage. The sequencing prevents orphaned contacts and ensures crm.lead records can reference a valid partner_id when they import.
Import crm.lead records with stage_id assignments and lifecycle_stage preservation
AgencyZoom leads are imported as crm.lead records using the pre-defined value mapping for stage_id, with lifecycle_stage preserved in the custom x_lifecycle_stage__c field. Owner assignment resolves via email match. For service-type records, we apply the service_category custom field or route to helpdesk.ticket depending on module activation. Original create dates and source system IDs are stored as custom fields for audit traceability.
Migrate activities, notes, tasks, and attachments with field-level diff
After base object migration, we import mail.message records (notes, email logs, call summaries), mail.activity records (tasks with due dates), and ir.attachment records (files). Each activity links to the parent crm.lead or res.partner via res_id and model. We run a field-level diff on a sample slice (typically 200–500 records) comparing source values against Odoo records to verify stage mapping, owner resolution, and lifecycle_stage preservation before committing the full run.
Execute delta-pickup window and deliver automation export for rebuild
Full migration commits to Odoo. A 24–48 hour delta-pickup window captures any AgencyZoom records created or modified during the cutover period — especially relevant for active sales teams. Audit log records every operation. After cutover, we deliver the automation reference document listing your AgencyZoom Lifecycle Automation rules, trigger conditions, and placeholder field names so your Odoo admin can rebuild workflows in Odoo Studio. One-click rollback is available if reconciliation identifies data integrity issues.
Platform deep dives
Agencyzoom
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 Agencyzoom 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
Agencyzoom: 30 calls/min (standard hours); 60 calls/min from 10PM CT to 4AM CT.
Data volume sensitivity
Agencyzoom 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 Agencyzoom to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Agencyzoom 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 Agencyzoom
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.