CRM migration
Field-level mapping, validation, and rollback between Bizstim Business Management Software and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Bizstim Business Management Software
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Bizstim Business Management Software and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Bizstim Business Management Software to Odoo CRM is a migration from a service-industry all-in-one platform into a modular ERP with a native CRM component. Bizstim organises data around Clients, Practitioners, Services, and Payments with per-session availability windows; Odoo separates Leads and Opportunities into a unified crm.lead model and uses res.partner for all contacts and companies. We map Bizstim's client records to Odoo res.partner with contact_type set, practitioner records to res.partner with is_company and employee flags where applicable, and Services to product.template with service_group hierarchies becoming product.category parent paths. Payment records transfer as account.move invoice drafts for manual post-review, and availability windows map to resource.calendar entries. Practitioner wage settings require a custom field on res.partner since Odoo handles practitioner payroll in the HR module rather than the CRM layer. We do not migrate Bizstim automations, workflow rules, or custom scheduling triggers as executable code; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or via custom development. The Odoo CRM module at $24.90 per user per month is the entry point; full ERP capabilities with Accounting, Inventory, and Project management require additional Odoo apps at higher per-seat cost.
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 Bizstim Business Management Software 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.
Bizstim Business Management Software
Client
Odoo CRM
res.partner
1:1Bizstim Client records map to Odoo res.partner with contact_type set to contact. The client availability fields (minTime, maxTime, slotDuration, sessionLimit) transfer as structured custom fields on the partner record. Client status flags map to Odoo customer_rank values for segmentation. Address, phone, and email fields migrate directly using standard Odoo field names. We resolve practitioner_id links from the source so that any client-practitioner assignments can be stored as custom fields or notes in Odoo, since the native res.partner model does not have a direct practitioner assignment field outside the HR module.
Bizstim Business Management Software
Practitioner
Odoo CRM
res.partner (company type)
1:1Bizstim Practitioner records map to Odoo res.partner with is_company set to true and contact_type set to contact, since Odoo does not have a native practitioner object in the CRM module. The practitioner_id is preserved as the res.partner id. Practitioner wage settings (practitioner_wage) and payment rate configurations require a custom field (x_practitioner_wage or x_practitioner_rate) created in Odoo Settings > Technical > Custom Fields before migration. If the customer uses Odoo HR module, we alternatively map to hr.employee with res_partner_id linking; this is decided during scoping.
Bizstim Business Management Software
Service
Odoo CRM
product.template
1:1Bizstim Service records map to Odoo product.template with type set to service. The service cost maps to Odoo standard_price, and any session count (group_num) from the source becomes a custom field x_session_count on the product.template. Service status (active, archived) maps to Odoo active field. If the customer uses Odoo Sale app, we create product.product variants for service variations. The product.uom_id is set to unit(s) for services. We flag any services with practitioner-specific rates for custom field migration.
Bizstim Business Management Software
Service Group
Odoo CRM
product.category
1:1Bizstim Service_group_names table entries with group_id map to Odoo product.category. The group_id becomes category_id, and the hierarchy path is preserved as complete_name in Odoo's category tree. If nested service groups exist in Bizstim (group_id referencing a parent group), we reconstruct the full category parent_path in Odoo. We create product.category records before product.template import so that the category_id lookup is satisfied at insert time. This mapping is required before Services can be imported.
Bizstim Business Management Software
Payment
Odoo CRM
account.move
1:manyBizstim Payment records map to Odoo account.move with move_type set to out_invoice (for invoices) or out_refund (for refunds). The payment amount and date transfer to amount_total and invoice_date respectively. Bizstim does not store a full accounting chart of accounts, so we create a default Receivable account on the customer res.partner and map all payment amounts against it. We import as draft invoices (state=draft) so that the customer's accountant can review and post them in Odoo Accounting before they affect financial reports. Currency field requires verification against Odoo's configured currencies list.
Bizstim Business Management Software
User
Odoo CRM
res.users
1:1Bizstim Users endpoint records map to Odoo res.users by email match. We extract user login, name, and active status. Role and permission data from Bizstim (admin, practitioner, staff) maps to Odoo groups: practitioners become members of the Sales / User group, staff members map to internal user groups. If the Bizstim user has a linked practitioner_id, we create the corresponding res.partner record first and link via partner_id on res.users. Active status migrates directly. We do not migrate password hashes; users must complete an Odoo password reset flow post-migration.
Bizstim Business Management Software
Staff
Odoo CRM
res.partner
1:manyBizstim Staff records are queryable via GET and contain largely the same data as Practitioner records, differentiated by staff_id. We deduplicate Staff against Practitioner by matching staff_id to practitioner_id. The merged record maps to a single res.partner entry with is_company set to true and a custom field x_staff_role set to the original staff role string. If staff records contain billing rate information not present in the practitioner record, we preserve the higher value. This deduplication prevents duplicate partner records in Odoo.
Bizstim Business Management Software
Calendar / Availability Slots
Odoo CRM
calendar.event
lossyBizstim client availability windows (minTime, maxTime, slotDuration, sessionLimit) do not have a direct Odoo CRM equivalent since Odoo separates calendar scheduling from contact records. We map these to resource.calendar entries if the Odoo Calendar app is installed, or store them as structured custom fields on res.partner (x_availability_min_time, x_availability_max_time, x_slot_duration, x_session_limit) if only CRM is deployed. For service practitioner availability, we create resource.calendar.attendance records. This is a configuration migration, not a direct field copy, and requires the Odoo Calendar module to be active.
Bizstim Business Management Software
Deal
Odoo CRM
crm.lead
1:1Bizstim Deal records map to Odoo crm.lead with type set to opportunity. The dealstage property maps to Odoo stage_id, which we configure in Odoo CRM > Stages before migration. Pipeline assignment from Bizstim maps to Odoo team_id (Sales Team). Closed-won and closed-lost dates map to Odoo's date_closed field. The deal amount becomes Odoo expected_revenue or list_price depending on whether product lines are attached. We use crm.lead because Odoo 16+ combines Lead and Opportunity into one model with a type switch.
Bizstim Business Management Software
Pipeline
Odoo CRM
crm.stage
lossyBizstim deal pipelines map to Odoo CRM stage configurations. Each Bizstim pipeline becomes a set of crm.stage records within a named team. Stage order and probability percentages migrate to sequence and on_change_stage_id probability values. We configure the pipeline via crm.team records in Odoo before migrating any crm.lead data, ensuring stage_id references are satisfied at insert time. Bizstim stage names are preserved as stage names unless the customer requests standard Odoo stage naming (New, Qualified, Proposition, Won, Lost).
Bizstim Business Management Software
Notes
Odoo CRM
mail.message
1:1Bizstim client notes and free-text fields migrate to Odoo mail.message records linked to the res.partner via model=res.partner and res_id pointing to the partner id. The note body transfers as body field in HTML format. mail.message is the Odoo standard for all conversation history, notes, and internal communication on a partner record. We preserve the original creation date as date for chronological ordering. Binary attachments associated with notes must be identified during scoping and exported separately as they are stored outside the standard client API response.
Bizstim Business Management Software
Attachments
Odoo CRM
ir.attachment
1:1Bizstim binary attachments stored within client or practitioner records migrate to Odoo ir.attachment linked via res_model=res.partner and res_id pointing to the target partner id. Attachment name maps to name field, binary content maps to datas field as base64-encoded bytes. External URLs stored in Bizstim convert to Odoo external attachment records with type=url. We extract attachments during the client and practitioner extraction phases and store them in a temporary file system before batch insertion via Odoo's ir_attachment XML-RPC endpoint. This mapping requires elevated permissions in Odoo.
| Bizstim Business Management Software | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Practitioner | res.partner (company type)1:1 | Fully supported | |
| Service | product.template1:1 | Fully supported | |
| Service Group | product.category1:1 | Fully supported | |
| Payment | account.move1:many | Fully supported | |
| User | res.users1:1 | Fully supported | |
| Staff | res.partner1:many | Fully supported | |
| Calendar / Availability Slots | calendar.eventlossy | Mapping required | |
| Deal | crm.lead1:1 | Fully supported | |
| Pipeline | crm.stagelossy | Fully supported | |
| Notes | mail.message1:1 | Fully supported | |
| Attachments | ir.attachment1: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.
Bizstim Business Management Software gotchas
API access requires an Enterprise account
1000 requests per hour rate limit per method per API key
Services endpoint returns a maximum of 100 records per page
No public bulk export or backup endpoint
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 Enterprise API verification
We audit the source Bizstim account to confirm Enterprise plan status and API key availability, which is required for any migration-grade extraction. We extract record counts for Clients, Practitioners, Services, Service Groups, Payments, Users, and Staff, and we document pagination requirements and total API request volume estimates. We also identify which Odoo apps are active or planned (CRM only, CRM + Accounting, or full ERP) and confirm whether the Odoo Calendar module is available for availability pattern migration. The discovery output is a written scope document with object counts, a recommended Odoo edition and app stack, and a confirmed Enterprise API access status.
Schema design and custom field provisioning
We design the destination Odoo schema before any data moves. This includes creating custom fields for practitioner wage data (x_practitioner_wage) on res.partner, availability window fields on res.partner if the Calendar app is not available, and session count fields on product.template. We configure product.category records to match Bizstim Service Group hierarchy, crm.stage records to match Bizstim Deal pipeline stages, and crm.team records for each Bizstim pipeline assignment. All schema changes deploy via Odoo Settings > Technical into a Sandbox org first for validation. We confirm the customer has an active Odoo database URL, database name, and API credentials before proceeding.
Sandbox migration and reconciliation
We run a full migration into the Odoo Sandbox environment using production-like data volumes. The customer's admin reconciles record counts (Partners in, Products in, Leads/Opportunities in, Invoices in, Calendar entries in) and spot-checks 25-50 random records against the Bizstim source. Key validation checks include confirming that practitioner_wage values appear in the custom fields, that Service Group hierarchies reconstruct correctly in product.category, and that payment amounts in account.move drafts match the original Bizstim payment records. The customer signs off the sandbox before production migration begins.
Partner and contact extraction and import
We extract Bizstim Client and Practitioner records via paginated GET requests, merging Staff and Practitioner records by staff_id deduplication. We import Practitioners first as res.partner with is_company=true and custom wage fields, then Clients as res.partner with contact_type=contact and availability fields. We resolve practitioner_id references from Bizstim and store them as custom fields on the Client record (x_assigned_practitioner_id). After each partner import phase we emit a row-count reconciliation report and compare against the discovery phase counts.
Product and category import
We extract Bizstim Service Group records and create product.category entries in Odoo, preserving the group_id hierarchy as category parent_path. We then extract Service records and create product.template entries with type=service, mapping group_id to category_id, cost to standard_price, and group_num to a custom session count field. If the Odoo Sale app is active, we create Standard Pricebook entries for each product. Product import runs after category import so that category_id lookups are satisfied.
CRM pipeline and opportunity migration
We extract Bizstim Deal records and map each to crm.lead with type=opportunity, mapping dealstage to stage_id (pre-configured in Odoo during schema design), pipeline to team_id, and amount to expected_revenue. We resolve the AccountId reference on crm.lead by matching the Bizstim client_id to the Odoo res.partner id. OwnerId resolves by email match against the Odoo res.users table, with unresolved owners placed in a reconciliation queue for the customer's admin to provision before record import resumes.
Payment history migration
We extract Bizstim Payment records and import as Odoo account.move drafts with move_type=out_invoice or out_refund. We create a default Receivable account on each customer partner record if one does not exist. All payment records import as draft state so the customer's accountant can review, correct account mappings, and post them in Odoo Accounting before they affect financial reports. We flag any payments with currency codes that do not match Odoo's configured currencies list for manual resolution during post-migration review.
Cutover, delta sync, and automation inventory delivery
We freeze Bizstim writes during the cutover window, run a final delta migration of any records created or modified since the last extraction phase, and validate record counts in Odoo match the source delta. We then enable Odoo as the system of record. We deliver the migration inventory document to the customer's admin team, including a list of all Bizstim automations, workflow triggers, and custom scheduling rules with Odoo Studio equivalents. We support a one-week hypercare window for reconciliation issues. We do not rebuild Bizstim automations in Odoo as part of the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Bizstim Business Management Software
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Bizstim Business Management Software and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Bizstim Business Management Software and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Bizstim Business Management Software and Odoo CRM.
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
Bizstim Business Management Software: 1000 requests per hour per HTTP method per API key.
Data volume sensitivity
Bizstim Business Management Software 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 Bizstim Business Management Software to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Bizstim Business Management Software 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 Bizstim Business Management Software
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.