CRM migration
Field-level mapping, validation, and rollback between ServiceTitan and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
ServiceTitan
Source
Salesforce Sales Cloud
Destination
Compatibility
11 of 12
objects map 1:1 between ServiceTitan and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
48–72 hours
Overview
ServiceTitan stores everything in a unified field-service object model: customers linked to service locations, jobs tied to those locations, and technicians assigned through a dispatch board. Invoicing, payments, and maintenance agreements are native to the platform. Salesforce Sales Cloud uses a traditional CRM object graph — Accounts, Contacts, Leads, and Opportunities — with Cases for service tracking and custom __c objects for anything non-standard. The migration challenge is threefold: converting ServiceTitan's customer-and-location model into Salesforce's Account hierarchy, translating job records into Cases or Opportunities depending on their financial vs. service context, and rebuilding ServiceTitan's dispatch and scheduling model in Salesforce Field Service (a separate product) or via custom objects. FlitStack AI extracts data via the ServiceTitan API, maps each record type to its Salesforce equivalent, handles custom field translation, and delivers a field-level diff before the full run commits. Workflows, automations, and dispatch rules do not migrate — we export definitions for your Salesforce admin to rebuild in Flow or Field Service.
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 ServiceTitan object lands in Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
ServiceTitan
Customer
Salesforce Sales Cloud
Account
1:1ServiceTitan customers map directly to Salesforce Accounts. A customer can have multiple service locations — these become either child Account records (for multi-location corporate customers) or Address records attached to the primary Account. Primary contact details migrate as Account.Phone and Account.BillingAddress fields.
ServiceTitan
Customer Contact
Salesforce Sales Cloud
Contact
1:1Each customer in ServiceTitan can have multiple named contacts (homeowner, property manager, billing contact). These map to Salesforce Contact records linked via AccountId to the parent Account. Phone, email, and role fields migrate directly. No contact-role equivalent exists for homeowner vs. property-manager distinction — we preserve this as a custom Role__c pick-list.
ServiceTitan
Service Location
Salesforce Sales Cloud
Account (child) or Address fields
1:1ServiceTitan service locations are address-specific job destinations attached to a customer. For residential customers, location address fields migrate as Account.BillingAddress. For commercial multi-location customers, each location becomes a child Account with its own address and a ParentId linking to the primary Account — your admin decides the hierarchy rule before migration.
ServiceTitan
Job (Work Order)
Salesforce Sales Cloud
Case
1:1ServiceTitan jobs map to Salesforce Cases for service-history tracking. Case.Status maps from Job.Status (e.g., Scheduled → Open, Completed → Closed). Case.Description carries the job summary. Original job number stored as an external ID field (ST_Job_ID__c) for traceability. Jobs with no invoice component stay as Cases only.
ServiceTitan
Job (with Invoice)
Salesforce Sales Cloud
Case + Opportunity
many:1Jobs that generated an invoice in ServiceTitan require a two-object strategy: the service record lands as a Salesforce Case, and the invoice data (total amount, line items) creates an Opportunity record. The Opportunity links back to the Account and carries the Case number as a custom reference field. Your admin decides whether to consolidate this into a single reporting object post-migration.
ServiceTitan
Technician
Salesforce Sales Cloud
User or Contact
1:1ServiceTitan technicians are platform users with dispatch-board presence. In Salesforce, CRM users require full Salesforce licenses. For read-only or field-only users, we map technicians to Contact records in a designated Technicians account, preserving name, phone, certifications, and skill tags as custom fields. If you have Field Service Lightning licensing, technicians map to ServiceResource objects instead.
ServiceTitan
Maintenance Agreement
Salesforce Sales Cloud
Contract or Custom Agreement__c object
1:1ServiceTitan maintenance agreements store coverage scope, contract start/end dates, and included service types. Salesforce Contract is the native equivalent but lacks built-in coverage-scope tracking. We create a custom Agreement__c object with fields for Coverage_Scope__c (multi-select pick-list), Recurrence_Frequency__c, and Included_Service_Types__c, linked to Account via AccountId.
ServiceTitan
Invoice
Salesforce Sales Cloud
Opportunity with Products or Custom Invoice__c object
1:1ServiceTitan invoices carry line items, tax, payments applied, and balance due. For reporting continuity, we map invoice totals to Opportunity.Amount and invoice line items to OpportunityLineItems (requires Pricebook entry setup). Alternatively, for invoice-level detail, we create a custom Invoice__c object with Invoice_Line_Items__c as a related list — your admin chooses the model before migration.
ServiceTitan
Payment
Salesforce Sales Cloud
Custom Payment__c object or Opportunity Payment fields
1:1ServiceTitan payment records (method, amount, date, applied-to invoice) have no Salesforce standard equivalent. We create a custom Payment__c object linked to Account and optionally to the related Invoice__c or Opportunity. Fields include Payment_Method__c, Amount_Paid__c, Payment_Date__c, and Applied_To_Invoice__c lookup. Each Payment__c record can be linked to the corresponding Invoice__c or Opportunity for straightforward reference and reporting.
ServiceTitan
Custom Fields (Customer/Location/Job)
Salesforce Sales Cloud
Custom Fields (__c)
1:1ServiceTitan custom fields on any object (Customer, Location, Job, Technician) require Salesforce custom fields created before migration. We prefix them with ST_ to indicate source system and match ServiceTitan field types to Salesforce equivalents: text → Text(255), number → Number, date → Date, picklist → Picklist. Custom fields on Job that reference inventory parts map to a custom Inventory_Reference__c text field.
ServiceTitan
Parts/Inventory used on Job
Salesforce Sales Cloud
Custom Job_Part__c junction object or OpportunityLineItem
1:1ServiceTitan jobs track parts used with quantity, unit cost, and markup. Salesforce has no native job-parts model. We create a custom Job_Part__c object linked to the Case and to a Product2 record, capturing Part_Name__c, Quantity__c, Unit_Cost__c, and Markup__c. If your team uses CPQ, parts can map to OpportunityLineItems via a pricebook entry.
ServiceTitan
Job Attachments/Files
Salesforce Sales Cloud
ContentDocument / Salesforce Files
1:1ServiceTitan file attachments on jobs (photos, signed documents, diagnostic reports) migrate as Salesforce Files attached to the related Case record. File size limits per Salesforce (25MB default) apply — larger files flagged for chunked upload or alternate storage link. This approach preserves file metadata and ensures attachments are accessible within Salesforce's native file viewer.
| ServiceTitan | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Customer | Account1:1 | Fully supported | |
| Customer Contact | Contact1:1 | Fully supported | |
| Service Location | Account (child) or Address fields1:1 | Fully supported | |
| Job (Work Order) | Case1:1 | Fully supported | |
| Job (with Invoice) | Case + Opportunitymany:1 | Fully supported | |
| Technician | User or Contact1:1 | Fully supported | |
| Maintenance Agreement | Contract or Custom Agreement__c object1:1 | Fully supported | |
| Invoice | Opportunity with Products or Custom Invoice__c object1:1 | Fully supported | |
| Payment | Custom Payment__c object or Opportunity Payment fields1:1 | Fully supported | |
| Custom Fields (Customer/Location/Job) | Custom Fields (__c)1:1 | Fully supported | |
| Parts/Inventory used on Job | Custom Job_Part__c junction object or OpportunityLineItem1:1 | Fully supported | |
| Job Attachments/Files | ContentDocument / Salesforce Files1: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.
ServiceTitan gotchas
Per-technician pricing masks true cost for mixed teams
No publicly documented bulk export API endpoint
Address validation required for Service Locations to enable routing
Purchasing migration can permanently stall
QuickBooks mapping assumes QBD desktop edition field conventions
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Inventory ServiceTitan objects and map to Salesforce schema
FlitStack connects to ServiceTitan via API and inventories all customer, location, job, technician, invoice, and payment records. We generate a mapping plan that assigns each ServiceTitan object to its Salesforce equivalent — identifying which jobs need dual Case+Opportunity creation, which customers require Account hierarchy decisions, and which custom fields need Salesforce __c fields created. Your Salesforce admin reviews and approves the plan before any objects are created in your org.
Create Salesforce custom objects and fields
Before data loads, FlitStack creates all required Salesforce custom objects (Agreement__c, Payment__c, Job_Part__c) and custom fields (__c suffix) on standard objects (Account, Contact, Case). We apply field-level security defaults and add the ST_ prefix to custom fields for source traceability. This step requires a Salesforce admin to validate field-level security settings per profile before migration runs. We also set up field-level security profiles, assign the appropriate field-level access for each profile, and document the field mapping in the pre-migration diff for admin sign-off.
Resolve technician and owner mappings by email
ServiceTitan technicians and job owners are matched to Salesforce Users by email address. Unmatched technicians are flagged and held — your team either creates Salesforce User accounts for them before migration or approves a fallback Contact-based mapping. No job record lands in Salesforce without an owner resolved; this prevents orphaned Cases that nobody can see. Additionally, we record the original ServiceTitan technician ID in a custom field on the matched User or Contact record to maintain traceability across systems.
Run a sample migration with field-level diff
A representative slice of 100–500 records migrates first: a mix of customers, service locations, contacts, jobs (with and without invoices), and maintenance agreements. FlitStack generates a field-level diff showing every source value and its destination equivalent. You verify that job-to-Case mapping preserves status, that invoice totals land correctly in Opportunity.Amount, and that technician assignments resolve correctly. Sample validation typically takes one business day.
Execute full migration with delta-pickup window
Full migration runs against your Salesforce production org using the mapping plan approved during the sample phase. A delta-pickup window (typically 24–48 hours) runs concurrently — any ServiceTitan records created or modified during the cutover window are captured and applied to Salesforce before go-live. FlitStack generates an audit log of every record inserted, updated, or skipped. One-click rollback reverts the Salesforce org to its pre-migration state if reconciliation reveals data quality issues.
Deliver export of ServiceTitan workflow and dispatch definitions
FlitStack exports your ServiceTitan automation definitions — dispatch rules, notification triggers, and renewal alerts — as a structured reference document. These definitions do not migrate (no platform translates ServiceTitan's automation logic to Salesforce Flow automatically), but the export gives your Salesforce admin a rebuild checklist organized by object. We do not rebuild automations; that scope requires a separate discovery and configuration engagement.
Platform deep dives
ServiceTitan
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 ServiceTitan and Salesforce Sales Cloud.
Object compatibility
2 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
ServiceTitan: 60 requests per second per application per tenant for regular APIs; reporting APIs limited to 1 of the same report per minute.
Data volume sensitivity
ServiceTitan 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 ServiceTitan to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your ServiceTitan to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave ServiceTitan
Other ways to arrive at Salesforce Sales Cloud
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.