CRM migration
Field-level mapping, validation, and rollback between Referrizer and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Referrizer
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Referrizer and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Referrizer and Odoo CRM serve different business sizes and functional scopes, which is the core driver of this migration. Referrizer bundles referral marketing, SMS, loyalty, and reputation automation into a single subscription for small multi-location service businesses. Odoo CRM is the CRM module of a modular open-source ERP that scales from free Community to Enterprise, making it the destination of choice when Referrizer customers outgrow marketing automation and need integrated inventory, accounting, or project management. The structural difference is that Referrizer stores loyalty points as contact properties while Odoo has no native loyalty object, so we remap these as custom number fields on the Partner record during transformation. We also handle the multi-location scoping that Referrizer requires to prevent cross-contamination, the Smart Inbox gap that cannot be migrated via API, and the Campaign-to-CRM-Lead mapping that preserves referral and offer associations. Workflows, review request automations, and loyalty program rules do not migrate as code; we deliver a written inventory for the customer's admin to rebuild in Odoo Studio or via the Odoo Apps store.
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 Referrizer 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.
Referrizer
Contact
Odoo CRM
Partner (res.partner)
1:1Referrizer Contacts map directly to Odoo res.partner records. The contact name, phone, email, and address fields translate to Odoo's name, phone, email, and street/city/country fields. Custom field properties on the Referrizer contact enumerate during GET /contacts and get created as custom fields on res.partner before migration. Labels from Referrizer become Odoo Tags attached via partner_category. We scope extraction by location_id to prevent cross-location contamination and validate contact counts per location against the Referrizer dashboard before transformation.
Referrizer
Pipeline
Odoo CRM
CRM Pipeline with Stages
lossyReferrizer Pipeline stages map to Odoo crm.lead stages within a single Sales Team. Each Referrizer stage name becomes an Odoo stage with a sequence number and probability percentage matching the Referrizer stage order. Odoo stages are managed via Settings > CRM > Stages and can include lost/won flags. If Referrizer has multiple pipelines (multi-stage configurations), we create separate CRM Teams in Odoo and assign stages per team.
Referrizer
Lead
Odoo CRM
Lead (crm.lead)
1:1Referrizer leads in the pipeline map to Odoo crm.lead records with type='lead'. The lead status, source, and assigned owner transfer to Odoo's crm_lead fields. Odoo's crm.lead model supports a stage_id pointing to a stage in the pipeline. We resolve Referrizer's hubspot_owner_id or owner email to an Odoo res.users record by email match before inserting the lead.
Referrizer
Campaign
Odoo CRM
CRM Lead or Tag
1:1Referrizer Campaigns (Regular and Automated modes) map to Odoo crm.lead records tagged with the campaign name, or to a custom campaign model if the customer has installed the Odoo CRM Campaigns module. Campaign type and status migrate as custom fields. Contact associations within the campaign transfer as tag assignments on the Partner record. Automated campaign reentry rules and trigger intervals do not migrate; we document the campaign configuration in the automation inventory for the admin to rebuild in Odoo.
Referrizer
Offer / Referral Code
Odoo CRM
Product or Custom Field on Partner
1:1Referrizer offer codes and referral link associations map to Odoo as custom Char fields on res.partner (referral_code, offer_code) or as a Product record with a promotional price if the offer drives a product discount. Referral reward structures (point value per referral) migrate as custom fields documenting the reward logic. We do not migrate referral relationship graphs as relational data unless the destination supports a custom referral object, which most Odoo CRM configurations do not.
Referrizer
Loyalty Points
Odoo CRM
Custom Number Field on Partner
1:1Referrizer loyalty point balances are stored as numeric contact properties, not a distinct object. We extract these during contact enumeration, separate them from standard contact fields, and create a custom float or integer field loyalty_points on res.partner before migration. The field name is configurable during scoping. Point balance history (transactions) does not migrate as a separate table unless the customer has a custom loyalty module installed in Odoo.
Referrizer
Review Request
Odoo CRM
CRM Lead Note or Custom Activity
1:1Referrizer review request history (which contacts received requests, when, and to which platform) is stored as activity on the contact record. We export this as a formatted note on the Odoo res.partner with review_request_date and review_platform fields. Automated review request triggers (the automation behind the campaign) do not migrate; we document the review request campaign in the automation inventory for the admin to rebuild using Odoo Email Marketing or a third-party review integration app.
Referrizer
Label / Segment
Odoo CRM
Partner Category (Tag)
1:1Referrizer contact labels map to Odoo partner_category records attached to res.partner via the category_id many2many field. Label names become category names. Multi-label contacts receive multiple Odoo tags. If the label count is large (over 200 distinct labels), we discuss with the customer whether to consolidate into a smaller tag set or maintain the full label taxonomy as Odoo tags.
Referrizer
Activity / Engagement Feed
Odoo CRM
CRM Activity (mail.message, crm.activity)
1:1Referrizer contact activity feed events (UTM tracking, campaign opens, link clicks) export as Odoo mail.message records linked to the res.partner via model=res.partner and res_id pointing to the partner ID. Call, meeting, and task engagements map to Odoo crm.activity records. Email engagements map to mail.message with email=True. The activity timeline ordering is preserved using the original Referrizer timestamp as the message date. We do not migrate Smart Inbox conversational threads because Referrizer exposes no API endpoint for them.
Referrizer
User / Team Member
Odoo CRM
User (res.users)
1:1Referrizer team members export by email and name. We match by email against Odoo res.users. Owners assigned to Contacts, Leads, and Deals resolve to the matched Odoo user ID during import. Any Referrizer owner without a matching Odoo user goes to a reconciliation queue for the admin to provision before record import resumes. Role-based permission structures in Referrizer do not map directly to Odoo's access rights model and are documented separately.
Referrizer
Location
Odoo CRM
Company (res.company) or Partner Division
1:1Referrizer multi-location accounts map to Odoo res.company records (if the customer uses Odoo multi-company) or to a custom division field on res.partner if they prefer a single-company structure. We scope extraction by Referrizer location_id during the extract phase and validate that contact counts per location match the Referrizer dashboard totals before loading. Cross-location contact assignment during migration is prevented by enforcing the location filter during all extraction queries.
Referrizer
Custom Field Schema
Odoo CRM
Custom Field on res.partner or crm.lead
lossyReferrizer custom fields are contact-level key-value properties enumerated via GET /contacts before migration. We inspect all custom field names and types (string, number, date, checkbox) and pre-create matching Odoo custom fields on res.partner using Odoo Studio or direct XML definition. Odoo requires developer mode to create fields via the UI; we handle the XML-based field creation in the migration schema phase. Fields that have no Odoo equivalent (e.g., complex JSON properties) are stored as Char fields with the JSON stringified.
| Referrizer | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Partner (res.partner)1:1 | Fully supported | |
| Pipeline | CRM Pipeline with Stageslossy | Fully supported | |
| Lead | Lead (crm.lead)1:1 | Fully supported | |
| Campaign | CRM Lead or Tag1:1 | Fully supported | |
| Offer / Referral Code | Product or Custom Field on Partner1:1 | Fully supported | |
| Loyalty Points | Custom Number Field on Partner1:1 | Fully supported | |
| Review Request | CRM Lead Note or Custom Activity1:1 | Fully supported | |
| Label / Segment | Partner Category (Tag)1:1 | Fully supported | |
| Activity / Engagement Feed | CRM Activity (mail.message, crm.activity)1:1 | Fully supported | |
| User / Team Member | User (res.users)1:1 | Fully supported | |
| Location | Company (res.company) or Partner Division1:1 | Fully supported | |
| Custom Field Schema | Custom Field on res.partner or crm.leadlossy | 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.
Referrizer gotchas
No bulk export API — migration relies on Zapier or CSV
Smart Inbox conversations are not accessible via API
Loyalty points stored as contact properties, not a distinct object
Rate limits not publicly documented
Multi-location scoping required to avoid cross-contamination
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 scoping
We audit the Referrizer portal across contacts (total count and per-location breakdown), custom fields, pipeline stages, active campaigns, loyalty point balances, team members, and locations. We extract via the paginated API (100 records per page) and confirm with the customer whether Smart Inbox data has been manually exported. We pair this with a review of the target Odoo edition (Community or Enterprise), existing Odoo setup if any, and the Odoo apps planned for installation. The discovery output is a written migration scope with record counts per object, a list of custom fields to pre-create in Odoo, and a confirmed extraction timeline.
Odoo schema design and custom field pre-creation
We design the destination schema in Odoo. This includes creating custom fields on res.partner for Referrizer custom contact properties (using Odoo Studio or XML definition), creating CRM pipeline stages matching the Referrizer stage order and probability, creating partner categories (tags) from Referrizer labels, and creating a loyalty_points custom field on Partner. If multi-company structure is selected, we configure res.company records for each Referrizer location. Custom fields are created in a Sandbox or staging database first for validation. The schema design is documented field-by-field and shared with the customer for sign-off before extraction begins.
Multi-location extraction and validation
We extract Referrizer contacts by iterating location_id filters for each location account. We validate that the per-location contact count matches the Referrizer dashboard totals for that location and that no contacts appear in more than one location export. Loyalty point values are extracted as a separate column during contact enumeration and flagged for the custom Partner field mapping. All extracted records are staged in a migration database with source system ID preserved for reconciliation.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database (or Sandbox environment if available) using the full production data volume. The customer reconciles record counts (Partners in, Leads in, Activities in), spot-checks 25-50 random Partner records against Referrizer contact data, and validates that loyalty point values, labels, and custom field data appear correctly. The customer signs off the mapping before production migration begins. Any mapping corrections happen here, not in production.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users validated (manual provisioning confirmed), Partners loaded (with custom fields, loyalty points, and tags resolved), Leads loaded (with stage and owner resolved), Activities loaded as mail.message and crm.activity records, and Campaigns documented as tag assignments. Each phase emits a row-count reconciliation report before the next phase begins. Owner resolution matches Referrizer owner email to Odoo res.users email; unmatched owners go to a queue for admin provisioning before the next phase.
Cutover, validation, and automation inventory handoff
We freeze Referrizer writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver a written inventory of all Referrizer Campaigns, automated workflows, review request sequences, and loyalty program rules that require rebuilding in Odoo (or the selected Odoo loyalty/review app). We support a one-week hypercare window for reconciliation issues. We do not rebuild Referrizer automations as Odoo automation rules inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Referrizer
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 Referrizer 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
Referrizer: Not publicly documented; API returns 429 TOO_MANY_REQUESTS on overages.
Data volume sensitivity
Referrizer 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 Referrizer to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Referrizer 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 Referrizer
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.