CRM migration

Migrate from Connect Field Service to Twenty CRM

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 logo

Connect Field Service

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Connect Field Service and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Connect Field Service logo

Connect Field Service

What's pushing teams away

  • Per-seat pricing model becomes expensive as organizations scale technician headcount, especially when supervisors, dispatchers, and parts staff all require licenses.
  • Complex workflow configuration requires dedicated admin resources; smaller teams find the setup overhead disproportionate to their needs.
  • Mobile app performance degrades in low-connectivity or offline scenarios common in remote industrial sites and rural service territories.
  • Integration with third-party accounting or parts procurement systems requires middleware or custom API work that adds ongoing maintenance burden.
  • Upgrade cycles sometimes introduce breaking changes to custom fields or API behavior without sufficient migration notice.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Connect Field Service objects map to Twenty CRM

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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

WorkOrder 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

maps to

Twenty CRM

Task

1:1
Fully supported

ServiceAppointment 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

maps to

Twenty CRM

Company

1:1
Fully supported

Account 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

maps to

Twenty CRM

Person

1:1
Fully supported

Contact 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

maps to

Twenty CRM

Custom Object: Asset

1:1
Fully supported

Asset 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

maps to

Twenty CRM

Custom Object: Product

1:1
Fully supported

Connect 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

maps to

Twenty CRM

Custom Object: Work Order Line Item

1:1
Fully supported

WorkOrderProduct 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

maps to

Twenty CRM

Custom Object: Field Resource

1:1
Fully supported

BookableResource (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

maps to

Twenty CRM

Custom Object: Skill

1:1
Fully supported

FSSkill (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

maps to

Twenty CRM

Note

1:1
Fully supported

Work 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

maps to

Twenty CRM

Note (on Asset)

1:1
Fully supported

Field 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

maps to

Twenty CRM

Custom Object: Territory

1:1
Fully supported

Resource 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.

Gotchas + challenges

What specifically takes care here

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 logo

Connect Field Service gotchas

High

Per-seat licensing applies to dispatchers, technicians, and often read-only users

High

Custom fields and non-standard objects require explicit mapping before migration

Medium

Offline sync state is not persistently exported via standard API

Medium

Scheduling optimization rules and territory logic do not transfer between platforms

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Booking rules, routing rules, and FSSkill associations do not migrate and must be rebuilt in Twenty Workflows

    Connect Field Service encodes scheduling constraints in BookableResourceBookingProfile, FSSkill, FSSkillAssociation, and BookingRule objects — these drive intelligent scheduling in Dynamics 365 but have no native Twenty equivalent. Twenty's workflow builder (trigger/action model) can reproduce simple rules, but resource-skill matching logic and territory-based routing must be rebuilt manually. FlitStack exports the full rule definitions as a JSON reference document so your Twenty admin has a specification to rebuild from. This is not a data loss issue — it is an automation rebuild effort that must be scoped separately.

  • Custom fields in Twenty must exist before the CSV import runs — fields are not auto-created

    Twenty's CSV import function creates records, not fields. All custom fields (Asset custom object fields, Work Order Line Item fields, Territory fields, address fields on Opportunity) must be pre-created in Settings → Data Model before the migration script submits records. FlitStack delivers a pre-migration field creation checklist listing every custom field name, type, and settings required in Twenty so your admin can create them in the correct order before data lands. If a required custom field does not exist at import time, the record imports without that data point and the field must be backfilled manually.

  • WorkOrder status reason is a pick-list in Dynamics 365 but a free-text string in Twenty Opportunities

    Connect Field Service WorkOrder statuscode is a Dynamics pick-list with controlled values. Twenty Opportunities use a stage field that is a free-text or select field depending on configuration. Stage values do not auto-match — a value-mapping table must be authored and applied during the migration. If the same stage string appears in multiple WorkOrder status reason values (e.g., 'In Progress' vs 'In-Progress'), the mapping collapses them into one Twenty stage string, and the nuance is lost unless you add a custom subStatus field to preserve the source distinction.

  • Twenty Pro and Organization cloud tiers have per-minute API rate limits that affect large-batch imports

    Twenty's Pro cloud tier caps API calls at 200 per minute; the Organization tier at 100 per minute. Self-hosted Twenty has no API access. For migrations with 50,000+ records, FlitStack uses Twenty's batch import endpoints and respects rate-limit headers (X-RateLimit-Remaining, X-RateLimit-Reset) to avoid 429 responses. Self-hosted Twenty migrations require a different approach — import via Twenty's CSV upload UI in batches of 5,000 records, which is the documented limit per CSV file. API access must be enabled on the self-hosted instance for delta-pickup runs.

  • Twenty workspace members must be invited before owner resolution can complete

    Connect Field Service WorkOrder owner IDs (User or Team references) are resolved by email match against Twenty workspace members. If a user in Dynamics does not yet have a Twenty account at migration time, their records cannot be linked to a Twenty assignee and land with an unassigned flag. FlitStack's pre-migration checklist includes a step to verify that all Dynamics users with open WorkOrders have accepted their Twenty workspace invitation before the migration script runs. This is a process dependency, not a technical blocker — but it requires your team to act before migration day.

Migration approach

Six steps for a successful Connect Field Service to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Connect Field Service logo

Connect Field Service

Source

Strengths

  • Tightly coupled with major CRM backends like Salesforce and Dynamics 365 for unified customer records.
  • Mobile-first design with offline sync capability for technicians working in low-connectivity environments.
  • IoT and remote monitoring integration for predictive maintenance alerting.
  • Dynamic scheduling with territory-based routing and real-time dispatcher reassignment.
  • Multi-currency and multi-region support for organizations operating across geographic business units.

Weaknesses

  • Per-user license costs scale linearly with technician and dispatcher count, creating budget pressure during seasonal peaks.
  • Workflow and business rule configuration requires specialized admin expertise, increasing total cost of ownership.
  • Custom field and object development requires Salesforce DX or equivalent developer tooling, limiting declarative extensibility.
  • API rate limits and bulk API availability vary by edition, constraining automated migration throughput.
  • Offline data synchronization can produce conflicts that require manual resolution when technicians work in intermittent connectivity.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Connect Field Service and Twenty CRM.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Connect Field Service: 100 API calls per minute per org for standard REST API; bulk API available for larger data volumes.

  • Data volume sensitivity

    A

    Connect Field Service exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Connect Field Service to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Connect Field Service to Twenty CRM data migrations

Answers to the questions buyers ask most during Connect Field Service to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most Connect Field Service to Twenty migrations complete in 48–72 hours of clock time for under 10,000 records. Larger setups with 100,000+ records, multiple custom objects (Asset, Product, Skill, Territory), and extensive WorkOrder price-list line items extend to 5–10 days. The longest step is the pre-migration Twenty data model setup — creating custom objects and fields in Settings before import runs. Plan 3–5 days of admin time for that step alongside the technical migration.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Connect Field Service.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day