CRM migration
Field-level mapping, validation, and rollback between SalesSeek and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
SalesSeek
Source
Odoo CRM
Destination
Compatibility
8 of 15
objects map 1:1 between SalesSeek and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from SalesSeek to Odoo CRM is a migration from a UK-built standalone CRM to a modular ERP platform where the CRM is one application among many. SalesSeek uses Organizations as the primary company record, People as contacts linked to Organizations, and Deals as pipeline opportunities with configurable stages. Odoo CRM consolidates this into Partners (combining company and individual contacts) and Opportunities, with Leads serving as unqualified prospect records. We resolve the Organization-to-Partner mapping, the People-to-Contact split, and the Deal-to-Opportunity translation during scoping. Custom field dropdowns require explicit Odoo Studio or custom module configuration before migration. Automation rules do not migrate via API and must be rebuilt using Odoo Workflow or Server Actions post-migration.
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 SalesSeek 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.
SalesSeek
Organization
Odoo CRM
res.partner
1:1SalesSeek Organizations map to Odoo res.partner records with the company_type field set to 'company'. Standard fields (name, street, city, country, phone, website, industry) map directly. The original SalesSeek Organization ID is preserved in a custom Char field for re-linking to People records. Parent company relationships in SalesSeek map to Odoo's parent_id on res.partner. Address fields require normalization before import if the source data contains unstructured address strings.
SalesSeek
People
Odoo CRM
res.partner
1:manySalesSeek People map to Odoo res.partner records with company_type set to 'person'. Each Person is created as a separate Partner record and linked to its parent Organization Partner via parent_id. The original SalesSeek People ID is preserved in a custom field for relationship resolution. If the customer uses SalesSeek's lifecycle stage on People, that value migrates to a custom selection field on the Partner record. People without an associated Organization are created as standalone contact Partners.
SalesSeek
Deal
Odoo CRM
crm.lead (as Opportunity)
1:1SalesSeek Deals map to Odoo crm.lead records with type='opportunity'. The Deal name becomes the Opportunity name, monetary value maps to planned_revenue, and expected close date maps to date_deadline. The linked Organization resolves to the migrated res.partner record; the linked Person resolves to the migrated res.partner contact. Stage probability percentages migrate to Odoo's stage probability values. Lost and won reasons from SalesSeek become custom Char fields on the Odoo Opportunity.
SalesSeek
Pipeline
Odoo CRM
crm.team + Stage
lossySalesSeek's multiple simultaneous pipelines map to Odoo crm.team (Sales Team) records, each with its own kanban stage configuration. Stage names, sequence order, and probability percentages migrate to Odoo's crm.stage records associated with each team. If SalesSeek pipelines represent different business units or product lines, each becomes a separate Odoo Sales Team with independent stage sets. Stage renaming post-migration requires manual review in Odoo Studio.
SalesSeek
Pipeline Stage
Odoo CRM
crm.stage
lossySalesSeek pipeline stages are configurable enumerations that map to Odoo crm.stage records. We preserve stage labels, sequence order, and probability percentages from SalesSeek as stage_name, sequence, and probability fields on crm.stage. The stage's pipeline association maps to the sales_team_id on crm.stage. Stage colors in SalesSeek do not have a direct Odoo equivalent and are noted for manual configuration post-migration.
SalesSeek
Custom Field (text, number, date)
Odoo CRM
Custom ir.model.fields
lossySalesSeek custom fields on Organizations, People, and Deals require pre-creation in Odoo before migration. Text fields map to Char or Text depending on length; number fields map to Float or Integer depending on the SalesSeek type; date fields map to Date. We create each custom field via Odoo Studio or custom module XML during the schema preparation phase, then map values during the data migration phase. Field labels and help text are preserved from the SalesSeek custom field definition.
SalesSeek
Custom Field (dropdown)
Odoo CRM
Selection field
lossySalesSeek dropdown fields require explicit option mapping to Odoo selection fields or many2one relations depending on whether the options represent a fixed enumerated set or a dynamic reference list. We generate a dropdown mapping spreadsheet during scoping that lists each SalesSeek dropdown field name, its options, and the recommended Odoo field type. Fixed-option dropdowns become selection fields with the options list as the selection tuple. Reference-style dropdowns (e.g., source campaigns, industry verticals) may become many2one relations to dedicated Odoo models if the option list is large or grows over time.
SalesSeek
Task
Odoo CRM
Project Task (mail.activity)
1:1SalesSeek Tasks map to Odoo mail.activity records with activity_type_id resolved to the standard 'To Do' type. Task subject becomes activity_title, due date maps to date_deadline, and status (open/completed) maps to activity subtype. Assigned user maps via email lookup to res.users. Tasks linked to specific Organizations, People, or Deals resolve to the migrated res.partner or crm.lead records via the Odoo res_id and res_model references. Completed tasks are migrated with their completion date preserved.
SalesSeek
Group
Odoo CRM
crm.team or res.groups
lossySalesSeek Groups (collections of records used for filtering and sharing) map to Odoo crm.team records if they represent sales team assignments, or to res.groups if they represent security or permission groupings. Group membership of individual users is preserved by mapping SalesSeek group members to the corresponding crm.team member list or res.groups inmembers. We export group definitions and recreate them as Teams or User Groups in Odoo based on the group's primary use.
SalesSeek
Filter
Odoo CRM
ir.filters
lossySalesSeek Filters that are associated with a Group are exported during scoping and recreated as Odoo ir.filters records with the same domain expression, field list, and sort order. Filters that are not associated with a Group may have already been deleted by SalesSeek's cleanup process before migration begins; we identify these during scoping and note them as requiring manual recreation. Orphaned filter definitions without a Group association are documented separately for customer review.
SalesSeek
Activity/Event
Odoo CRM
mail.message
1:1SalesSeek engagement activities (call logs, meeting records, email metadata) map to Odoo mail.message records attached to the migrated record (res.partner or crm.lead) via res_id and res_model. Activity type, date, and notes migrate as mail.message fields. Call duration and disposition notes from SalesSeek become plaintext in the message body. Meeting location and attendee information migrate as mail.message fields. Activity records without a parent Organization or Person are attached to the highest-level relevant record.
SalesSeek
Attachment
Odoo CRM
ir.attachment
1:1File attachments associated with Organizations, People, or Deals are downloaded from SalesSeek and re-uploaded to Odoo as ir.attachment records linked to the migrated res.partner or crm.lead via res_id and res_model. The original filename, MIME type, and file content are preserved. Attachments are imported after the parent record exists in Odoo so that the ir.attachment res_model and res_id references are satisfied. Attachments exceeding Odoo's default attachment storage size may require storage configuration adjustment.
SalesSeek
Tag
Odoo CRM
crm.tag
1:1SalesSeek Tags are exported as tag names and re-created as Odoo crm.tag records. Tag assignments on Organizations, People, and Deals migrate as crm.lead.tag.rel entries for Opportunities or res.partner.category entries for Partners. Tags that exist in both SalesSeek and Odoo (from previous imports or default data) are matched by name to avoid duplication. Tags used for both company and contact records map to the appropriate tag relation table per record type.
SalesSeek
Owner
Odoo CRM
res.users
1:1SalesSeek Owners (users who own Organizations, People, Deals, and Tasks) map to Odoo res.users records via email address lookup. Any SalesSeek Owner without a matching Odoo User is placed in a reconciliation queue for the customer's Odoo administrator to provision before record import continues. Owner assignments on Deals and Tasks are set as Odoo responsible_id on crm.lead and mail.activity records respectively. Inactive SalesSeek users may be mapped to inactive Odoo users with notes for the admin to reactivate.
SalesSeek
Automation Rule
Odoo CRM
Not migratable
1:1SalesSeek automation rules including drip email sequences, lead scoring logic, and task trigger automations are not accessible through the SalesSeek REST API. They cannot be exported or transferred programmatically. During scoping, we capture screenshots or conduct a walk-through session with the customer to document each automation's trigger conditions, delay rules, and actions. We deliver a written automation inventory document that describes each rule and provides a recommended Odoo Workflow or Server Action equivalent. The customer's Odoo administrator or an Odoo implementation partner rebuilds the automations post-migration; this is a manual effort that should be accounted for in project timelines.
| SalesSeek | Odoo CRM | Compatibility | |
|---|---|---|---|
| Organization | res.partner1:1 | Fully supported | |
| People | res.partner1:many | Fully supported | |
| Deal | crm.lead (as Opportunity)1:1 | Fully supported | |
| Pipeline | crm.team + Stagelossy | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Custom Field (text, number, date) | Custom ir.model.fieldslossy | Fully supported | |
| Custom Field (dropdown) | Selection fieldlossy | Fully supported | |
| Task | Project Task (mail.activity)1:1 | Fully supported | |
| Group | crm.team or res.groupslossy | Fully supported | |
| Filter | ir.filterslossy | Fully supported | |
| Activity/Event | mail.message1:1 | Fully supported | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Tag | crm.tag1:1 | Fully supported | |
| Owner | res.users1:1 | Fully supported | |
| Automation Rule | Not migratable1: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.
SalesSeek gotchas
Filter API is read-only and filters decay without Groups
Automation rules not accessible via API
Custom field types require explicit value mapping
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 schema audit
We audit the source SalesSeek account across Organizations, People, Deals, Tasks, Custom Fields (with dropdown option lists), active Filters with Group associations, Tags, and Owner assignments. We identify automation rules through customer walk-through or screenshots and document them as a separate rebuild inventory. We assess data volume for each object to size the migration environment and estimate Bulk API batch counts. We review the target Odoo version (Community vs Enterprise) and installed applications to determine which Odoo modules are available for field configuration.
Custom field pre-configuration in Odoo
We create all required custom fields in Odoo before any data migration begins. Text, number, and date custom fields are created via Odoo Studio or custom module XML. Dropdown fields require explicit configuration: fixed-option dropdowns become selection fields with the exact option list; reference-style dropdowns may require dedicated Odoo models and many2one relations. We validate the custom field configuration with the customer before proceeding to data migration. This step is blocking for all downstream object imports that reference custom fields.
Organization and People mapping design
We design the Organization-to-Partner and People-to-Contact mapping, resolving the relationship hierarchy (which Partner is the company, which is the contact person). If SalesSeek lifecycle stages on People are in use, we design a custom selection field on the Partner model to preserve these values. We establish the import order: Organizations first (to create company Partners), then People (to create contact Partners linked to companies). Any Organizations that have no contacts are created as standalone company Partners. We export the mapping spreadsheet for customer validation before extraction begins.
Sandbox staging migration and reconciliation
We run a full migration into a staging Odoo environment (or the production environment with a test flag) to validate record counts, field mapping accuracy, and custom field value transfer. The customer's SalesSeek administrator spot-checks 25-50 randomly selected Organizations, People, and Deals against the source system. We reconcile any missing fields, incorrect dropdown mappings, or broken parent-child relationships before proceeding to production migration. This stage also validates that the Odoo Lead-to-Opportunity conversion workflow is aligned with the customer's sales process.
Production migration in dependency order
We run production migration in record-dependency order: Organizations (to create company Partners), People (to create contact Partners with parent_id links), then Deals (to create Opportunities linked to Partners). Tasks and Activities import after their parent records exist. Attachments import last to avoid orphaned ir.attachment records. Each phase emits a row-count reconciliation report before the next phase begins. SalesSeek write access is frozen during cutover to prevent new records from being created after the final extraction.
Cutover, validation, and automation rebuild handoff
We execute a final delta migration of any records created or modified during the cutover window, then mark Odoo as the system of record. We validate critical record counts and spot-check key accounts and deals with the customer's sales operations lead. We deliver the automation inventory document with Odoo Workflow and Server Action recommendations. We provide a written summary of any SalesSeek Filters that were orphaned and documented for manual recreation. We do not rebuild SalesSeek automation rules as Odoo workflows inside the migration scope; that is a separate engagement for the customer's Odoo administrator or implementation partner.
Platform deep dives
SalesSeek
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 SalesSeek 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
SalesSeek: Not publicly documented.
Data volume sensitivity
SalesSeek 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 SalesSeek to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your SalesSeek 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 SalesSeek
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.