CRM migration

Migrate from The Service Program to Twenty CRM

Field-level mapping, validation, and rollback between The Service Program and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

The Service Program logo

The Service Program

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

83%

10 of 12

objects map 1:1 between The Service Program and Twenty CRM.

Complexity

BStandard

Timeline

72–96 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

The Service Program (TSP) is a service-business management platform built around work orders, dispatching, technicians, and QuickBooks integration. Its data model centers on Customers (with service Locations), Service Requests, Work Orders, Schedules, and Technicians — it does not use a conventional CRM object structure. Twenty CRM models the world as People, Companies, Opportunities, Tasks, and Notes with optional Custom Objects. The migration requires translating TSP's flat work-order and dispatch model into Twenty's relational People↔Companies↔Opportunities graph. FlitStack AI reads TSP's export schema — typically CSV or QuickBooks-synced records — and maps every field to its Twenty equivalent using direct field mapping for standard contact and account data, and Custom Objects for TSP-specific entities like Work Orders and Service Locations. Activity history (scheduling logs, dispatch events, time entries) migrates as Tasks and Notes on the linked record. Workflows, automations, and QuickBooks sync rules do not migrate — they require manual reconstruction in Twenty. The migration runs via Twenty's REST API in a sequenced batch process: Companies first, then People with companyId lookups, then Opportunities with opportunityId, then Tasks and Notes. Owner resolution matches TSP technician email addresses to Twenty Workspace Members. A delta-pickup window captures any TSP records modified during cutover before the switch.

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

The Service Program logo

The Service Program

What's pushing teams away

  • The software is described as at times quirky and complicated, with basic field-service features that users expect still marked as in-progress rather than fully shipped.
  • No public API means integrations beyond QuickBooks require custom development or workarounds, making the platform unsuitable for businesses needing broad third-party connectivity.
  • Mobile and field-user pricing is listed separately with no transparency on the pricing page, making total cost of ownership hard to predict before signing a contract.
  • As a Windows desktop product, field technicians working on tablets or mobile devices face limitations compared to native mobile-first FSM platforms.
  • Annual contract structure combined with per-user billing can become costly as teams grow, pushing small businesses toward flat-rate alternatives.

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 The Service Program objects map to Twenty CRM

Each row shows how a The Service Program 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.

The Service Program

Customer

maps to

Twenty CRM

Company + Person

many:1
Fully supported

TSP's customer record holds both company-level data (business name, billing address) and contact-level data (primary contact name, phone, email). We split this into a Twenty Company record for the business entity and a Person record for the primary contact, linking them via the company's domain or name match.

The Service Program

Service Location

maps to

Twenty CRM

Company (secondary) or Custom Object

1:1
Fully supported

TSP supports multiple service locations per customer — each with its own address and equipment list. In Twenty, these can map as secondary Company records linked via a custom ServiceLocation relation field, or as a Custom Object with a companyId relation depending on whether the team treats locations as sub-accounts or standalone entities.

The Service Program

Service Request

maps to

Twenty CRM

Opportunity

1:1
Fully supported

A TSP Service Request captures the customer's issue or recurring service need — analogous to an Opportunity in Twenty representing a deal or service engagement. We map the request's description, priority, and estimated value to Twenty's Opportunity name, stage, and amount fields. Recurring service requests map to Opportunity records with a custom recurrence flag.

The Service Program

Work Order

maps to

Twenty CRM

Opportunity + Tasks

many:1
Fully supported

Each TSP Work Order contains line items, labor estimates, and status. We map the work order header to a Twenty Opportunity record capturing the service type, estimated amount, and stage. Individual line items and labor entries become Twenty Tasks linked to that Opportunity, preserving the item-level detail that drives service billing.

The Service Program

Schedule / Dispatch Entry

maps to

Twenty CRM

Task

1:1
Fully supported

TSP scheduling records — which technician is assigned, when, and at which location — map to Twenty Tasks with due dates, assignees (matched to Workspace Members by email), and Notes capturing dispatch context. Completed schedule entries retain their original timestamps as a custom datetime field for historical reporting.

The Service Program

Technician / Staff

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

TSP technicians are matched by email address to Twenty Workspace Members. If a TSP technician has no corresponding Twenty user, we flag the record for admin action — either inviting the technician to Twenty or reassigning their work orders to an existing Workspace Member before migration.

The Service Program

Time Entry / Clock In-Out

maps to

Twenty CRM

Task + Custom Fields

1:1
Fully supported

TSP time entries (clock-in, clock-out, duration) have no native Twenty equivalent. We migrate these as Tasks with custom duration fields (Time_Entry_Hours__c, Clock_In__c, Clock_Out__c) linked to the parent Work Order Opportunity. The task name reflects the service performed; the duration fields preserve billable hour data for QuickBooks sync reconstruction.

The Service Program

Equipment / Asset

maps to

Twenty CRM

Custom Object

