CRM migration

Migrate from Followup CRM to Odoo CRM

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

Followup CRM logo

Followup CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Followup CRM and Odoo CRM.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Followup CRM organizes data around Contacts, Companies, Deals, Goals, Tasks, and Follow-ups, with a construction-focused feature set including bid tracking, quota management, and team performance dashboards. Odoo CRM consolidates contacts and companies into a single res.partner model with an 'Is a Company' flag, manages opportunities in crm.lead with stages scoped per crm.team, and logs activities in the mail.message / mail.activity system. The migration must translate Followup CRM's separate Contact and Company objects into Odoo's unified partner model, map deal stages to Odoo's crm.stage configuration per team, and recreate Followup CRM's Goals, bid volume tracking, and quota fields as custom fields on crm.lead before importing. Activity history (calls, emails, notes) migrates as chatter messages with original timestamps and owners preserved. FlitStack runs the transfer via Odoo's XML-RPC API, validates field-level mapping against a sample slice before committing, and captures a delta window during cutover to pick up in-flight records modified in Followup CRM during the migration run.

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

Followup CRM logo

Followup CRM

What's pushing teams away

  • Starting price of ~$4500/yr for 5 users is steep for small contractors and locks teams into annual contracts before validating fit.
  • No publicly documented API or bulk export endpoints makes migration to another platform technically difficult without vendor assistance.
  • Known duplicate follow-up issue in the system frustrates users who rely on clean task queues for sales cadence.
  • Construction-specific feature set does not generalize well; teams outgrowing the niche find limited upgrade paths within the platform.

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 Followup CRM objects map to Odoo CRM

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

Followup CRM

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Followup CRM Contact maps to Odoo res.partner with the 'Is a Company' flag set to FALSE. The contact's primary Company link in Followup CRM becomes a 'Related Company' res.partner record that the contact references via parent_id. Multi-company contacts collapse to one primary company link; additional companies surface as Related Companies in Odoo.

Followup CRM

Company

maps to

Odoo CRM

res.partner

1:1
Fully supported

Followup CRM Company maps to Odoo res.partner with 'Is a Company' set to TRUE. The company name maps to the partner name field; domain/website maps to website; industry and employee count require Odoo custom fields if those values exist in Followup CRM. Parent-child company hierarchies in Followup CRM map to parent_id on res.partner.

Followup CRM

Deal / Project

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Followup CRM Deal maps directly to Odoo crm.lead (opportunity). Deal name maps to crm.lead name; deal amount maps to expected_revenue; deal stage maps to crm.stage via value mapping per pipeline; close date maps to date_deadline. The crm.lead type field is set to 'opportunity' for deal records.

Followup CRM

Pipeline

maps to

Odoo CRM

crm.team + crm.stage

1:1
Fully supported

Followup CRM Pipeline maps to Odoo crm.team (sales team) with its own crm.stage records. Each pipeline stage name in Followup CRM becomes a crm.stage record within that team, with sequence order and probability percentage configured to match Followup CRM's stage settings. Teams without a dedicated pipeline in Odoo default to the base Sales Team.

Followup CRM

Pipeline Stage

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Stage names are mapped value-by-value from Followup CRM to Odoo crm.stage records within the target crm.team. Stage probability percentages are applied to the Odoo stage record. Stage-entered dates are preserved in a custom datetime field (Stage_Entered_Date__c) on crm.lead for historical reporting continuity.

Followup CRM

Goals

maps to

Odoo CRM

Custom fields on crm.lead + custom reporting

1:1
Fully supported

Followup CRM Goals track bid volume targets, revenue quotas, and team performance. These have no Odoo CRM native equivalent. FlitStack migrates Goals data as custom fields on crm.lead (e.g., Bid_Volume_Target__c, Quota_Amount__c) and provides a reporting setup guide for Odoo's pivot and graph views to recreate the Goals dashboard.

Followup CRM

Task / Follow-up

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Followup CRM Tasks and Follow-ups map to Odoo mail.activity records linked to the target res.partner or crm.lead. Activity type (call, email, meeting, todo) maps to Odoo's activity_type_id. Original due dates, completion dates, and assigned owners are preserved in the activity fields.

Followup CRM

Email / Call Log

maps to

Odoo CRM

mail.message

1:1
Fully supported

Followup CRM email and call logs migrate as Odoo mail.message records on the crm.lead or res.partner chatter. The message body carries the email content or call notes; author_id is resolved by email match against Odoo res.users. Original timestamps are preserved via the message's date field.

Followup CRM

Attachment / File

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

