CRM migration

Migrate from Brivity to Odoo CRM

Field-level mapping, validation, and rollback between Brivity and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Brivity logo

Brivity

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

13 of 13

objects map 1:1 between Brivity and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

FlitStack AI migrates the Brivity CRM data model into Odoo CRM using Brivity's REST API for live records and CSV exports where the API does not cover. Brivity stores contacts, companies, deals, and activity logs; Odoo CRM models the same concepts as res.partner (contact/company combined), crm.lead (both leads and opportunities), and mail.message (activity history). We map Brivity's firstname, lastname, email, phone, and address fields directly to Odoo res.partner equivalents, and Brivity deal names, amounts, stages, and close dates into crm.lead fields. Brivity's custom properties — transaction type, lead source, showing notes — become custom fields on crm.lead using Odoo's ir.model.fields API. Pipeline stages map to Odoo stage_ids via value mapping. Activity history (calls, emails, tasks) migrates to mail.message records linked to crm.lead. Brivity's agent performance metrics, design automation triggers, and IDX website data do not have Odoo equivalents — we flag these for manual rebuild post-migration. Owner resolution runs by email match against Odoo res.users so every migrated record lands with the correct user assignment.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Brivity logo

Brivity

What's pushing teams away

  • Setup is time-consuming and the feature set is wide, so teams commonly report they only use a fraction of what they pay for each month.
  • Brivity organizes and tracks existing leads but does not generate new ones, frustrating teams whose real problem is inconsistent lead flow rather than poor follow-up.
  • Add-on costs for AI writing, recruiter tools, and virtual assistants stack on top of the base price, leading to sticker shock once the full feature set is licensed.
  • The platform can feel overwhelming initially, especially for solo agents who do not need team accountability dashboards or complex pipeline management.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Brivity objects map to Odoo CRM

Each row shows how a Brivity 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.

Brivity

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Brivity contacts map directly to Odoo res.partner records. When is_company=false the record represents an individual; when is_company=true it represents a brokerage or property company. Email, phone, and address fields translate 1:1. Primary company assignment uses parent_id on res.partner. During migration, we validate email uniqueness and flag duplicates for review. The is_company flag determines whether the contact appears in Odoo's company or contact views, ensuring proper segmentation for marketing and sales workflows.

Brivity

Company

maps to

Odoo CRM

res.partner

1:1
Fully supported

Brivity company records map to res.partner with is_company=True. Odoo requires parent_id to be empty on company records. Multi-location companies need separate res.partner records linked by parent_id after the initial company record is created. Each location gets its own partner record with parent_id pointing to the main company, allowing you to track interactions and assignments at both the headquarters and branch level. This structure supports accurate reporting by location and maintains clear hierarchies in your partner database.

Brivity

Deal

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Brivity deal names, amounts, close dates, and stage names map to crm.lead name, expected_revenue, date_deadline, and stage_id respectively. The crm.lead type field is set to 'opportunity' for all migrated deals. Owner assignment via user_id resolved by email match against Odoo res.users.

Brivity

Pipeline

maps to

Odoo CRM

crm.team + crm.stage

1:1
Fully supported

Each Brivity pipeline becomes an Odoo crm.team. Brivity stage names within each pipeline create crm.stage records assigned to that team. Stages are ordered using sequence values pulled from Brivity. Teams without pipeline assignment default to the base CRM team in Odoo.

Brivity

Pipeline Stage

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Stage names are mapped value-by-value from Brivity to Odoo crm.stage records. Probability and legend_color values are preserved as stage properties. Stage IDs in Brivity are not reused; new stage IDs are assigned in Odoo and mapped in the migration lookup table.

Brivity

Custom Property (text/number)

maps to

Odoo CRM

ir.model.fields (x_ field)

1:1
Fully supported

Brivity custom properties that have no Odoo CRM native equivalent (e.g., transaction_type, showing_notes, mls_number) are created as x_ prefixed fields on crm.lead using Odoo's ir.model.fields API. Field type (char, float, selection, date) is inferred from the Brivity property value type. Selection fields require explicit value_mapping with Brivia pick-list options.

Brivity

Task / Activity

maps to

Odoo CRM

mail.message + mail.activity

1:1
Fully supported

Brivity tasks and showing notes become Odoo mail.activity records linked to crm.lead via res_model='crm.lead' and res_id matching the migrated deal ID. Task state (open/done) maps to activity state and calendar_event_id where applicable. Original timestamps preserved in create_date. This ensures all historical activities appear in the Odoo chatter, giving your team full visibility into the deal's history. Activities sync with Odoo's calendar module, allowing users to see scheduled tasks alongside their pipeline view.

Brivity

Lead (in Brivity context)

maps to

Odoo CRM

crm.lead (type='lead')

1:1
Fully supported