1:1
Fully supported

TSP tracks equipment at each service location (make, model, serial number, service history). This becomes a Twenty Custom Object named Equipment with fields: name, serialNumber, make, model, serviceLocationId (relation to Company), and lastServiceDate. Equipment is linked to the relevant Service Location Company record.

The Service Program

Invoice / Billing Record

maps to

Twenty CRM

Note + Custom Fields

1:1
Fully supported

TSP invoicing lives inside its QuickBooks integration. We do not migrate invoice records — those remain in QuickBooks. Instead, we link the migrated TSP invoice number as a custom read-only field (Original_Invoice_Number__c) on the relevant Opportunity record so teams can cross-reference billing history via QuickBooks.

The Service Program

QuickBooks Linkage

maps to

Twenty CRM

Custom Field (Reference)

1:1
Fully supported

TSP's sync relationship with QuickBooks — customer IDs, invoice IDs, chart-of-accounts mappings — has no direct Twenty equivalent. We preserve the QuickBooks customer reference ID as a custom field (QB_Customer_Ref__c) on the Company record for reconnection after migration. During post-migration setup, your team can map this reference ID to QuickBooks via a third-party integration, ensuring that new transactions stay synchronized across both platforms.

The Service Program

Work Order Notes / Attachments

maps to

Twenty CRM

Note

1:1
Fully supported

TSP work order notes migrate as Twenty Notes on the linked Opportunity record. File attachments (photos, signed forms) are downloaded and re-uploaded via Twenty's file storage, then linked to the parent Opportunity record. All attachments retain their original file names and timestamps, which are stored in custom metadata fields to preserve audit trails and facilitate future reference.

The Service Program

Custom / Industry-Specific Fields

maps to

Twenty CRM

Custom Object or Custom Field

1:1
Fully supported

TSP setups for specific trades (pool chemistry readings, HVAC refrigerant levels, lawn treatment zones) add industry-specific fields. These map to either custom fields on the relevant object or a Custom Object — we audit the TSP schema before migration and present the mapping plan for admin approval.

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.

The Service Program logo

The Service Program gotchas

High

No public API means migration depends on QuickBooks export or Windows-database extraction

High

QuickBooks version gate blocks the sync layer on older installations

Medium

Custom fields and TSP-specific data require manual CSV preparation

Medium

SMS messaging and communication logs are not migratable

Low

Annual contract with onboarding fees creates lock-in risk before migration

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

  • TSP work-order hierarchies require manual consolidation into Twenty's flat Opportunity model

    The Service Program models work orders with nested line items, multiple technicians, and scheduling sub-records per visit. Twenty's Opportunities are a single record with a linked task list. A TSP work order that spans three technician visits over two weeks becomes one Opportunity record in Twenty with three Task records — each representing one visit — rather than three separate work order records. We preserve the full visit history as task records linked to the parent Opportunity, but the TSP concept of a 'revision' or 'revisit' as a separate work order does not translate one-to-one in Twenty. Teams should review the task list on each migrated Opportunity to confirm the visit sequence is complete.

  • Twenty's import sequence requires Companies before People, then Opportunities

    Twenty's CSV import enforces referential integrity: a Person record with a companyId must reference an existing Company record, and an Opportunity with a companyId must reference a Company that already exists. TSP's export typically delivers customers, locations, and work orders in separate CSV files without respecting this order. FlitStack AI sequences the migration load as: (1) Companies and Service Locations, (2) People with companyId lookups, (3) Service Requests/Work Orders as Opportunities, (4) Tasks. If TSP exports are delivered in an incorrect order or with circular references (a sub-location referencing its parent before the parent is imported), FlitStack detects and flags these dependency violations before any data loads.

  • QuickBooks integration context is lost and must be rebuilt manually in Twenty

    TSP's value for service businesses is deep QuickBooks integration — customer IDs, invoice references, chart-of-accounts mappings, and payment sync live inside the TSP + QB relationship. Twenty has no native QuickBooks connector. We preserve the QB customer reference ID and invoice number as custom fields on the migrated records, but the actual sync connection must be rebuilt using a third-party integration tool (such as a Zapier/Make workflow or a custom QB API script) after migration. This is a non-trivial step for teams that rely on real-time QB invoicing.

  • TSP technician and office-user roles do not map directly to Twenty Workspace Members

    TSP differentiates between office users (who manage dispatch and billing) and field technicians (who execute work orders). Twenty's Workspace Members are a single role type — there is no native concept of a 'dispatcher' vs 'field tech' distinction at the user-role level. We migrate TSP users as Twenty Workspace Members matched by email, but TSP-specific role semantics (dispatch permissions, invoicing rights) are not automatically translated. Teams should audit Twenty's Roles and Permissions configuration (Settings → Permissions) post-migration to set appropriate access levels for former dispatchers versus field technicians.

  • Twenty has no native dispatch or routing feature — TSP scheduling maps to Tasks only

    TSP's scheduling and dispatch board — which lets office staff assign technicians to work orders on a calendar — is a core operational feature that has no equivalent in Twenty. Twenty's Tasks have due dates and assignees, but there is no built-in dispatch board, route-optimization, or technician availability tracking. We migrate all scheduling records as Tasks with assignee and dueAt populated, preserving the technician-to-work-order assignment and the scheduled date. However, the calendar-style dispatch view and real-time routing decisions must be rebuilt manually in Twenty using its Workflow feature or a third-party scheduling tool.