File attachments on Followup CRM records are downloaded and re-uploaded to Odoo's ir.attachment model, linked to the target res.partner or crm.lead via res_model and res_id. Odoo's attachment storage (database or file system) is configured at the Odoo instance level before migration runs.

Followup CRM

User / Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

Followup CRM owner assignments resolve against Odoo res.users by email match. Unmatched owners are flagged in the pre-migration audit; the client either invites them to Odoo first or assigns their records to a fallback user (typically admin). No record lands in Odoo without a valid OwnerId.

Followup CRM

Custom Fields

maps to

Odoo CRM

Custom fields (x_defields) on res.partner / crm.lead

1:1
Mapping required

Followup CRM System Custom Fields on Contacts, Companies, and Deals require pre-creation in Odoo Settings > Technical > Custom Fields before data import. FlitStack exports the full field-definition map (field name, type, pick-list values) so Odoo admins can create matching fields. The migration loads data into those fields during the import phase.

Followup CRM

Note / Comment

maps to

Odoo CRM

mail.message

1:1
Fully supported

Followup CRM notes and comments migrate as Odoo chatter messages (mail.message) on the related res.partner or crm.lead. The note body becomes the message body; author and timestamp are preserved. Notes without a parent record are attached to the most-recently related contact or deal.

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.

Followup CRM logo

Followup CRM gotchas

High

No documented API or bulk export endpoint

Medium

Duplicate follow-up artifacts in contact records

Medium

Annual contract pricing creates migration timing pressure

Low

Custom fields require explicit field-level 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

  • Followup CRM Contact and Company objects collapse into Odoo res.partner — 'Is a Company' flag is the only differentiator

    Followup CRM maintains Contacts and Companies as separate database objects with a one-to-many relationship (one Company, many Contacts). Odoo CRM consolidates both into a single res.partner table where the company_type field ('person' vs 'company') and the parent_id / child relationships determine hierarchy. During migration, every Followup CRM Company record must land as a res.partner with company_type = 'company', and every Contact must land with company_type = 'person' and a parent_id pointing to the migrated Company. If a Followup CRM Contact has multiple associated Companies, only the primary company becomes the parent_id — additional company associations require a custom partner relation model in Odoo or manual re-linking post-migration.

  • Followup CRM Goals have no Odoo native equivalent — bid volume targets and revenue quotas must be rebuilt as custom fields

    Followup CRM's Goals dashboard tracks bid volume targets, team revenue quotas, and quota achievement percentages across the sales team. Odoo CRM has no built-in Goals or quota-tracking module — the functionality does not exist in the crm.lead model by default. FlitStack migrates the raw numeric values (bid volume, revenue target, quota achieved) as custom fields on crm.lead, but the visual Goals dashboard with progress bars, team comparisons, and quota-vs-actual reporting must be rebuilt in Odoo using the CRM reporting app or a custom dashboard module. This is not a data-loss issue but a functional gap that requires Odoo configuration work after migration to restore the same visibility.

  • Odoo stage probability lives on crm.stage records, not on crm.lead — stage mapping requires per-team configuration

    In Followup CRM, each deal stage carries a probability percentage stored directly on the stage definition. In Odoo CRM, stage probability is a float field on the crm.stage record itself, and each sales team (crm.team) has its own set of stage records. This means that mapping Followup CRM pipeline stages to Odoo requires creating crm.stage records within the appropriate crm.team for each pipeline, setting the probability values on those stage records, and ensuring the stage sequence order matches Followup CRM's pipeline flow. Teams with multiple Followup CRM pipelines need multiple crm.team records with their own crm.stage chains. The migration plan must include a stage-definition map showing which Followup CRM pipeline stage maps to which Odoo crm.stage within which team.

  • Followup CRM custom fields must be pre-created in Odoo before data import — they don't migrate as records

    Followup CRM stores custom field definitions in its System Custom Fields section and allows data import into those custom fields via CSV mapping. Odoo CRM handles custom fields differently: they must be defined as field records in Odoo Settings > Technical > Custom Fields (or as x_<fieldname> Python fields in custom modules) before any data can be loaded into them. There is no automatic import of custom field definitions from Followup CRM. FlitStack exports the complete list of Followup CRM custom field names, types, and pick-list values so Odoo admins can create matching fields in Odoo before the migration run. If custom fields are not pre-created, the migration loads data into the standard fields only and custom field values are lost.

  • Followup CRM activity history converts to Odoo chatter messages — activity type and owner resolve differently

    Followup CRM stores Tasks, Follow-ups, Emails, and Calls as separate activity record types with owner, timestamp, and body content. Odoo CRM logs all these as mail.message records on the related crm.lead or res.partner chatter — the activity type distinction (call vs email vs note) is preserved as the message sub-type, but the record structure changes. The owner resolution process differs: Followup CRM owner IDs resolve to Odoo res.users by email match; if no match exists, the message author defaults to the Odoo admin user rather than remaining unassigned. This means activity attribution may shift for records owned by users who are not yet set up in Odoo at migration time.

