CRM migration
Field-level mapping, validation, and rollback between Bushel CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Bushel CRM
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Bushel CRM and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Bushel CRM is built for agribusiness — grain buyers and ag retailers managing customer accounts, farm demographics, delivery destinations, and commodity-specific quotes. Its data model centers on customer accounts linked to contacts, with custom properties for farm size, primary commodity, and delivery season. Bushel does not expose a documented public API in its standard plans, which shapes how data must be extracted and transformed for migration. Odoo CRM uses res.partner for contacts and companies, crm.lead for both leads and opportunities, and crm.activity for logged calls, meetings, and notes. Its external API (XML-RPC / JSON-RPC) is available on Odoo Custom and Enterprise plans only; Odoo Community requires CSV-based import. Custom fields are created via Odoo's Settings > Technical > Custom Fields interface and carry a x_ prefix in the database. We export Bushel data via CSV, transform it to Odoo's import format, create any missing custom fields in Odoo before import, then run a sequenced load: partners first, then leads/opportunities, then activities. Agriculture-specific Bushel properties (farm size, commodity type, delivery destination, delivery season) migrate as custom fields on res.partner or crm.lead. Workflows, assignment rules, and automations are not migrated — we export Bushel workflow definitions as a rebuild reference for Odoo Automations.
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 Bushel 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.
Bushel CRM
Contact / Account Contact
Odoo CRM
res.partner
1:1Bushel contact records map to Odoo res.partner (contact type). We preserve the Bushel contact ID as x_bushel_id for traceability and delta-run de-duplication. If a Bushel contact has no associated company, we create a res.partner without a parent_id in Odoo. Original Bushel create_date is stored as x_original_create_date since Odoo sets CreatedDate at import time.
Bushel CRM
Customer Account
Odoo CRM
res.partner (company type)
1:1Bushel customer accounts map to Odoo res.partner with partner_type = 'company'. Bushel's N:N contact-to-account model means multiple Bushel contacts can reference the same account; in Odoo this collapses to one res.partner record with multiple contact children via child_ids relation. We flag any account with more than three linked contacts for manual review before committing.
Bushel CRM
Account Manager
Odoo CRM
crm.team + salesperson assignment
1:1Bushel assigns an account_manager_name to each customer account. Odoo CRM assigns leads to crm.team and opportunities to res.users via user_id. We map each unique Bushel account manager to a corresponding Odoo user by email match, creating the crm.team record if it does not already exist. Unmatched managers are flagged before migration and assigned to a fallback salesperson.
Bushel CRM
Activity (note, task, call)
Odoo CRM
crm.activity + mail.message
1:1Bushel activities logged against accounts map to Odoo's crm.activity model (for structured calls and meetings) and mail.message (for notes and general chatter). Activity type, subject, date, and owner are preserved. If Bushel stores activities with HTML or rich-text formatting, we strip to plain text for mail.message body compatibility.
Bushel CRM
Farm Demographics
Odoo CRM
Custom field on res.partner
1:1Bushel stores farm_demographics as a structured set of fields (farm size, acreage, storage capacity). Odoo has no native equivalent. We create x_farm_size (float), x_acreage (float), and x_storage_capacity (char) custom fields on res.partner before import. Values transfer directly; unit notation (acres vs. hectares) is preserved as stored in Bushel.
Bushel CRM
Primary Commodity
Odoo CRM
Custom field on res.partner
1:1Bushel records the primary_commodity grown or traded per account (e.g., corn, soybeans, wheat). Odoo CRM has no commodity field. We create x_primary_commodity as a selection field on res.partner with the exact pick-list values from Bushel. If Bushel uses a free-text commodity field, we create x_primary_commodity as char and deduplicate values post-import.
Bushel CRM
Delivery Destination
Odoo CRM
Custom field on res.partner
1:1Bushel delivery_destinations store the grain elevator or delivery point associated with each account. Odoo has no native delivery destination field. We create x_delivery_destination (char) on res.partner and transfer the destination name. If Bushel stores multiple destinations per account, the primary destination maps to x_delivery_destination and secondary destinations are appended to x_delivery_destination_notes.
Bushel CRM
Quote
Odoo CRM
sale.order
1:1Bushel quotes map to Odoo sale.order. Bushel line items (product, quantity, price) map to sale.order.line. Odoo sale.order must be linked to a res.partner (customer) and a crm.team (salesperson). If Bushel quotes are in draft state, they import as sale.order with state = 'draft'. If they are confirmed, state = 'sale'.
Bushel CRM
Attachment / File
Odoo CRM
ir.attachment
1:1Bushel file attachments (contracts, scale tickets, delivery confirmations) are re-uploaded to Odoo's ir.attachment table and linked to the corresponding res.partner or crm.lead record via res_model and res_id. Odoo Community has a 115 MB filestore limit per database; Odoo Enterprise and Custom have higher limits. We flag any attachment exceeding 25 MB before import.
Bushel CRM
Bushel Custom Property
Odoo CRM
Custom field on res.partner or crm.lead
1:1Bushel supports additional custom properties beyond standard fields. Each unique Bushel custom property that does not have a direct Odoo equivalent is created as a custom field (x_ prefix) on the appropriate Odoo model before migration. Custom properties are analyzed for type: text maps to char, numbers to float, dates to date, and pick-lists to selection fields.
Bushel CRM
Delivery Season
Odoo CRM
Custom field on res.partner
1:1Bushel tracks delivery_season (e.g., Fall 2024, Spring 2025) per account. Odoo has no native delivery season field. We create x_delivery_season (char) on res.partner. If Bushel stores season as a date range (start_date, end_date), we map to x_delivery_season_start and x_delivery_season_end as date fields.
Bushel CRM
Lead / Prospect
Odoo CRM
crm.lead
1:1Bushel prospects without an established customer account map to Odoo crm.lead. All Bushel contact fields, account manager assignment, and custom properties transfer to crm.lead fields with the same x_ prefix convention. A crm.lead in Odoo can later be converted to a res.partner via the Convert to Opportunity action, which creates the partner record and links the opportunity.
| Bushel CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact / Account Contact | res.partner1:1 | Fully supported | |
| Customer Account | res.partner (company type)1:1 | Fully supported | |
| Account Manager | crm.team + salesperson assignment1:1 | Fully supported | |
| Activity (note, task, call) | crm.activity + mail.message1:1 | Fully supported | |
| Farm Demographics | Custom field on res.partner1:1 | Mapping required | |
| Primary Commodity | Custom field on res.partner1:1 | Fully supported | |
| Delivery Destination | Custom field on res.partner1:1 | Fully supported | |
| Quote | sale.order1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Bushel Custom Property | Custom field on res.partner or crm.lead1:1 | Fully supported | |
| Delivery Season | Custom field on res.partner1:1 | Fully supported | |
| Lead / Prospect | crm.lead1: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.
Bushel CRM gotchas
Bushel Contract lifecycle stages are non-standard and require explicit mapping
Scale Tickets and commodity financials map as notes, not native objects
Bushel API is not publicly documented with published rate limits
ERP integration dependency can inflate migration complexity
Document eSign records are not migrated as binary files
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
Analyze Bushel data model and extract via CSV
FlitStack AI connects to your Bushel CRM instance and inventories the full data model — contacts, customer accounts, activities, quotes, attachments, and all custom properties. Since Bushel has no documented public API on standard plans, we extract via CSV export from the Bushel UI. We document every Bushel custom field, its data type, and pick-list values before mapping begins. If Bushel exports are missing required fields (e.g., create_date not included by default), we request a full export with all system fields enabled. This analysis step produces the field mapping spreadsheet that drives all subsequent transformation logic.
Create custom fields in Odoo before import
Before any data loads, FlitStack AI creates the required custom fields in your target Odoo instance. For Bushel CRM → Odoo, this includes x_farm_size, x_primary_commodity, x_delivery_destination, x_delivery_season, x_bushel_id, x_original_create_date, and any additional Bushel custom properties that lack Odoo equivalents. Custom fields are created via Odoo's Settings > Technical > Custom Fields interface (or via CSV import of ir.model.fields data for Odoo Custom/Enterprise). This step must complete before the data import CSV is loaded — if a column in the import CSV does not match an existing Odoo field (standard or custom), Odoo rejects the row. We verify each custom field is visible on the correct model (res.partner or crm.lead) before proceeding.
Transform and sequence the data load
Bushel CSV exports are transformed to Odoo's import format: column headers renamed to match Odoo field names, date formats standardized to YYYY-MM-DD, state and country values matched to Odoo's res.country.state and res.country records by name, and pick-list values mapped to Odoo selection field options. The load sequence is strict: res.partner (companies first, then contacts) → crm.lead → sale.order → crm.activity and mail.message → ir.attachment. This order respects Odoo's foreign-key constraints (contacts require existing parent companies; quotes require existing partners). Bushel's N:N contact-to-account relationship is collapsed per the primary-parent rule described in the gotchas section.
Run sample migration with field-level validation
A representative slice of records — typically 100–300 spanning contacts, companies, quotes, and activities — is imported first. FlitStack AI generates a field-level validation report comparing source values against destination fields for every mapped column. We verify that agriculture-specific custom fields (x_farm_size, x_primary_commodity) landed correctly, that parent_id lookups resolved, that dates preserved the original create_date, and that activity records attached to the correct res.partner or crm.lead. You review the validation report and approve the mapping before the full migration commits.
Full migration, delta pickup, and go-live handoff
The full dataset imports into your Odoo CRM. A delta-pickup window (typically 24–48 hours) captures any records modified in Bushel during the cutover — new contacts added by sales reps, updated farm profiles, or new quotes. After delta pickup, FlitStack AI delivers a migration audit log listing every record imported, every field mapped, and any records that failed validation with the reason. One-click rollback is available within 72 hours of go-live if reconciliation reveals data integrity issues. We also deliver the Bushel workflow definitions as a rebuild specification for your Odoo administrator.
Platform deep dives
Bushel CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Bushel CRM and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Bushel CRM and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Bushel CRM 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
Bushel CRM: Not publicly documented.
Data volume sensitivity
Bushel CRM 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 Bushel CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Bushel CRM 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 Bushel CRM
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.