CRM migration
Field-level mapping, validation, and rollback between StreetSmart and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
StreetSmart
Source
Odoo CRM
Destination
Compatibility
13 of 13
objects map 1:1 between StreetSmart and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
StreetSmart CRMs typically store contacts, companies, deals, and activities with owner assignments and basic pipeline stage tracking. Odoo CRM consolidates these into two primary models: res.partner for contacts and companies (with address book semantics), and crm.lead for leads and opportunities with a kanban-stage pipeline. The migration maps StreetSmart contacts to res.partner, StreetSmart companies to res.partner records with a company flag, and StreetSmart deals to crm.lead with stage values translated via Odoo's stage pick-list per pipeline. Custom fields from StreetSmart land as ir.property or custom.char fields on the respective Odoo model. Owner resolution runs by email match against Odoo res.users. Activity history (calls, emails, meetings, notes) migrates as mail.message records attached to the parent crm.lead or res.partner. FlitStack sequences the load so foreign-key dependencies resolve correctly — partners before leads, then activities. Workflows, automation rules, and email templates do not migrate and must be rebuilt in Odoo Studio or via Odoo actions. The migration uses Odoo's xmlrpc external API with authenticated session handling, respecting batch-size limits to avoid rate-throttling on larger datasets.
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 StreetSmart 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.
StreetSmart
Contact
Odoo CRM
res.partner
1:1StreetSmart contacts map directly to Odoo res.partner records. Set partner's is_company = False. Use Odoo's address fields (street, city, state_id, country_id, zip) to match StreetSmart's address properties. Email and phone map to standard contact fields. Ensure that each contact's timezone is captured in a custom field if needed for reporting, and set the partner's type to 'contact' to distinguish from company records.
StreetSmart
Company
Odoo CRM
res.partner (company type)
1:1StreetSmart companies map to Odoo res.partner with is_company = True. Parent-child company hierarchies in StreetSmart map to Odoo's parent_id on res.partner — the parent company record must migrate first to avoid circular-reference errors. If a company lacks a parent, assign it to a root-level placeholder partner to maintain referential integrity and simplify downstream reporting.
StreetSmart
Deal
Odoo CRM
crm.lead
1:1StreetSmart deals migrate as Odoo crm.lead records. Set type = 'opportunity' for deals with active revenue; set type = 'lead' for pre-revenue pipeline entries. The crm.lead.name maps from StreetSmart deal name. Ensure that the deal amount is stored in the planned_revenue field, and map any custom probability values to the probability field, preserving the original sales forecasting data.
StreetSmart
Pipeline
Odoo CRM
crm.team + crm.stage
1:1StreetSmart pipelines become Odoo crm.team records, one per pipeline. Each pipeline's stage set becomes crm.stage records linked to that team via team_id. This allows Odoo's kanban view to display pipeline-specific stages correctly. If multiple pipelines share identical stage names, FlitStack still creates distinct stage records per team to maintain uniqueness and avoid stage-id conflicts in the kanban layout.
StreetSmart
Pipeline Stage
Odoo CRM
crm.stage
1:1Stage names map value-by-value per pipeline. Odoo requires stage sequence ordering and optional probability values per stage. Preserving StreetSmart stage-entered timestamps requires a custom datetime field on crm.lead. Map each StreetSmart stage label to an Odoo stage with the correct sequence index and assign the corresponding probability percentage to align forecasting expectations.
StreetSmart
Activity (Call/Email/Meeting)
Odoo CRM
mail.message + mail.activity
1:1StreetSmart activity sub-records map to Odoo mail.message records attached to the parent crm.lead or res.partner via res_model and res_id. Use mail.message.subtype_id to classify activity type (email, call, meeting) and preserve original timestamps. If an activity lacks a subtype mapping, assign the generic 'Note' subtype to keep the record visible in Odoo's activity stream without losing historical context.
StreetSmart
Note / Attachment
Odoo CRM
ir.attachment
1:1StreetSmart file attachments and inline notes re-upload to Odoo's ir.attachment model linked to the parent record. Odoo's attachment storage (filestore or external) must be confirmed before migration. Inline note content migrates as mail.message with empty subtype. Verify that the storage location has sufficient capacity for all uploaded files and set appropriate access rights to protect sensitive documents during the transition.
StreetSmart
Owner / User
Odoo CRM
res.user
1:1StreetSmart owner_id on each record resolves by email match against Odoo res.users. Unmatched owners are flagged before migration runs; assign them to a fallback Odoo user or invite them to Odoo first. No record lands without an Odoo user owner.
StreetSmart
Custom Field (Contact)
Odoo CRM
ir.model.fields (x_ prefix) on res.partner
1:1StreetSmart custom fields on contacts require Odoo custom field creation via Odoo Studio or direct ir.model.fields writes before data loads. Field type mapping: text → char, number → float, pick-list → selection, date → date. Track field creation as a pre-migration step.
StreetSmart
Custom Field (Deal)
Odoo CRM
ir.model.fields (x_ prefix) on crm.lead
1:1StreetSmart deal-level custom properties migrate as Odoo custom fields on crm.lead. Priority flags, deal sources, and custom scoring fields require pre-creation in Odoo before migration data is loaded. Note that Odoo Enterprise offers field-level access rules; Community edition treats all custom fields as universally visible.
StreetSmart
Association (Contact-to-Company)
Odoo CRM
res.partner (address home) / child_ids
1:1StreetSmart N:1 contact-to-company associations map to Odoo's child_ids on the company res.partner record. Contacts without a primary company in StreetSmart attach to a designated 'Unassigned Contacts' res.partner stub record. Ensure the stub partner is marked as inactive to prevent it from appearing in active partner searches, and set its name to 'Unassigned Contacts' for clear identification in reports.
StreetSmart
Lead Status
Odoo CRM
crm.lead.stage_id
1:1StreetSmart lead status values map to Odoo crm.stage via value mapping per pipeline. New, Contacted, Qualified, Lost, Won — each maps to an Odoo stage with appropriate sequence position and probability percentage. If a lead status does not have a direct Odoo counterpart, create a custom stage with a neutral probability and label it to preserve the original categorization.
StreetSmart
System ID / Audit Trail
Odoo CRM
x_source_id (custom char on target object)
1:1Store StreetSmart's internal record ID as a custom char field (e.g., x_source_id) on each Odoo record. This enables delta-run de-duplication, rollback traceability, and cross-referencing during reconciliation. Populate x_source_id with the original StreetSmart identifier before any transformations, and index the field in PostgreSQL for fast lookups during incremental syncs.
| StreetSmart | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (company type)1:1 | Fully supported | |
| Deal | crm.lead1:1 | Fully supported | |
| Pipeline | crm.team + crm.stage1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Activity (Call/Email/Meeting) | mail.message + mail.activity1:1 | Fully supported | |
| Note / Attachment | ir.attachment1:1 | Fully supported | |
| Owner / User | res.user1:1 | Fully supported | |
| Custom Field (Contact) | ir.model.fields (x_ prefix) on res.partner1:1 | Fully supported | |
| Custom Field (Deal) | ir.model.fields (x_ prefix) on crm.lead1:1 | Fully supported | |
| Association (Contact-to-Company) | res.partner (address home) / child_ids1:1 | Fully supported | |
| Lead Status | crm.lead.stage_id1:1 | Fully supported | |
| System ID / Audit Trail | x_source_id (custom char on target object)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.
StreetSmart gotchas
StreetSmart API requires explicit key provisioning
Work Order status enumeration may differ between StreetSmart editions
Attachment metadata stored outside the primary Work Order record
Custom fields schema is not discoverable via public documentation
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
Extract StreetSmart data via API with audit of schema
FlitStack connects to StreetSmart's export API using scoped read access and extracts all standard objects: contacts, companies, deals, pipelines, stages, and activities. A schema audit compares StreetSmart's custom field list against Odoo's field catalog to identify custom field creation requirements before migration data is loaded. The extract phase runs read-only against StreetSmart — your team continues working uninterrupted. During extraction, FlitStack logs record counts and flags any API pagination anomalies to ensure complete data capture.
Pre-create Odoo teams and crm.stage records
Before any data lands in Odoo, FlitStack creates crm.team records for each StreetSmart pipeline and populates crm.stage records with the corresponding stage names, sequence positions, and probability values. This step converts StreetSmart's flat stage model into Odoo's team-scoped stage architecture. Your Odoo admin reviews the team-stage plan and approves or consolidates pipelines before stage records are committed. If your organization uses multiple sales units, each unit receives its own crm.team to preserve pipeline isolation and reporting accuracy.
Resolve owner and user assignments by email
StreetSmart owner IDs resolve to Odoo res.users records via email address matching. Unmatched owners — those without an Odoo user account — are listed in a pre-migration exception report. Your team either invites those users to Odoo or designates a fallback owner before the full migration run. No crm.lead or res.partner record is created without a resolved user_id, ensuring your Odoo pipeline populates with the correct salesperson attribution.
Run sample migration with field-level diff
A representative sample — typically 200–500 records spanning contacts, companies, deals, and activities — migrates first into a staging Odoo database. FlitStack generates a field-level diff report comparing source values against Odoo field values after transformation. You verify that pipeline-to-stage mapping is correct, owner resolution worked, and custom field values landed as expected. Approval of the sample diff triggers the full migration.
Execute full migration with delta-pickup window
The full dataset loads into Odoo using chunked xmlrpc writes respecting API rate limits. A delta-pickup window of 24–48 hours runs concurrently, capturing any StreetSmart records modified during the cutover window. All operations are written to FlitStack's audit log. If reconciliation finds discrepancies — missing records, failed foreign-key resolutions, or duplicate detection — FlitStack provides a one-click rollback to the pre-migration snapshot before your team goes live on Odoo CRM.
Platform deep dives
StreetSmart
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 StreetSmart 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
StreetSmart: Rate-limit thresholds are not publicly documented on the developer portal.
Data volume sensitivity
StreetSmart 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 StreetSmart to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your StreetSmart 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 StreetSmart
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.