Brivity leads that have not been converted to deals migrate as Odoo crm.lead records with type='lead' rather than 'opportunity'. These land in the Leads pipeline view in Odoo and can be converted to opportunities manually after migration using Odoo's native Convert to Opportunity action.

Brivity

User / Agent

maps to

Odoo CRM

res.users

1:1
Fully supported

Brivity agent and team member records do not create new Odoo users. Owner resolution runs by email address match against existing Odoo res.users. Agents without a matching Odoo email are assigned to a fallback user (configurable) and flagged in the migration report for manual reassignment.

Brivity

Attachment / File

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Files attached to Brivity contacts or deals are downloaded and re-uploaded as Odoo ir.attachment records linked to the corresponding res.partner or crm.lead via res_model and res_id. File size limits apply per Odoo configuration. Inline images in Brivity notes are extracted and stored separately.

Brivity

Note (plain text / rich text)

maps to

Odoo CRM

mail.message

1:1
Fully supported

Brivity notes on contacts and deals migrate to Odoo mail.message records with message_type='comment'. Rich-text formatting is converted to HTML-compatible body content. Notes are displayed in the Odoo chatter thread on the corresponding crm.lead or res.partner record. This preserves all contextual information and makes it searchable within Odoo. The chatter integration allows team members to add follow-up comments directly on migrated notes, maintaining collaboration continuity.

Brivity

Marketing / Automation (no equivalent)

maps to

Odoo CRM

none

1:1
Fully supported

Brivity's automated follow-up sequences, action plans, and marketing tools do not have an Odoo CRM equivalent at the data level. These are configuration artifacts, not records. We export workflow definitions as JSON for your Odoo admin to rebuild using Odoo Studio actions and server actions after migration.

Brivity

Agent Performance Metric

maps to

Odoo CRM

x_custom_field on crm.lead

1:1
Fully supported

Brivity tracks agent-level metrics like showing_count, conversion_rate, and days_on_market as deal properties. These migrate to custom x_ fields on crm.lead so reporting in Odoo Spreadsheet or custom views preserves the performance context from Brivity. Custom fields allow you to build agent performance dashboards, track individual productivity, and maintain historical data for comparison. You can create pivot tables and charts in Odoo Spreadsheet to analyze these metrics across your pipeline.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Brivity logo

Brivity gotchas

High

No public API forces CSV-based migration scoping

High

Auto Plans and automated sequences do not transfer

Medium

IDX website configuration is non-transferable

Medium

Add-on pricing creates unpredictable total cost

Low

GCI and commission data may not survive field mapping

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Brivity's API does not expose custom property schemas — custom fields must be discovered by probing record responses

    Brivity's public API returns custom property values in API responses but does not provide a field metadata endpoint that lists all custom property names and types. FlitStack handles this by pulling a representative sample of records (typically 50–100) and inferring custom property names and value types from non-null fields. Any custom property that appears in fewer than 5% of records may not be detected and should be flagged in the pre-migration data audit. Odoo custom fields created from inferred properties are given conservative types (char or text) unless a consistent value pattern reveals a numeric or date type. Teams with extensive custom property usage should request a manual schema review step before migration commits.

  • Brivity contact-to-company associations are primary-company only; Odoo res.partner N:N links need post-migration setup

    Brivity links a contact to one primary company via the contact's company field. Odoo supports multiple-company associations for partners using the res.partner relation table (contact_company_rel). If your Brivity data relies on secondary company associations (e.g., an agent working across multiple brokerages), those secondary links do not migrate automatically. We flag contacts with multiple Brivity company associations and surface them in the migration report so your Odoo admin can add the additional parent_id or child_ids records after the base migration completes using Odoo's partner form.

  • Odoo crm.lead stages are team-scoped — Brivity pipelines must be mapped to Odoo crm.team before stage mapping resolves

    Odoo CRM stages belong to a specific crm.team, unlike Brivity where pipeline stages are independent of team assignment. If you have five Brivity pipelines and three teams, creating three crm.team records and five crm.stage records (one per team) requires planning before migration data is loaded. We deliver a stage and team mapping plan during the schema setup phase. Stage IDs in Odoo are auto-assigned at record creation time — stage name alone is not a unique key, so the migration lookup table must store both team_id and stage_id for correct assignment during the deal load phase.

  • Brivity automated sequences and action plans do not have Odoo equivalents at the data level

    Brivity's automated follow-up sequences, drip email plans, and stage-triggered action plans are workflow configurations stored in Brivity's application layer, not as data records that can be exported. These do not migrate. We provide a JSON export of Brivity workflow definitions (trigger conditions, delay values, action types) as a reference document your Odoo admin can use to rebuild equivalent automation using Odoo Studio server actions, mail templates, and activity plans. Marketing-specific automation (email blasts, listing alerts) requires Odoo's Email Marketing app, which is a separate module from CRM and has its own list management.

  • Odoo Community does not include Odoo Studio — custom field creation requires technical access

    If your Brivity migration involves more than 20 custom fields, the custom field creation step assumes access to Odoo's Settings > Technical > Custom Fields interface (Studio mode) or direct ir.model.fields write access. Odoo Community includes this via developer mode, but it requires a technically-literate admin. Enterprise includes Studio for point-and-click field creation. Teams without technical access should plan for partner-assisted field setup before migration data is loaded, as field IDs must exist in Odoo before records referencing them can be created.

