CRM migration
Field-level mapping, validation, and rollback between ASPEC and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
ASPEC
Source
Odoo CRM
Destination
Compatibility
7 of 12
objects map 1:1 between ASPEC and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
ASPEC CRM and Odoo CRM take different structural approaches that shape every migration decision. ASPEC stores custom field definitions separately from record data, so we run a mandatory schema discovery step before writing any records to Odoo, enumerating every active field and its type. Odoo uses a Lead-to-Opportunity conversion model (crm.lead that converts to an Opportunity linked to a Contact and Account) rather than a single Opportunity object, so ASPEC Opportunities map to crm.lead records and we configure the Odoo pipeline stages before migration. Activity history (calls, emails, tasks) migrates as mail.message and mail.activity records linked by res.partner and crm.lead references. ASPEC does not publish a public REST or bulk API, so data extraction may require working from the platform's UI export or database-level access on the customer's hosting plan. We do not migrate Workflows, automations, Reports, or Attachments as code; we deliver written inventories for the customer's admin to rebuild.
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 ASPEC 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.
ASPEC
Contact
Odoo CRM
res.partner
1:1ASPEC Contact records map to Odoo res.partner with partner_type='contact'. We extract name, email (email field), phone (phone field), address fields (street, city, state, zip, country), and owner assignment. Owner assignment maps to res.users by email match, with unresolved owners flagged for admin provisioning before the import phase. Tags from ASPEC migrate to res.partner category_id as ir.model.relational_field entries.
ASPEC
Company
Odoo CRM
res.partner (company type)
1:1ASPEC Company records map to res.partner with partner_type='company'. The company name becomes the partner's name field. We preserve the link between ASPEC Contact and Company as parent_id on the child res.partner record. This requires importing Companies before Contacts in the migration sequence so that the parent_id foreign key resolves at insert time.
ASPEC
Opportunity
Odoo CRM
crm.lead
1:1ASPEC Opportunities map to Odoo crm.lead records directly. ASPEC deal name maps to name, deal value maps to planned_revenue, expected close date maps to date_deadline, and ASPEC stage name maps to stage_id via the Odoo stage lookup. We configure the Odoo pipeline stages (crm.stage records attached to a crm.team) during the pre-migration schema step so that stage_id references resolve correctly during import.
ASPEC
Pipeline Stage
Odoo CRM
crm.stage
lossyASPEC pipeline stage names and ordering are captured during schema discovery and written to Odoo crm.stage records. Each stage gets a sequence number, a probability percentage (we map these from ASPEC if available, otherwise use Odoo defaults), and is assigned to a crm.team. If ASPEC has multiple pipelines, we create multiple crm.team records and assign stage records to the corresponding team.
ASPEC
Activity (calls, emails, tasks)
Odoo CRM
mail.activity + mail.message
1:1ASPEC Activity records timestamped to Contacts or Companies migrate to Odoo mail.activity (for scheduled and completed tasks) and mail.message (for logged emails and call records). The res_model on mail.message references res.partner for Contact-linked activities and crm.lead for Opportunity-linked activities. Activity type (call, email, task) maps to activity_type_id via the Odoo activity type configuration. Original timestamps are preserved in write_date.
ASPEC
Custom Fields
Odoo CRM
Ir.model.fields (custom)
lossyASPEC per-user custom fields are stored in a separate metadata layer. We enumerate all active custom fields and their data types during the mandatory schema discovery step, then create matching ir.model.fields entries in Odoo on the target model (res.partner or crm.lead) before any data import begins. Custom field values are extracted from the ASPEC export and written to the new Odoo custom fields. This step is non-negotiable; skipping it results in custom field values being silently dropped during import.
ASPEC
User / Owner
Odoo CRM
res.users
1:1ASPEC Owner records map to Odoo res.users by email address. We extract the full owner list from Contact, Company, and Opportunity records during scoping and match against the destination Odoo instance's res.users table. Any ASPEC owner without a corresponding Odoo user is placed in a reconciliation queue; the customer's Odoo admin provisions the missing user before migration resumes. Archived ASPEC users require the admin to decide whether to reactivate or leave them inactive.
ASPEC
Tag / Label
Odoo CRM
crm.tag
lossyASPEC tags on Contacts and Companies migrate to crm.tag records in Odoo. The tag names are extracted from the ASPEC export, upserted into crm.tag, and linked to crm.lead via crm.tag.rel (many2many relationship) and to res.partner via res.partner category_id if the customer chooses to surface tags on the partner record.
ASPEC
Attachments
Odoo CRM
ir.attachment (manual)
lossyASPEC does not expose a documented file attachment export endpoint. We flag all Attachment records during scoping and advise the customer to export them manually via the ASPEC UI or direct download. We then provide a written mapping of which attachment files correspond to which migrated res.partner or crm.lead record, so the customer's Odoo admin can attach them to the correct records post-migration via Odoo's document management interface.
ASPEC
Reports
Odoo CRM
Rebuilt in Odoo
lossyASPEC Reports are defined in-platform and have no documented export mechanism. We do not migrate Report definitions. During post-migration, the customer's Odoo admin rebuilds reports using Odoo Studio, QWeb report templates, or a BI/reporting tool such as Odoo Spreadsheet or a third-party integration. We deliver a written inventory of every ASPEC report with its filters, groupings, and record scope as a rebuild reference document.
ASPEC
Currency / Pricing data
Odoo CRM
Ir.model.fields (monetary)
1:1ASPEC Opportunity deal values stored in CAD migrate to Odoo crm.lead planned_revenue as decimal fields. If the customer's Odoo instance uses a different base currency, we document the conversion rate used at migration time in a metadata field so that financial reconciliation is auditable. Price fields in Odoo require a currency_id reference; we set this to the customer's configured Odoo currency at import time.
ASPEC
Lead (if applicable)
Odoo CRM
crm.lead (unqualified)
1:1ASPEC does not have a separate Lead object; unqualified prospects live in the Contact or Company record with a status flag. If the customer uses ASPEC contact status to distinguish marketing leads from sales-qualified contacts, we treat marketing leads as crm.lead records in Odoo (not yet converted) and sales-qualified contacts as res.partner records already linked to an Account. The distinction rule is defined during scoping and applied as a transform step before migration.
| ASPEC | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (company type)1:1 | Fully supported | |
| Opportunity | crm.lead1:1 | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Activity (calls, emails, tasks) | mail.activity + mail.message1:1 | Fully supported | |
| Custom Fields | Ir.model.fields (custom)lossy | Mapping required | |
| User / Owner | res.users1:1 | Fully supported | |
| Tag / Label | crm.taglossy | Fully supported | |
| Attachments | ir.attachment (manual)lossy | Not supported | |
| Reports | Rebuilt in Odoolossy | Not supported | |
| Currency / Pricing data | Ir.model.fields (monetary)1:1 | Fully supported | |
| Lead (if applicable) | crm.lead (unqualified)1: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.
ASPEC gotchas
No documented public API for automated data export
Custom field schema not stored with record data
Currency and pricing listed in CAD
Single-review sample limits migration confidence
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
Export method confirmation and scoping
We begin every ASPEC migration with a scoping call to confirm the data export method. If ASPEC provides a database-level read (for self-hosted or dedicated hosting plans), we connect and extract directly. If only UI export is available, we guide the customer through paginated export of Contacts, Companies, Opportunities, and Activities, and we validate record counts against any available ASPEC administrative reports. We simultaneously capture the ASPEC custom field schema (field names, types, and the objects they belong to) from the ASPEC settings panel. The scoping output is a written migration scope document with record counts, export method, and a schema inventory.
Schema discovery and Odoo pipeline configuration
We enumerate all ASPEC custom fields and map them to Odoo ir.model.fields entries on res.partner and crm.lead. We capture ASPEC pipeline stage names and create matching crm.stage records in Odoo, assigning each stage a sequence number, probability, and crm.team reference. If ASPEC has multiple pipelines, we create corresponding crm.team records. We also create crm.tag records for all unique ASPEC tag values. All schema changes are deployed to an Odoo staging instance (or Sandbox if the customer uses Odoo Online/Sh) before any data import begins.
Data extraction, cleansing, and transformation
We extract Contact, Company, Opportunity, and Activity records from the ASPEC export or database. During extraction, we apply a cleansing transform: duplicate contacts are flagged for merge review, blank required fields are flagged for customer resolution, and date formats are normalized to ISO 8601. We apply the custom field values from the ASPEC export into the newly created Odoo custom field columns. The transform output is a set of structured CSV or JSON files organized by object, ready for Odoo XML-RPC import.
Staging migration and reconciliation
We execute a full migration into the customer's Odoo staging environment (or a dedicated test database) using the same import sequence planned for production: res.partner (Companies first, then Contacts with parent_id resolved), crm.lead (Opportunities with stage_id and partner_id resolved), mail.activity and mail.message (Activities with res.partner and crm.lead ID lookups resolved), and crm.tag linkage. The customer's team reconciles record counts, spot-checks 25-50 records against the ASPEC source data, and approves the staging migration before production cutover begins. Any mapping corrections are documented and applied to the production migration plan.
Owner reconciliation and User provisioning
We extract every distinct ASPEC Owner referenced on Contacts, Companies, and Opportunities and match by email address against the destination Odoo instance's res.users table. Any ASPEC Owner without a matching Odoo User is placed in a reconciliation queue. The customer's Odoo admin provisions missing Users (and sets them active or inactive according to whether the original ASPEC owner is still active). Owner resolution must complete before the production migration because Opportunity and Contact records require a valid create_uid and user_id at insert time.
Production migration and cutover
We freeze ASPEC writes during the cutover window, extract a final delta of any records modified since the initial export, merge the delta into the import dataset, and run production migration in dependency order: res.partner (Companies), res.partner (Contacts with parent_id), crm.lead (Opportunities with stage_id and partner_id), mail.activity and mail.message (Activities with resolved parent IDs), and crm.tag linkage. Each phase emits a row-count reconciliation report. After cutover, we deliver the Automation and Report inventory documents for the customer's admin to rebuild in Odoo Studio.
Post-migration support and handoff
We support a one-week hypercare window following production cutover. During this period we resolve any record linkage issues (orphaned Activities, missing Contact-Company associations, stage mismatches) raised by the customer's team. We do not rebuild ASPEC automations or workflows inside the migration scope; the written inventory we deliver documents every automation with its trigger, conditions, and recommended Odoo automation equivalent for the customer's admin or an Odoo implementation partner to rebuild. Attachment re-upload and Report rebuild remain customer-admin tasks guided by our written reference documents.
Platform deep dives
ASPEC
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 ASPEC 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
ASPEC: Not publicly documented.
Data volume sensitivity
ASPEC 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 ASPEC to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your ASPEC 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 ASPEC
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.