CRM migration
Field-level mapping, validation, and rollback between SortScape and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
SortScape
Source
Odoo CRM
Destination
Compatibility
10 of 10
objects map 1:1 between SortScape and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
SortScape is a scheduling and job-management tool built for lawn-care and landscaping businesses. Its data model centers on a client list, job records, and individual job runs — all exportable as CSV but without a public REST API. The platform stores client name, contact details, address, job type, scheduled date, assigned staff, and basic notes. There is no native mechanism for exporting workflow rules or automation logic. Odoo CRM models its sales process differently. The core object is crm.lead, which acts as both a lead record and an opportunity depending on its stage. Contacts are stored as res.partner records and linked to leads via a partner_id field. Opportunities carry an expected_revenue amount and a stage_id that maps to Odoo's pipeline stages. Scheduled activities attach to leads via crm.activity records. We migrate SortScape clients to res.partner, job records to crm.lead, and individual visit entries to crm.activity — preserving original create timestamps and owner assignments. SortScape's custom job-type labels and site-level address fields become custom fields on Odoo's crm.lead model. Scheduling rules and route-optimization logic have no Odoo equivalent and must be rebuilt using Odoo's built-in activity scheduling tools.
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 SortScape 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.
SortScape
Client / Customer
Odoo CRM
res.partner
1:1SortScape client records map directly to Odoo's res.partner — the universal contact object. Client name maps to name, email to email, phone to phone. The client's primary address maps to street, city, state, zip via Odoo's contact address fields. Partners are imported first as the migration anchor since crm.lead records reference them.
SortScape
Job Record
Odoo CRM
crm.lead
1:1SortScape job records map to crm.lead. The job title becomes the lead's name field. Job status (active, completed, cancelled) maps to Odoo's lead_stage stages: New Lead for active jobs, Won for completed, Lost for cancelled. Job amount maps to expected_revenue on the lead. The SortScape client is linked via the partner_id on the lead.
SortScape
Job Run / Visit
Odoo CRM
crm.activity
1:1Individual job runs in SortScape — each scheduled visit at a job site — become crm.activity records attached to the parent crm.lead. The original visit date and duration are preserved in the activity's date and duration fields. Staff assignments are resolved by email match to Odoo user records. A visit note in SortScape maps to the activity's note body.
SortScape
Job Type / Property Label
Odoo CRM
Custom field on crm.lead
1:1SortScape custom property labels (such as job_category, service_type, or property_size) have no native Odoo equivalent. We create custom fields on crm.lead using Odoo's ir.model.fields API and import the values from the SortScape CSV export. Label names are preserved verbatim as field technical names.
SortScape
Staff / Team Member
Odoo CRM
res.users
1:1SortScape staff records are matched by email to Odoo res.users. If a staff member has no Odoo user account, their SortScape records are assigned to a fallback Odoo user designated during migration planning. SortScape's staff role or team label is preserved as a custom field on the user record for reporting.
SortScape
Job Site Address
Odoo CRM
res.partner (address fields) + crm.lead
1:1SortScape stores a separate job-site address per job record. This address is stored as a mailing address on the crm.lead using Odoo's street/city/state/zip fields. The job-site address does not create a separate res.partner unless the site is also a billing client — this is flagged for admin review during migration.
SortScape
Xero Invoice Reference
Odoo CRM
Custom field on crm.lead
1:1SortScape's Xero integration stores invoice reference numbers on job records. Odoo CRM has no native Xero sync field — the invoice reference is preserved as a custom Char field on crm.lead (x_xero_invoice_ref) for audit traceability. Odoo Accounting is the destination-side module for invoice rebuilds.
SortScape
Job Attachments / Photos
Odoo CRM
ir.attachment
1:1SortScape file attachments on jobs are downloaded and re-uploaded to Odoo's ir.attachment table, linked to the corresponding crm.lead via res_model and res_id. Odoo's attachment size limit (default 25MB per file) applies. Inline images in job notes are extracted and stored separately.
SortScape
Job Notes / Internal Comments
Odoo CRM
mail.message on crm.lead
1:1SortScape job notes and internal comments migrate to Odoo's mail.message thread on the crm.lead. Original create dates are preserved as mail.message create_date. Author is resolved by email match to Odoo users, with a system-user fallback if no match is found.
SortScape
Workflow / Automation Rules
Odoo CRM
Not migratable
1:1SortScape's route-optimization rules, scheduling alerts, and internal notification logic have no Odoo equivalent and cannot be migrated. These must be rebuilt in Odoo using Odoo's activity-scheduling and server-action tools. We provide a written export of SortScape's automation logic as a rebuild reference for your Odoo admin.
| SortScape | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client / Customer | res.partner1:1 | Fully supported | |
| Job Record | crm.lead1:1 | Fully supported | |
| Job Run / Visit | crm.activity1:1 | Fully supported | |
| Job Type / Property Label | Custom field on crm.lead1:1 | Fully supported | |
| Staff / Team Member | res.users1:1 | Fully supported | |
| Job Site Address | res.partner (address fields) + crm.lead1:1 | Fully supported | |
| Xero Invoice Reference | Custom field on crm.lead1:1 | Fully supported | |
| Job Attachments / Photos | ir.attachment1:1 | Fully supported | |
| Job Notes / Internal Comments | mail.message on crm.lead1:1 | Fully supported | |
| Workflow / Automation Rules | 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.
SortScape gotchas
Export is desktop-only and admin-restricted
Route optimization settings do not persist as data
Xero invoice links break on migration
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
Audit and extract SortScape CSV exports
FlitStack AI guides your SortScape administrator through exporting client lists, job records, job-run visit histories, and attachments from the SortScape web UI. We validate the export completeness against SortScape's record counts and flag any truncated fields, missing columns, or permission issues (only admin accounts can export). Custom property names are captured from the export headers for Odoo field creation planning.
Create Odoo custom fields and resolve user accounts
Before data moves, FlitStack AI creates custom fields on Odoo's crm.lead and res.partner models based on SortScape's custom property labels. Staff email addresses from SortScape are matched to Odoo res.users by email — unmatched staff are flagged so your Odoo admin can provision user accounts or assign a fallback owner before migration. The Odoo schema is locked once custom fields are created.
Import res.partner records first, then crm.lead, then crm.activity
Odoo requires parent records to exist before child records reference them. We sequence the migration: res.partner (clients) first, then crm.lead (jobs linked to partners via partner_id), then crm.activity (individual visits linked to leads via res_id). This foreign-key ordering prevents orphaned lead records. Original create timestamps from SortScape are preserved in custom datetime fields since Odoo's create_date is set at import time.
Run a sample migration with field-level diff
A representative slice — typically 100–300 records covering a range of job types, visit histories, and staff assignments — migrates into Odoo first. FlitStack AI generates a field-level diff comparing source CSV values against Odoo database values so your team can verify job-type custom field mapping, stage assignment, partner linking, and activity attachment before the full run commits. This dry‑run also checks data‑type compatibility and flags any missing required fields before the main import proceeds.
Execute full migration with delta-pickup window
The full migration runs against your Odoo instance. A delta-pickup window of 24–48 hours captures any new or modified SortScape records created during the cutover. Audit logs record every imported record's source ID, import timestamp, and Odoo ID. One-click rollback is available if reconciliation fails. Post-migration, we deliver a written summary of any SortScape automation logic that requires manual rebuild in Odoo.
Platform deep dives
SortScape
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 SortScape 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
SortScape: Not publicly documented.
Data volume sensitivity
SortScape 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 SortScape to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your SortScape 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 SortScape
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.