CRM migration
Field-level mapping, validation, and rollback between Salesforce Field Service and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Salesforce Field Service
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Salesforce Field Service and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Salesforce Field Service runs on a managed package that wraps standard Salesforce objects (Account, Contact, Asset) with field-service-specific objects: WorkOrder, ServiceAppointment, Skill, WorkOrderLineItem, ServiceContract, and Entitlement. The dispatcher console, Gantt scheduling view, and mobile technician app are Salesforce Lightning components that have no direct counterpart in Twenty CRM. Twenty's standard object model covers People (contacts), Companies, Opportunities, Notes, and Tasks, but it has no native field-service scheduling or work-order management objects — these have to be built as custom objects. We map Salesforce WorkOrder to a custom Work_Order__c object in Twenty, ServiceAppointment to custom Service_Appointment__c, and Skills to custom Skill__c. Assets and Entitlements migrate to custom objects with type-aware field mapping. Salesforce's owner-based assignment (technician as User) maps to Twenty's workspace-member relation. The migration runs against Salesforce's Bulk API for high-volume record extraction, transforms to Twenty's REST or CSV import format, and uses a 24–48 hour delta pickup window to capture in-flight changes during cutover. All automations, Flow triggers, and scheduling recipes must be rebuilt in Twenty's workflow builder — we export those definitions as reference documents.
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 Salesforce Field Service object lands in Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Salesforce Field Service
Account
Twenty CRM
Company
1:1Salesforce Account maps directly to Twenty Company. Account.Name becomes Company.name, Account.Website maps to domainUrl, and Account.Industry maps to industry. Multi-address accounts collapse to one primary address in Twenty's single address field, with secondary addresses preserved as custom fields if needed. Parent Account hierarchies map via Company.parentId where available.
Salesforce Field Service
Contact
Twenty CRM
People
1:1Salesforce Contact maps to Twenty People with direct field-name equivalents for firstName, lastName, email, and phone. Contact.Title maps to jobTitle. The Contact's primary AccountId becomes People.companyId — the company must be imported before the contact so the foreign key resolves. N:N contact-to-account relationships in Salesforce are not represented in Twenty's standard People model; secondary company links require a custom junction object.
Salesforce Field Service
WorkOrder
Twenty CRM
Work_Order__c (custom object)
1:1Salesforce WorkOrder has no native equivalent in Twenty — we create a custom Work_Order__c object in Twenty's Settings → Data Model. Fields map: WorkOrder.Status to Work_Order__c.status (value mapping: In Progress→In Progress, Completed→Closed, etc.), WorkOrder.Priority to priority picklist, WorkOrder.Description to description, WorkOrder.SlaStartDate/WoDate to scheduledDate. OwnerId (technician User) resolves to Twenty workspace member by email match.
Salesforce Field Service
ServiceAppointment
Twenty CRM
Service_Appointment__c (custom object)
1:1ServiceAppointment maps to a custom Service_Appointment__c object linked to Work_Order__c. Appointment status (FSM states: Scheduled, Dispatched, In Progress, Completed, Cancelled) maps to a custom status__c pick-list. Schedules and FSL window times migrate to scheduledStartDate__c and scheduledEndDate__c datetime fields. The parent WorkOrderId becomes a relation field in Twenty's custom object.
Salesforce Field Service
WorkOrderLineItem
Twenty CRM
Line_Item__c (custom object, child of Work_Order__c)
1:1WorkOrderLineItem (parts and labor on a work order) maps to a custom Line_Item__c object with a relation to Work_Order__c. LineItem.Quantity maps to quantity__c, UnitCost to unitCost__c, and LineItem.TotalPrice to totalPrice__c. Product2 reference in Salesforce becomes a text Product__c field or a custom Product relation in Twenty, depending on whether a Products custom object is created.
Salesforce Field Service
Asset
Twenty CRM
Asset__c (custom object)
1:1Salesforce Asset (installed products linked to accounts and contacts) maps to a custom Asset__c object in Twenty. Asset.Name, SerialNumber, InstallDate, Status, and Product2 reference all migrate to corresponding fields. Asset.AccountId becomes Asset__c.accountId relation. Asset.ContactId becomes an optional Asset__c.contactId relation. The asset's relationship to WorkOrderLineItem requires a custom junction design in Twenty since there is no native many-to-many link.
Salesforce Field Service
Skill
Twenty CRM
Skill__c (custom object)
1:1Salesforce Skill (technician certifications and proficiency levels) maps to a custom Skill__c object in Twenty. Skill.SkillName maps to name__c. If Salesforce stores skill levels as separate pick-list values, these migrate to a proficiency__c pick-list on the custom object. Linking Skills to People (technicians) requires a custom Skill_Assignment__c junction object in Twenty, since Twenty's standard relation model does not support many-to-many person-to-skill links natively.
Salesforce Field Service
ServiceContract
Twenty CRM
Service_Contract__c (custom object)
1:1Salesforce ServiceContract (warranty and SLA terms) maps to a custom Service_Contract__c object linked to Account and Asset. Contract.StartDate, EndDate, and Status migrate to contractStartDate__c, contractEndDate__c, and status__c. Line items (ContractLineItem) on the contract migrate to separate contractLineItem__c records linked to the contract, capturing covered products and pricing terms.
Salesforce Field Service
Entitlement
Twenty CRM
Entitlement__c (custom object)
1:1Salesforce Entitlement (service entitlement linked to contact/account with business hours) maps to a custom Entitlement__c object in Twenty. Entitlement.Name, Status, StartDate, and EndDate migrate to corresponding fields. The BusinessHours reference migrates as businessHours__c text. Entitlement.IsPerIncident and remaining service credits migrate to a custom remainingIncidents__c number field. Since Twenty has no native BusinessHours object, service-level response windows are stored as text or recreated as workflow triggers.
Salesforce Field Service
User (technician/dispatcher)
Twenty CRM
WorkspaceMember
1:1Salesforce Users who own WorkOrders or ServiceAppointments are resolved by email match against Twenty workspace members. Unmatched owners are flagged before migration — your team either invites them to Twenty first or assigns records to a fallback member. Active/Inactive Salesforce User status does not translate to Twenty directly; inactive users in Salesforce are preserved as name/email in an ownerAudit__c field on migrated records but do not become active Twenty members.
Salesforce Field Service
WorkOrder (activity history)
Twenty CRM
Task / Note
1:1Work Order StatusHistory (stage-transition audit log) is not a standard child object in Salesforce Field Service — it is queryable via WorkOrderHistory. We extract the most recent status transitions and load them as Task records in Twenty linked to the Work_Order__c custom object, preserving original transition timestamps and the prior/new status values as task description content.
Salesforce Field Service
Attachment / Salesforce Files
Twenty CRM
Note / File (manual re-upload)
1:1Salesforce Files attached to WorkOrders, ServiceAppointments, and Assets (photos, signed forms, PDFs) do not migrate automatically. We export them to a ZIP archive and provide a file re-upload guide for your team — Twenty's UI supports file attachment on records but requires manual re-upload or API reconstruction. Attachments on standard Salesforce objects (Contact, Account) are similarly preserved as a downloadable archive with filename-to-record mapping.
| Salesforce Field Service | Twenty CRM | Compatibility | |
|---|---|---|---|
| Account | Company1:1 | Fully supported | |
| Contact | People1:1 | Fully supported | |
| WorkOrder | Work_Order__c (custom object)1:1 | Fully supported | |
| ServiceAppointment | Service_Appointment__c (custom object)1:1 | Fully supported | |
| WorkOrderLineItem | Line_Item__c (custom object, child of Work_Order__c)1:1 | Fully supported | |
| Asset | Asset__c (custom object)1:1 | Fully supported | |
| Skill | Skill__c (custom object)1:1 | Fully supported | |
| ServiceContract | Service_Contract__c (custom object)1:1 | Fully supported | |
| Entitlement | Entitlement__c (custom object)1:1 | Fully supported | |
| User (technician/dispatcher) | WorkspaceMember1:1 | Fully supported | |
| WorkOrder (activity history) | Task / Note1:1 | Fully supported | |
| Attachment / Salesforce Files | Note / File (manual re-upload)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.
Salesforce Field Service gotchas
250-record batch limit for Enhanced Scheduling optimization
Process Builder workflows do not migrate—must be rebuilt in Flow Builder
API rate limits vary by edition and are easy to exhaust during bulk migration
Storage overages at $125/GB inflate migration data costs
Custom fields and lookups require explicit field-level mapping
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Design Twenty custom object schema before extraction
FlitStack audits your Salesforce Field Service org to inventory all WorkOrder, ServiceAppointment, WorkOrderLineItem, Asset, Skill, ServiceContract, and Entitlement records, plus any custom fields on standard objects. We then deliver a Twenty Data Model setup plan: a list of custom objects to create in Settings → Data Model, fields to add to each, and pick-list values to configure. Your Twenty admin creates these objects before we begin data extraction. This step prevents import errors caused by missing fields — Twenty's CSV import fails rows with unmapped columns.
Extract Salesforce data via Bulk API with relationship sequencing
We query Salesforce using the Bulk API, sequencing objects so foreign-key dependencies resolve correctly: Account (and Company hierarchy) first, then Contact, then parent WorkOrders, then child ServiceAppointments and WorkOrderLineItems, then Asset, Skill, ServiceContract, and Entitlement. Owner/User records are queried separately for email-match preparation. Custom FSL objects (Appointment Dependency, Optimization Request, Gantt Filter) are inventoried for custom object mapping if needed. We preserve original CreatedDate, LastModifiedDate, and system IDs in custom fields for audit trail and delta-run de-duplication.
Run a sample migration with field-level diff
A representative sample — typically 200–500 records spanning accounts, contacts, work orders, appointments, and assets — is loaded into Twenty's staging workspace. We generate a field-level diff showing source Salesforce values against destination Twenty fields for every mapped property. You verify that WorkOrder status values, appointment times, technician assignments, and asset serial numbers match the source. This step catches value-mapping gaps (e.g., a Salesforce pick-list value that has no Twenty equivalent) before the full run. Approval gate: field-level accuracy above 99% before full migration commits.
Execute full migration with delta-pickup window
The full dataset is extracted from Salesforce and loaded into Twenty in the sequenced order established in step 2. During the cutover window — typically 24–48 hours — any records created or modified in Salesforce are captured by a delta extraction. FlitStack's audit log records every operation (create, update, link) so you can trace exactly what moved and when. After the delta is applied, a second field-level diff runs on modified records to confirm accuracy. One-click rollback is available if reconciliation identifies critical discrepancies.
Post-migration validation and workflow rebuild handoff
FlitStack validates record counts per object against the source Salesforce export, spot-checks relationship integrity (WorkOrders linked to correct Accounts, ServiceAppointments linked to correct WorkOrders, Assets linked to correct Accounts), and confirms that owner-email matches resolved to Twenty workspace members. We deliver a workflow rebuild specification — exported as a structured document — listing every Salesforce Flow, Process Builder process, and FSL scheduling recipe with its trigger logic, conditions, and actions so your Twenty admin can recreate automation in Twenty's workflow builder. File attachments (photos, signed forms) are delivered as a ZIP archive with record-ID metadata for manual re-upload.
Platform deep dives
Salesforce Field Service
Source
Strengths
Weaknesses
Twenty 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 Salesforce Field Service and Twenty 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
Salesforce Field Service: Per-org daily API limit starts at 100,000 requests / 24 hours for Enterprise Edition and scales with licenses purchased. Additional API calls can be purchased in 200-10,000 increments. Bulk API and Bulk API 2.0 share an allocation of 15,000 batch submissions per 24 hours. HTTP 429 returned when rate-limited..
Data volume sensitivity
Salesforce Field Service exposes a bulk API — large-volume migrations stream efficiently.
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 Salesforce Field Service to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Salesforce Field Service to Twenty 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 Salesforce Field Service
Other ways to arrive at Twenty 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.