CRM migration
Field-level mapping, validation, and rollback between FieldFX and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
FieldFX
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between FieldFX and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
FieldFX is a Salesforce managed package — every FieldFX record lives in a Salesforce object. The Account, Contact, Opportunity, and standard Activity objects map cleanly to Twenty's People and Companies structure. The challenge is FieldFX-specific objects like FX5__Ticket__c, FX5__Work_Order__c, FX5__Service_Appointment__c, FX5__Timecard__c, and their line-item children — Twenty has no native field-service equivalent, so these become custom objects that your team configures in Settings → Data Model before migration. FlitStack AI sequences the extraction to respect Salesforce foreign-key dependencies: Accounts first, then Contacts, then Opportunities, then custom parent objects, then child objects in strict dependency order. Workflow Rules, Status Workflows, and SFM (Salesforce Field Service) automations do not migrate — we export their definitions as a rebuild reference document for your Twenty admin. We use the Salesforce REST API with batch-size management to stay within org-wide limits, applying exponential backoff on 429 responses. The migration carries all standard fields, custom fields, timestamps, and owner assignments. Custom pick-list values on FieldFX objects require per-value translation against the target custom select fields. Integrations, page layouts, sharing rules, permission sets, and FieldFX mobile configurations require separate destination-side setup.
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 FieldFX 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.
FieldFX
Account
Twenty CRM
Company
1:1Standard Salesforce Account maps directly to Twenty Company. Company.displayName takes the Account.Name value. Account billing/shipping addresses map to Twenty's standard address compound field. Parent Account relationships (ParentId) translate to a company self-relation in Twenty. Import Companies first — all other objects reference them via companyId foreign key.
FieldFX
Contact
Twenty CRM
Person
1:1Standard Salesforce Contact maps directly to Twenty Person. firstName + lastName combine to Person.name. Email maps to Person.email. Phone, job title, department, and mailing address carry over as standard Person fields. Each Person record must have a companyId linking to its parent Company — Accounts must import first.
FieldFX
Opportunity
Twenty CRM
Opportunity
1:1Standard Salesforce Opportunity maps to Twenty Opportunity with close date, amount, and stage preserved. StageName pick-list values require a value-by-value map against Twenty's Opportunities.stage field. Probability values can be stored as a custom Number field if reporting continuity is required. OwnerId resolved by email match to Twenty Workspace Members.
FieldFX
Task
Twenty CRM
Task
1:1Standard Salesforce Task migrates as Twenty Task with subject, status, priority, and due date preserved. Owner resolved by email match. Salesforce Task.WhatId (parent record type) translates to a relation field pointing to the migrated Company or Person — object type is flagged if WhatId references a non-migrated object.
FieldFX
Note
Twenty CRM
Note
1:1Salesforce Notes (not legacy Note object) migrate to Twenty Note with title and body text. Rich-text formatting is preserved where Twenty's note rendering supports it. Parent record linking (Note.parentId) maps to the corresponding migrated Company or Person using the Source_System_ID__c reference.
FieldFX
FX5__Work_Order__c
Twenty CRM
Custom Object: Work Order
1:1FieldFX Work Orders have no native Twenty equivalent. We create a Work Order custom object in Twenty via Settings → Data Model before migration. Standard Work Order fields (status, priority, scheduled date, account lookup) become custom fields on this object. Parent AccountId maps to companyId using the already-migrated Company.id. Salesforce FX5__Work_Order__c.ID stored as Source_System_ID__c for traceability.
FieldFX
FX5__Work_Order_Line_Item__c
Twenty CRM
Custom Object: Work Order Line Item
1:1Work Order Line Items are child records of FX5__Work_Order__c. They become a custom object in Twenty with a relation field back to the Work Order custom object. Each line item's FX5__Work_Order__c reference is mapped to the migrated Work Order's Source_System_ID__c using a lookup table built during the migration plan phase. Product and quantity fields become custom text and number fields.
FieldFX
FX5__Ticket__c
Twenty CRM
Custom Object: Ticket
1:1FieldFX Tickets track service events separate from Work Orders. They migrate as a Ticket custom object in Twenty with status, priority, and resolution fields as custom fields. The FX5__Ticket__c.AccountId and FX5__Ticket__c.ContactId references map to the migrated Company and Person via the Source_System_ID__c cross-reference table. Ticket history or audit fields become custom datetime fields.
FieldFX
FX5__Service_Appointment__c
Twenty CRM
Custom Object: Service Appointment
1:1FieldFX Service Appointments carry scheduling windows and technician assignments. They become a custom object with scheduled start/end datetime fields, status, and a relation to the migrated Contact (Person). FX5__FS_Dispatch__c technician assignments map to a free-text 'Assigned Technician' custom field or a Person relation if the technician is a Twenty user.
FieldFX
FX5__Dispatcher__c
Twenty CRM
Custom Object: Dispatcher Assignment
1:1Dispatcher assignment records (which dispatcher was assigned to which work order or appointment) have no equivalent in Twenty's data model. These records are preserved as a custom Dispatcher Assignment object in Twenty with a free-text dispatcher reference and source system ID for historical audit purposes. The routing logic must be rebuilt in Twenty's workflow builder.
FieldFX
FX5__Timecard__c
Twenty CRM
Custom Object: Timecard
1:1FieldFX Timecards (FX5 module) track technician labor hours. They migrate as a custom Timecard object in Twenty with date, hours worked, and status as custom fields. Relation to Person (technician) and Work Order (or Ticket) established via Source_System_ID__c lookup. Hourly rate or labor cost fields become custom currency fields.
FieldFX
ContentVersion / Attachment
Twenty CRM
Note / Attachment
1:1Salesforce Files (ContentVersion) and Attachments linked to Account, Contact, or Work Order records migrate as Twenty Notes with the file content stored as a base64 blob or a URL reference to a re-uploaded storage location. Salesforce file size limits (25MB default) apply during extraction. Inline images in rich-text notes are downloaded and re-hosted.
| FieldFX | Twenty CRM | Compatibility | |
|---|---|---|---|
| Account | Company1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| FX5__Work_Order__c | Custom Object: Work Order1:1 | Fully supported | |
| FX5__Work_Order_Line_Item__c | Custom Object: Work Order Line Item1:1 | Fully supported | |
| FX5__Ticket__c | Custom Object: Ticket1:1 | Fully supported | |
| FX5__Service_Appointment__c | Custom Object: Service Appointment1:1 | Fully supported | |
| FX5__Dispatcher__c | Custom Object: Dispatcher Assignment1:1 | Fully supported | |
| FX5__Timecard__c | Custom Object: Timecard1:1 | Fully supported | |
| ContentVersion / Attachment | Note / Attachment1: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.
FieldFX gotchas
API rate limits vary by Salesforce edition and request type
Deprecated Attachments feature requires Files API migration
Workflow Rules retirement leaves automations without a migration path
Travel time calculations require appointment rescheduling post-migration
Custom field API name length causes browser errors on mobile
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 FieldFX Salesforce org and generate migration sequence map
FlitStack AI connects to your Salesforce org via scoped read credentials and inventories every object — standard (Account, Contact, Opportunity) and FieldFX package objects (FX5__Work_Order__c, FX5__Ticket__c, FX5__Service_Appointment__c, FX5__Timecard__c, FX5__Dispatcher__c, and their children). We capture record counts, custom field definitions (including namespace prefixes), pick-list values, and foreign-key relationships. From this inventory we generate the migration sequence map: a strict ordering that respects parent-before-child dependencies (Accounts → Contacts → Opportunities → custom objects). This map is delivered as a planning document for your review before any data moves.
Create Twenty custom objects and fields before migration
Before migration data lands in Twenty, your team (or our team with admin credentials) creates the custom objects required for FieldFX field-service data: Work Order, Work Order Line Item, Ticket, Service Appointment, Dispatcher Assignment, and Timecard. For each object we deliver a schema specification listing every custom field to create in Settings → Data Model, including field type, pick-list values, and whether the field should be required. This step is a prerequisite — Twenty's import will reject records referencing an object or field that does not yet exist. We coordinate this phase so it runs in parallel with data extraction planning.
Extract Salesforce data via REST/Bulk API with batch management
FlitStack AI extracts data from your Salesforce org using the REST API for standard objects and the Bulk API for objects with more than 10,000 records. Batch sizes are managed to stay within your org's daily REST API limit and the per-user Batch API limit used by FieldFX Mobile. We export records in migration-sequence order: Accounts, then Contacts, then Opportunities, then each FieldFX package object in parent-before-child order. Salesforce Owner IDs are captured for email-based user resolution. All timestamps, custom field values, and pick-list values are included in the export. On 429 (rate limit) responses, we apply exponential backoff and retry.
Resolve owners by email and build Source_System_ID cross-reference table
Salesforce User records (OwnerId on every object) are matched against Twenty Workspace Members by email address. This creates the Owner-to-Workspace-Member mapping that allows opportunity and task ownership to transfer correctly. Unmatched owners are flagged in a pre-flight report — your team either invites them to Twenty first or assigns their records to a fallback owner. Simultaneously, we build the Source_System_ID cross-reference table that maps every Salesforce record ID to its migrated Twenty id. This table is the backbone of child-record linking: Work Order Line Items use it to find their parent Work Order; Tickets use it to find their parent Account and Contact.
Run sample migration with field-level diff and verification
A representative sample — typically 200–500 records spanning Accounts, Contacts, Opportunities, and at least one FieldFX custom object — is migrated first. We generate a field-level diff report comparing source Salesforce values against the Twenty destination values for every mapped field. This report surfaces pick-list mismatches, date-format discrepancies, truncated text fields, and foreign-key resolution failures before the full migration commits. You review the diff, approve the mapping, and FlitStack AI proceeds to the full run. For FieldFX Work Orders and Tickets, the sample diff verifies that the custom object and field setup in Twenty was done correctly.
Execute full migration with delta-pickup window and post-migration audit
The full migration runs against Twenty using the verified mapping from the sample phase. A delta-pickup window (24–48 hours after the main run completes) captures any records created or modified in Salesforce during the cutover period — typically records your team is still working on in FieldFX while the migration runs. FlitStack AI generates a post-migration audit log listing every record migrated, every record skipped (with reason), and every owner that required fallback assignment. Record counts are reconciled against the source org. One-click rollback is available within the delta window if reconciliation reveals data integrity issues. After rollback eligibility expires, your team begins the workflow-rebuild phase using the exported FieldFX workflow definitions.
Platform deep dives
FieldFX
Source
Strengths
Weaknesses
Twenty CRM
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 FieldFX and Twenty CRM.
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
FieldFX: Org-wide 24-hour rolling REST API limit varies by Salesforce edition; per-user per-app per-hour Batch API limit; 25 requests per minute for FX Reports API.
Data volume sensitivity
FieldFX 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 FieldFX to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your FieldFX 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 FieldFX
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.