Migration approach

Six steps for a successful Followup CRM to Odoo CRM data migration

  1. Audit Followup CRM data and export field-definition map

    FlitStack connects to Followup CRM via scoped read access and exports a full inventory of Contacts, Companies, Deals, Tasks, Follow-ups, and Attachments. We also extract the System Custom Fields list (field name, type, pick-list values) so Odoo admins can create matching custom fields in Odoo Settings > Technical > Custom Fields before the migration loads data. The audit report flags records without owners, contacts without companies, and deals without contacts — these receive a pre-defined fallback rule (e.g., unmatched owners default to admin; orphaned contacts attach to an 'Unassigned' company record).

  2. Create Odoo crm.team and crm.stage structure

    Before any data lands, Odoo admins (or FlitStack, with admin credentials) create crm.team records for each Followup CRM pipeline and build the corresponding crm.stage chains under each team. Stage names, sequence order, and probability percentages are configured to match Followup CRM's pipeline definitions. Custom fields identified in the audit (Goals fields, bid tracking fields, any industry-specific custom properties) are created as fields on res.partner and crm.lead. This step ensures the Odoo schema is ready before validation begins — no records import into a stage that doesn't exist yet.

  3. Migrate Companies and Contacts to res.partner

    The migration begins with Companies (mapped to res.partner with company_type = 'company') followed by Contacts (mapped to res.partner with company_type = 'person' and parent_id pointing to the migrated Company). Email addresses are used to detect duplicates and merge matching records. Custom field values for Company-type partners load into the pre-created custom fields. The import order respects Odoo's foreign-key constraints — res.partner records must exist before child records can reference them via parent_id.

  4. Migrate Deals to crm.lead and activity history to chatter

    Followup CRM Deals import into crm.lead with stage_id pointing to the pre-created crm.stage record within the correct crm.team, and partner_id pointing to the migrated res.partner. Goals-related fields load into the custom crm.lead fields. Tasks, Follow-ups, Emails, and Calls convert to mail.activity and mail.message records attached to the corresponding crm.lead and res.partner, preserving original timestamps and author attribution. Attachments download from Followup CRM and re-upload to Odoo ir.attachment linked to the target record.

  5. Run sample migration with field-level diff and delta pickup

    A representative sample (typically 100–500 records spanning contacts, companies, deals, and activities) migrates first. FlitStack generates a field-level diff report comparing source values against Odoo field values, covering stage mapping, owner resolution, custom field population, and activity attribution. The client reviews the diff and approves or flags corrections before the full run commits. After full migration, a delta-pickup window (24–48 hours) captures any Followup CRM records modified during the cutover. Audit log records every operation, and one-click rollback is available if reconciliation finds data discrepancies beyond acceptable thresholds.

Platform deep dives

Context on both ends of the pair

Followup CRM logo

Followup CRM

Source

Strengths

  • Intuitive drag-and-drop contact and field configuration requiring no developer involvement.
  • Built-in bid volume tracking and quotas aligned with construction sales workflows.
  • Responsive customer support praised across G2 review community.
  • Custom reporting exports from Project Pages including bid-to Excel formats.
  • Goals and team performance tracking features built into the home page dashboard.

Weaknesses

  • No publicly documented API makes programmatic migration difficult without vendor cooperation.
  • Annual contract requirement at ~$4500/yr for 5 users locks in spend before full validation.
  • Known duplicate follow-up bug creates dirty data requiring manual cleanup before migration.
  • Limited integrations beyond Procore make ecosystem connectivity a constraint for some construction firms.
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. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

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

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • 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

    Followup CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Followup CRM 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 Followup CRM to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Followup CRM to Odoo CRM migrations complete in 24–72 hours of clock time for under 25,000 total records (contacts, companies, deals, and activities combined). Complex Followup CRM setups with Goals tracking, multiple bid pipelines, and large activity histories — particularly construction companies with years of project records — typically require 5–8 days. The longest planning step is creating the Odoo crm.team and crm.stage structure to match each Followup CRM pipeline; the longest execution step is converting activity history to Odoo chatter messages, which scales with total activity volume.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Followup CRM.
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