Migration approach

Six steps for a successful The Service Program to Twenty CRM data migration

  1. Audit TSP data schema and export readiness

    FlitStack AI reviews your TSP export schema — customer records, service locations, work orders, schedules, technician list, and any custom fields — and verifies export completeness against the TSP QuickBooks export or direct CSV dump. We identify orphaned records, duplicate customer entries, and fields that lack a direct Twenty equivalent. The output is a data audit report and a field-mapping specification that your admin reviews before any migration run begins. This step also confirms that all TSP technician email addresses are available for Workspace Member matching in Twenty.

  2. Create Twenty data model before data import

    Twenty requires custom fields and Custom Objects to exist before CSV import can populate them — the import creates records, not fields. FlitStack AI creates the custom fields and Custom Objects in your Twenty workspace based on the mapping specification: Equipment__c, Time_Entry_Hours__c, Clock_In__c, Clock_Out__c, Original_Create_Date__c, Source_System_ID__c, QB_Invoice_Ref__c, and any TSP industry-specific custom fields. Workspace Members are invited and confirmed so assigneeId resolution works during the task import step.

  3. Sequence and load Companies, People, and Opportunities

    FlitStack AI loads data into Twenty in the correct dependency order: Companies (customer businesses and service locations) first, then People linked via companyId, then Opportunities for Service Requests and Work Orders. Each batch is validated against Twenty's API constraints (max 200 records per batch call) and referential integrity rules. Source system IDs are stored on each record for delta-run de-duplication. A representative slice (typically 200–500 records spanning multiple record types) migrates first and generates a field-level diff for your review before the full run commits.

  4. Migrate Tasks, Notes, and attachments

    After Opportunities are confirmed in Twenty, FlitStack AI loads Tasks representing scheduling visits, time entries, and work-order line items — each linked to the parent Opportunity and assigned to the resolved Workspace Member. Notes from TSP work orders migrate as Twenty Notes on the parent record. File attachments (photos, signed forms) are downloaded from TSP, re-uploaded to Twenty's file storage, and linked to the relevant Opportunity record. All original timestamps and owner assignments are preserved via custom datetime fields.

  5. Run delta-pickup and audit before cutover

    A delta-pickup window (typically 24–48 hours) captures any TSP records modified or created during the migration cutover window — particularly new work orders or schedule changes that arrive while the team is still operating in TSP. FlitStack AI generates an audit log of every imported record with its source system ID, timestamp, and owner. One-click rollback reverts the Twenty workspace to its pre-migration state if reconciliation against the TSP audit report identifies discrepancies. Your team confirms record counts and relationship integrity before the TSP account is formally decommissioned.

Platform deep dives

Context on both ends of the pair

The Service Program logo

The Service Program

Source

Strengths

  • Tight QuickBooks Desktop and Online integration with one-click customer record sync and no duplication.
  • Windows-native UI reduces training overhead for office staff familiar with standard Windows navigation.
  • Work-order dispatch, routing, and technician assignment in a single FSM add-on without needing a separate platform.
  • Calendar-based scheduling with route optimization built in for field service operations.
  • Support and software updates included in the subscription price.

Weaknesses

  • No public API — all data exchange beyond QuickBooks requires manual export or direct database extraction from the Windows desktop application.
  • QuickBooks 2018 or newer is required — older QuickBooks versions are not supported and block the sync layer.
  • Mobile and field-user pricing is published separately with no clear total-cost estimate on the pricing page.
  • No native integrations with CRMs, project management tools, or modern SaaS platforms beyond QuickBooks.
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. 2 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 The Service Program and Twenty CRM.

  • Object compatibility

    B

    2 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

    The Service Program: Not applicable — no public API.

  • Data volume sensitivity

    B

    The Service Program doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your The Service Program 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 The Service Program to Twenty CRM data migrations

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

Can't find your answer?

Walk through your The Service Program to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most TSP-to-Twenty migrations complete in 72–96 hours of clock time for under 10,000 records. Larger setups with 50,000+ records or complex work-order hierarchies (multiple visits, line items, time entries per order) extend to 5–10 days. The longest planning step is auditing TSP's export schema and designing the custom field and Custom Object setup in Twenty before data import begins. Additional time may be required if the TSP dataset includes extensive historical attachments or multiple active service locations.

Adjacent paths

Related migrations to explore

Ready when you are

Move from The Service Program.
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