CRM migration
Field-level mapping, validation, and rollback between Connect Field Service and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Connect Field Service
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Connect Field Service and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Connect Field Service (built on Dynamics 365 Field Service) stores field service data in work-order-centric objects: WorkOrder, ServiceAppointment, BookableResource, and FSSkill. Twenty CRM is a general-purpose CRM built around People, Companies, Opportunities, Tasks, and custom objects — no native scheduling, work-order, or resource-management constructs. The migration maps Connect Field Service WorkOrder records to Twenty Opportunities, ServiceAppointment records to Tasks, and Asset records to a custom object. Resource, skill, and territory assignments that drive Connect Field Service scheduling have no native destination equivalent and are surfaced as custom fields or exported for manual rebuild. FlitStack AI extracts data via the Connect Field Service / Dynamics 365 REST API, applies field-level transformations (price-list price extraction, address flattening, datetime normalization), and loads into Twenty via Twenty's REST and GraphQL APIs. Booking rules, work order routing rules, and FSSkill associations must be rebuilt manually — FlitStack delivers an export of those definitions as a rebuild reference.
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 Connect 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.
Connect Field Service
WorkOrder
Twenty CRM
Opportunity
1:1WorkOrder maps to Twenty Opportunity. WorkOrder.Name maps to Opportunity.name. WorkOrder FS-TotalPrice (from price-list lines) maps to Opportunity.amount. WorkOrder jigsaw_address fields are flattened into custom address fields on the Opportunity. Status reason values map via a value-mapping table to Twenty Opportunity stage strings.
Connect Field Service
ServiceAppointment
Twenty CRM
Task
1:1ServiceAppointment maps to Twenty Task. The ScheduledStart and ScheduledEnd datetimes become the Task due date. The actual work performed (from WorkOrder) is stored as a note linked to the Task. Latitude/longitude from CFS mapping is stored as custom number fields if needed.
Connect Field Service
Account
Twenty CRM
Company
1:1Account maps 1:1 to Twenty Company. Account.Name maps to Company.name, Account.Address maps to the full set of Company address fields (street, city, state, postal code, country), and Account.Phone maps to Company.phone. Primary-contact links from Account to Contact are turned off during migration — instead, rely on the Contact object mapping to establish Person-to-Company relationships independently after the Contact import completes.
Connect Field Service
Contact
Twenty CRM
Person
1:1Contact maps to Twenty Person. FullName maps to Person.name, Email maps to Person.email, and Telephone maps to Person.phone. The Contact's parent Account is linked via the Person.companyId relation, but this linkage is established only after the Company import completes and the source_account_id foreign key is available for resolution. This dependency order ensures referential integrity across the migrated dataset.
Connect Field Service
Asset
Twenty CRM
Custom Object: Asset
1:1Asset has no native equivalent in Twenty CRM. We create a custom object named 'Asset' in Twenty. Asset.Name, Product.Name, AccountId, InstallDate, and SerialNumber map to custom fields. The parent Account link is preserved as a Company relation on the custom object.
Connect Field Service
Product2
Twenty CRM
Custom Object: Product
1:1Connect Field Service's product catalog (Product2) has no native destination equivalent in Twenty's base schema. A custom object named 'Product' is created; Name, ProductCode, Description, and BasePrice map to custom fields. The Opportunity.ProductId reference becomes a relation to this custom object.
Connect Field Service
WorkOrderProduct
Twenty CRM
Custom Object: Work Order Line Item
1:1WorkOrderProduct line items (each price-list entry on a WorkOrder) map to a custom object linked to the Opportunity. Quantity, UnitAmount, and ProductName are stored as custom fields on this object, preserving the per-line pricing that Connect Field Service stores in its price-list model.
Connect Field Service
BookableResource
Twenty CRM
Custom Object: Field Resource
1:1BookableResource (field technicians and dispatchers) has no native Twenty equivalent. A custom object named 'Field Resource' is created. Resource.Name, ResourceType, and IsActive map to custom fields. The WorkOrder.OwnerId / ServiceResource映射 to this custom object after users are invited to Twenty.
Connect Field Service
FSSkill
Twenty CRM
Custom Object: Skill
1:1FSSkill (skill taxonomy used for resource-booking constraints) has no native Twenty equivalent. A custom object named 'Skill' is created with Name and Rating fields. Resource-to-Skill associations (FSSkillAssociation) are stored as junction records linking the Field Resource custom object to the Skill custom object.
Connect Field Service
msdyn_workordersummary
Twenty CRM
Note
1:1Work order summary notes and internal dispatch comments stored in the WorkOrder msdyn_description field are migrated as Twenty Notes attached to the corresponding Opportunity, preserving original timestamps and the user who created the note. The note body is copied verbatim from Dynamics, and the original createdon and modifiedon timestamps are stored in custom date fields on each Note record for audit trail purposes.
Connect Field Service
FieldServiceProduct
Twenty CRM
Note (on Asset)
1:1Field service product associations (product used on a specific asset at a specific location) are preserved as Notes attached to the Asset custom object, since Twenty has no native asset-product relationship model. The Note body includes the product name, version or model number, and installation date extracted from the FieldServiceProduct record, providing a searchable history of which products have been deployed on each asset without requiring a custom junction object.
Connect Field Service
ResourceTerritory
Twenty CRM
Custom Object: Territory
1:1Resource territories (geographic regions used for dispatch optimization) are stored as a custom Territory object linked to Field Resource records. TerritoryName and Longitude/Latitude boundaries map to custom fields on the Territory object, enabling reporting on technician coverage areas in Twenty even though Twenty's native data model does not include geographic boundary definitions. Each Field Resource record references its assigned Territory via a relation field, maintaining the dispatch-team-to-region linkage from the original Dynamics configuration.
| Connect Field Service | Twenty CRM | Compatibility | |
|---|---|---|---|
| WorkOrder | Opportunity1:1 | Fully supported | |
| ServiceAppointment | Task1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Asset | Custom Object: Asset1:1 | Fully supported | |
| Product2 | Custom Object: Product1:1 | Fully supported | |
| WorkOrderProduct | Custom Object: Work Order Line Item1:1 | Fully supported | |
| BookableResource | Custom Object: Field Resource1:1 | Fully supported | |
| FSSkill | Custom Object: Skill1:1 | Fully supported | |
| msdyn_workordersummary | Note1:1 | Fully supported | |
| FieldServiceProduct | Note (on Asset)1:1 | Fully supported | |
| ResourceTerritory | Custom Object: Territory1: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.
Connect Field Service gotchas
Per-seat licensing applies to dispatchers, technicians, and often read-only users
Custom fields and non-standard objects require explicit mapping before migration
Offline sync state is not persistently exported via standard API
Scheduling optimization rules and territory logic do not transfer between platforms
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
Audit Connect Field Service data and produce a custom field creation checklist for Twenty
FlitStack connects to your Dynamics 365 instance via OAuth and inventories WorkOrder, ServiceAppointment, Account, Contact, Asset, Product2, BookableResource, and FSSkill records. We identify the actual field count per object, flag records with missing required foreign keys (e.g., WorkOrders with no Account link), and surface duplicate Account names that may indicate circular references. The output is a Twenty Data Model setup checklist: for each custom object (Asset, Product, Field Resource, Skill, Territory) we list every field name, type (text, number, date, select, relation), and whether it is required. Your admin creates these in Settings before FlitStack runs the import.
Export data from Connect Field Service via the Dynamics 365 REST API
FlitStack uses the Dynamics 365 Web API (v9.x) to export records in dependency order: Account and Contact first (the 'one' side of relationships), then Asset and Product2, then WorkOrder, then ServiceAppointment, then resource-skill associations. We pull all standard fields plus every custom field prefixed with 'fs_' or 'msdyn_'. WorkOrder.FS-TotalPrice is retrieved explicitly since the total is calculated from price-list lines and not stored as a single field. The export includes original record GUIDs, createdon, modifiedon, and ownerid for traceability.
Map and transform fields, build the value-mapping table for status codes
FlitStack applies the field-mapping rules documented above. The highest-scope task is the status reason value-map: we extract all distinct WorkOrder statuscode values from your data, you confirm the mapping to Twenty Opportunity stage strings, and we apply it during the transform step. Address fields from the Dynamics jigsaw-address composite are flattened into separate street, city, state, postal code, and country fields for Twenty's address model. Resource GUIDs are replaced with Twenty user IDs via the email-match lookup table built during user resolution.
Run a sample migration with field-level diff and validate WorkOrder-to-Opportunity mapping
A representative slice (typically 200–500 records spanning WorkOrders in each status, ServiceAppointments, Accounts, Contacts, and Assets) migrates to Twenty first. FlitStack generates a field-level diff report: for each record, the source field value and destination field value are shown side-by-side. You verify that WorkOrder.FS-TotalPrice landed correctly in Opportunity.amount, that Account links resolved in Person.companyId, and that status values rendered as expected in the Opportunity stage. Owner resolution is validated — any unmatched owners appear in a exceptions report.
Execute full migration with delta-pickup window and post-migration audit
FlitStack runs the full migration against Twenty using the REST and GraphQL batch endpoints, respecting rate-limit headers. A delta-pickup window (typically 24–48 hours after the initial export timestamp) captures WorkOrder and ServiceAppointment records modified in Dynamics 365 during the cutover window. After the delta run, FlitStack delivers an audit log: record counts per object, any records that failed to import with error reasons, and a data integrity summary (Account records linked to Opportunities, Person records linked to Companies, Asset records linked to Companies). One-click rollback is available if reconciliation fails.
Platform deep dives
Connect 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 Connect 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
Connect Field Service: 100 API calls per minute per org for standard REST API; bulk API available for larger data volumes.
Data volume sensitivity
Connect 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 Connect Field Service to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Connect 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 Connect 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.