CRM migration
Field-level mapping, validation, and rollback between FranConnect and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
FranConnect
Source
Odoo CRM
Destination
Compatibility
6 of 13
objects map 1:1 between FranConnect and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from FranConnect to Odoo CRM is a franchise-specific data model migration into a general-purpose ERP-adjacent CRM. FranConnect organizes data around the franchise lifecycle: Leads, Units, Territories, and Royalty Manager records tied to franchisee agreements. Odoo CRM uses standard Contact, Account, and Project objects with no native franchise hierarchy. We resolve that structural gap during scoping by mapping FranConnect Units to Project records with custom fields for site address, owner, and territory; mapping Franchisees to Contacts with a Partner Role property; and mapping Royalty records to Odoo Accounting Invoices if the Odoo Accounting module is present. Drip campaigns, task checklists, and Site Visit workflows do not migrate as code; we deliver a written inventory for the customer's admin to rebuild in Odoo. The BI/Analytics module does not export as data and is not migrated. We use FranConnect's REST API with proactive token refresh for extraction, and Odoo's XML-RPC API for import with batch chunking and parent-record lookup resolution.
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 FranConnect 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.
FranConnect
Leads (Franchise Development)
Odoo CRM
CRM Lead
1:1FranConnect Leads map to Odoo CRM Lead records. The Lead status, source category, owner assignment, and associated drip campaign membership migrate as custom fields on the Lead. We extract drip campaign enrollment as a computed property (e.g., campaign_id and enrollment_date) stored in an Odoo Char or Selection field. Territory assignment from FranConnect maps to a custom field on the Lead. No native Odoo Lead field exists for drip campaign sequence step; we represent campaign state as text properties for the customer's admin to rebuild in Odoo Automated Actions post-migration.
FranConnect
Contacts
Odoo CRM
Contact (res.partner)
1:1FranConnect Contacts (both franchisor staff and franchisee representatives) map to Odoo res.partner records. Standard fields (name, email, phone, address) migrate directly. For franchisee representatives, we set Partner Type to Individual or Company as appropriate. Custom contact properties from FranConnect map to custom fields on res.partner using Odoo's ir.model.fields API. We resolve the country/state from FranConnect address fields to Odoo's country_id and state_id lookups using ISO country codes.
FranConnect
Units (Locations/Sites)
Odoo CRM
Project (project.project)
1:manyFranConnect Units represent franchise locations and have no direct Odoo CRM equivalent. We map Units to Project records (project.project) using a naming convention of Unit-[Unit Number]-[Location Name]. Each Project inherits the site address as the Project Address, the owner/franchisee as a Follower, and custom fields for unit_status, opening_date, and territory_id. If the customer requires unit-level reporting across a portfolio, we recommend a custom site model as a separate configuration; this is designed during the schema phase.
FranConnect
Franchisees
Odoo CRM
Contact (res.partner) with custom Role field
lossyFranConnect Franchisees are the individuals or entities operating units. We map Franchisee records to res.partner with a custom field franchisee_role__c (char or selection) storing the franchisee type (e.g., individual owner, corporate franchisee, master franchisee). Agreement dates, territory exclusivity flags, and ownership stakes migrate as additional custom fields on the partner record. Multi-unit franchisees get one res.partner record with a custom units_managed__c field listing associated Unit IDs.
FranConnect
Territories
Odoo CRM
Custom Configuration Table
lossyFranConnect Territories define geographic boundaries tied to franchise agreements and have no native Odoo equivalent. We map Territory records to a custom Odoo model (e.g., franchise.territory) with fields for territory_name, geographic_definition (text description or polygon JSON if available), exclusivity_flag (boolean), and associated_unit_ids (one2many to Project). Geographic coordinate data from FranConnect, if present, migrates as a text field for the customer's admin to integrate with a mapping tool if needed.
FranConnect
Tasks (Checklists)
Odoo CRM
Project Task (project.task)
1:manyFranConnect Tasks and checklists for opening procedures and compliance workflows map to project.task records linked to the corresponding Unit Project. Task groups become project.task records with a parent_id hierarchy for grouped checklists. Mandatory/optional flags and reminder schedules migrate as custom fields. We do not migrate active reminder triggers; these are represented as documentation for the customer's admin to rebuild using Odoo Planned Actions.
FranConnect
Site Visits
Odoo CRM
Project Task (project.task) or Custom Visit Model
lossyFranConnect Site Visit records (inspections, audits, compliance visits) map to project.task records with a visit_scheduled_date, completion_status, scoring_data, and response_analysis. If visit records carry structured audit data, we recommend a custom visit model during schema design so that scoring and response fields are typed correctly. We preserve the visit summary as a large text field for reporting continuity.
FranConnect
Royalty Manager Records
Odoo CRM
Account Invoice (account.move) or Custom Financial Model
lossyFranConnect Royalty Manager stores invoices, payments, and royalty calculations tied to Units and Franchisee agreements. Migration requires Odoo Accounting to be installed. If Odoo Accounting is present, Royalty invoices map to account.move records (type=out_invoice) with the franchisee partner as the partner_id and the Unit/Project referenced in an invoice line description. If Odoo Accounting is not in scope, we migrate Royalty records as a custom financial model for the customer's admin to import into their accounting system of record. We flag this decision during discovery.
FranConnect
Training Records
Odoo CRM
Custom Training Enrollment Model
1:1FranConnect Training module tracks learning completion and certifications for franchisee employees. We migrate training enrollment records and completion status to a custom enrollment model. Quiz scores and course-specific metadata do not have a native Odoo equivalent and migrate as JSON text or are excluded based on customer priority during scoping. LMS-specific course content (video, SCORM) does not migrate.
FranConnect
Documents
Odoo CRM
IR Attachment (ir.attachment)
1:1FranConnect stores documents linked to Leads, Units, Franchisees, and Tasks. We extract document metadata (filename, mime_type, creation_date, URL) and migrate as ir.attachment records linked via res_model and res_id to the corresponding migrated record. File binary transfers are handled via FranConnect's document export API, and files are attached to the Odoo record using ir.attachment's datas field (base64-encoded) or stored as external URLs.
FranConnect
Support Tickets
Odoo CRM
Helpdesk Ticket (helpdesk.ticket) or CRM Lead
lossyFranConnect Trouble Tickets tied to franchisee users map to Odoo Helpdesk Ticket if the customer installs the Odoo Helpdesk app. Ticket status, department assignment, and conversations migrate to the helpdesk.ticket model. If Helpdesk is not installed, we map Support Tickets to CRM Leads or a custom ticket model. Conversation threads migrate as message records on the ticket.
FranConnect
Owner
Odoo CRM
User (res.users)
1:1FranConnect Owners (franchisor staff managing leads, units, and operations) map to Odoo res.users records. We resolve owners by email match against the Odoo destination User table. Any FranConnect Owner without a matching Odoo User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Inactive FranConnect owners map to inactive Odoo Users to preserve assignment history.
FranConnect
Analytics and Reports (BI)
Odoo CRM
Not Migrated
1:1FranConnect's BI module generates platform-rendered visualizations and franchise performance dashboards. These are not exportable as data. We migrate the underlying data (Lead counts, Unit status, Royalty totals, Training completion rates) as custom fields on the migrated objects so that the customer's admin can rebuild equivalent reports in Odoo Reporting or a BI tool of choice. The dashboards themselves are not migrated.
| FranConnect | Odoo CRM | Compatibility | |
|---|---|---|---|
| Leads (Franchise Development) | CRM Lead1:1 | Fully supported | |
| Contacts | Contact (res.partner)1:1 | Fully supported | |
| Units (Locations/Sites) | Project (project.project)1:many | Mapping required | |
| Franchisees | Contact (res.partner) with custom Role fieldlossy | Mapping required | |
| Territories | Custom Configuration Tablelossy | Mapping required | |
| Tasks (Checklists) | Project Task (project.task)1:many | Mapping required | |
| Site Visits | Project Task (project.task) or Custom Visit Modellossy | Mapping required | |
| Royalty Manager Records | Account Invoice (account.move) or Custom Financial Modellossy | Mapping required | |
| Training Records | Custom Training Enrollment Model1:1 | Mapping required | |
| Documents | IR Attachment (ir.attachment)1:1 | Mapping required | |
| Support Tickets | Helpdesk Ticket (helpdesk.ticket) or CRM Leadlossy | Mapping required | |
| Owner | User (res.users)1:1 | Fully supported | |
| Analytics and Reports (BI) | Not Migrated1:1 | Not 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.
FranConnect gotchas
API access token expires in 12 hours with 30-day refresh window
Rate limit of 73,000 requests per hour per tenant and user
CSV import enforces strict date and character formatting
Not all modules have documented REST API endpoints
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
Discovery and franchise schema mapping
We audit the source FranConnect tenant across modules (Franchise Development, Location Management, Operations, Financials), extracting the object inventory, record counts, custom field definitions, and API endpoint availability per module. We pair this with an Odoo environment assessment to confirm which Odoo apps are installed (CRM, Project, Accounting, Helpdesk) and the version (Odoo Online, On-Premise, Odoo.sh). The discovery output is a written migration scope specifying which FranConnect objects map to which Odoo models, which require custom field definitions, and which require manual CSV export versus API extraction.
Odoo schema design and custom field module build
We design the destination schema in Odoo. This includes provisioning custom fields on res.partner (franchisee_role__c, units_managed__c), building a custom Territory model (franchise.territory) with geographic fields, configuring Project records for Units, and defining the Royalty financial mapping or custom model. If Odoo Accounting is present, we design the chart of accounts mapping for Royalty invoices. We deploy custom fields and models via a migration module (Python XML) into a staging Odoo database first for validation. The customer reviews the schema before we proceed to extraction.
Staging migration and reconciliation
We run a full migration into the staging Odoo environment using production-like data volume. The customer's franchise operations lead reconciles record counts (Leads in, Contacts in, Units/Projects in, Territory records in, Royalty records in), spot-checks 25-50 records against FranConnect source data, and validates that custom field values appear correctly on the Odoo forms. Any mapping corrections happen in staging. We do not move to production until the customer signs off on the staging results.
Owner and user provisioning
We extract every distinct FranConnect Owner referenced on Leads, Units, Tasks, Site Visits, and Royalty records and match by email against the Odoo destination's res.users table. Owners without a matching Odoo User go to a reconciliation queue. The customer's Odoo admin provisions any missing Users (active or inactive) before production migration resumes. Owner resolution is a prerequisite for record import because many Odoo default views filter by responsible User.
Production migration in dependency order
We run production migration in record-dependency order: Territory configuration records first (no dependencies), then Contacts and Franchisees (res.partner), then Leads (CRM Lead with owner and territory resolved), then Projects (from Units), then Tasks and Site Visits (linked to Projects), then Royalty records (linked to franchisee partner and Unit/Project), then Documents (ir.attachment linked to parent records). Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC API with batch chunking for large record sets and exponential backoff on rate-limit responses.
Cutover, validation, and automation rebuild handoff
We freeze FranConnect writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver the campaign and drip automation inventory document, the custom field schema documentation, and the Odoo module file for custom fields to the customer's admin team. We support a one-week hypercare window for reconciliation issues. We do not rebuild FranConnect drip campaigns, task checklists, or automated reminders as Odoo Automated Actions inside the migration scope; that is a separate configuration engagement.
Platform deep dives
FranConnect
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between FranConnect and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across FranConnect and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between FranConnect 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
FranConnect: Not publicly documented.
Data volume sensitivity
FranConnect exposes a bulk API — large-volume migrations stream efficiently.
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 FranConnect to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your FranConnect 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 FranConnect
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.