Migration approach

Six steps for a successful Brivity to Odoo CRM data migration

  1. Pre-migration data audit and schema discovery

    FlitStack AI connects to Brivity via API using read-only credentials to enumerate available object types, field names, and record counts. For each object (contacts, companies, deals, activities) we pull a representative sample and infer custom property names and value types. We cross-reference the sample with Odoo CRM's standard field inventory to identify direct mappings, value-mapping candidates, and fields requiring custom field creation. We deliver a field mapping spreadsheet before migration runs so you can review and adjust the plan.

  2. Odoo custom field creation and team/stage configuration

    Before data loads, we create the custom fields identified in the audit on Odoo's crm.lead and res.partner models using the ir.model.fields API. This includes x_transaction_type (selection), x_mls_number (char), x_showing_notes (text), and any other Brivity custom properties with no native Odoo equivalent. Simultaneously, we create the crm.team and crm.stage records for each Brivity pipeline, setting stage sequence, probability, and legend_color values to match Brivity stage definitions as closely as possible.

  3. Contact and company data load with dependency ordering

    We load Odoo res.partner records in dependency order — companies first (is_company=True), then contacts with parent_id linking to company records. Email deduplication runs at this stage: if the same email appears on multiple Brivity contacts, the oldest record becomes the primary res.partner and subsequent records are flagged for manual merge review. Owner resolution by email match creates the user_id link on each partner record.

  4. Deal and pipeline data load with stage mapping

    Brivity deals load into crm.lead as type='opportunity' records. Each deal's pipeline and stage names resolve to the correct crm.team and crm.stage IDs using the mapping plan. Owner assignment runs via email match to res.users. Custom property values (transaction_type, lead_source, showing_notes) write to the x_ custom fields created in step 2. Deal amount writes to expected_revenue as a float; Brivity currency stored in x_brivity_currency for reference.

  5. Activity history migration and sample validation

    Call, email, meeting, and task records from Brivity load as mail.message and mail.activity records linked to the corresponding crm.lead by migrated record ID. A representative sample (typically 100–300 records across contacts, companies, and deals) is validated against the source before the full run commits. We generate a field-level diff comparing source field values to destination field values and surface any mapping gaps for your review.

  6. Delta-pickup, final sync, and audit handoff

    After sample validation is approved, the full migration runs with a delta-pickup window of 24–48 hours. Any Brivity records modified or created during the cutover window are pulled in the final sync pass. FlitStack produces an audit log listing every record created or updated in Odoo, the source record ID, and the migration timestamp. If reconciliation reveals record count discrepancies or missing data, one-click rollback reverts Odoo to pre-migration state while preserving the Brivity export for re-run after fixes.

Platform deep dives

Context on both ends of the pair

Brivity logo

Brivity

Source

Strengths

  • All-in-one platform covers CRM, marketing automation, transaction management, and IDX websites in a single subscription.
  • Built by a real brokerage managing over $1B in annual sales, providing real-estate-specific workflows out of the box.
  • Bundled lead capture websites and IDX integration make the platform immediately functional for agents without separate web tooling.
  • Included live support, onboarding, and weekly webinars reduce the self-serve learning burden for busy agents.
  • Design automation tools let teams maintain consistent branding across listings, social posts, and print collateral.

Weaknesses

  • No documented public API means all data export relies on CSV downloads, which may omit custom fields, attachments, or activity details.
  • Auto Plans and workflow automations cannot be exported and must be rebuilt manually at the destination, losing any custom logic or timing rules.
  • Pricing is opaque above the solo tier, with add-ons for AI writing, recruiting, and virtual assistants adding to the base cost unpredictably.
  • The platform requires significant setup time and a steep initial learning curve, leading many teams to underutilize features they are paying for.
  • Lead generation is not addressed by Brivity itself; teams expecting the CRM to solve inconsistent lead flow will be disappointed.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Brivity and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Brivity and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between Brivity and Odoo CRM.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Brivity: Not publicly documented.

  • Data volume sensitivity

    B

    Brivity doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Brivity to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Brivity to Odoo CRM data migrations

Answers to the questions buyers ask most during Brivity to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Brivity to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Brivity to Odoo CRM migrations complete in 48–72 hours of clock time for datasets under 50,000 records. Larger migrations with extensive custom properties or multiple deal pipelines extend to 5–7 days. The longest phase is usually Odoo custom field creation and team/stage configuration before data loads, followed by sample validation. Full-run execution and delta pickup happen after configuration is confirmed.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Brivity.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day