CRM migration

Migrate from Trade Service Pro to Twenty CRM

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

Trade Service Pro logo

Trade Service Pro

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Trade Service Pro and Twenty CRM.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Trade Service Pro organizes field service data around jobs, work orders, and scheduling within a single operational module. Twenty CRM uses a People-Companies-Opportunities model with a custom-object layer built via Settings → Data Model, requiring explicit schema creation before any import runs. FlitStack AI extracts Trade Service Pro records via its documented export pathway, maps customer contacts to Twenty People, job records to Opportunities with custom stage fields, and pushes work orders, proposals, and pricebook data into Twenty custom objects. TSP owner assignments map to Twenty workspace members matched by email. We sequence imports in dependency order — custom objects first, then Companies, then People, then Opportunities — so foreign-key relationships resolve cleanly. File attachments require manual re-upload to Twenty since CSV exports exclude binary data. Workflows, scheduling automations, and QuickBooks sync configurations cannot migrate and must be rebuilt in Twenty's workflow builder or via third-party integration. The delta-pickup window (24–48 hours) captures in-flight changes during cutover, and FlitStack generates a field-level diff before committing the full run.

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

Trade Service Pro logo

Trade Service Pro

What's pushing teams away

  • No public API means third-party integrations or automated data pipelines are not possible, pushing growing companies toward platforms like ServiceTitan or Jobber that offer developer access.
  • Support is ticket-based with no clear SLA, and several reviews of similar FSM platforms cite slow response times as a reason for switching.
  • Limited scalability beyond 11–50 employees means companies that grow past that range often need a more robust platform with advanced dispatch and reporting.
  • Sync issues and reliability bugs, reported across comparable FSM tools, cause field teams to lose confidence in the system during active jobs.

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 Trade Service Pro objects map to Twenty CRM

Each row shows how a Trade Service Pro 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.

Trade Service Pro

Customer (TSP Contact)

maps to

Twenty CRM

People

1:1
Fully supported

TSP customer records map directly to Twenty People. First name, last name, email, phone, address, and job title migrate as standard People fields. TSP customer records without an email address are flagged during validation — email is required for workspace member matching on owner resolution.

Trade Service Pro

Company (TSP Company)

maps to

Twenty CRM

Companies

1:1
Fully supported

TSP company records (business accounts for which technicians perform jobs) map to Twenty Companies. Company name, domain/website, industry, employee count, and annual revenue migrate as standard Companies fields. TSP stores no native parent-company hierarchy — all company records land flat in Twenty.

Trade Service Pro

Job

maps to

Twenty CRM

Opportunities

1:1
Fully supported

TSP jobs are the core sales and service record. Migrate as Twenty Opportunities with a custom select field Job_Type__c capturing the TSP job type, and a custom select field Service_Category__c for industry-specific categories. Opportunity Amount maps from TSP job total. Close date maps from scheduled completion date. Stage name maps via value mapping to a custom Opportunity Stage pick-list.

Trade Service Pro

Job Stage / Status

maps to

Twenty CRM

Custom Select Field (Opportunities)

1:1
Fully supported

TSP job statuses (e.g., Scheduled, In Progress, Completed, Invoiced, Cancelled) have no native equivalent in Twenty's Opportunity stages. Each TSP status maps to a custom pick-list value on a custom Opportunities__Stage field. Probability is not automatically derived — reapply forecast assumptions in Twenty after migration.

Trade Service Pro

Work Order

maps to

Twenty CRM

Custom Object: Work_Order__c

1:1
Fully supported

TSP work orders (line-item breakdowns of a job) have no standard Twenty equivalent. We create a Work_Order__c custom object via Twenty's Settings → Data Model before import, with fields for Work_Order_Number__c, Linked_Job_ID__c (references the Opportunities record), description, and status. Each work order record migrates as a row linked to its parent job.

Trade Service Pro

Proposal / Estimate

maps to

Twenty CRM

Custom Object: Proposal__c

1:1
Fully supported

TSP proposals and estimates migrate as a custom Proposal__c object. Fields include Proposal_Number__c, Linked_Job_ID__c (Opportunity lookup), total_amount__c, valid_until_date__c, and eSign_status__c (if TSP records signature state). Proposal body content migrates as a long-text field; formatting is preserved where TSP exports support it.

Trade Service Pro

Invoice

maps to

Twenty CRM

Custom Object: Invoice__c

1:1
Fully supported

TSP invoices migrate as a custom Invoice__c object linked to the Opportunities record. Fields include Invoice_Number__c, invoice_date__c, total_amount__c, balance_due__c, payment_status__c (paid, partial, outstanding), and QuickBooks_ID__c for reconciliation if QB sync is rebuilt. Tax and line-item breakdowns preserved as child records of the Invoice object.

Trade Service Pro

Pricebook / Product

maps to

Twenty CRM

Custom Object: Product__c

1:1
Fully supported

TSP pricebook entries (products, services, and inventory items) migrate as a custom Product__c object. Fields include name, category__c (from TSP categorization), unit_price__c, unit_of_measure__c, and inventory_level__c. TSP inventory status flags (in-stock, low-stock, discontinued) map to a select field on the Product record.

Trade Service Pro

Timesheet / Time Entry

maps to

Twenty CRM

Custom Object: Timesheet__c

1:1
Fully supported

TSP employee timesheet records (clock in/out, job timers, break entries) migrate as a custom Timesheet__c object. Fields include employee_name__c, date__c, hours_worked__c, job_link__c (Opportunity lookup), and timer_type__c (clock, job, break). Twenty has no native timesheet or time-tracking module — this custom object provides historical record continuity.

Trade Service Pro

User / Owner

maps to

Twenty CRM

WorkspaceMember (People relation)

1:1
Fully supported

TSP user accounts and job owners resolve to Twenty workspace members matched by email address. All TSP users must accept their Twenty workspace invitation before the migration import runs, per Twenty's constraint that owner relations require an accepted member record. Unmatched owners are flagged as exceptions — assign to a fallback owner or invite the user before migration commits.

Trade Service Pro

Activity (Call, Email, Meeting)

maps to

Twenty CRM

Tasks

1:1
Fully supported

TSP logged calls, emails, and meeting records migrate as Twenty Tasks linked to the relevant Opportunities or People record. Task Subject carries the activity type and description. Original timestamp preserved in the Task's due date or a custom created_at field. TSP does not export calendar-synced meeting data — confirm export availability per TSP account tier.

Trade Service Pro

Note / Attachment

maps to

Twenty CRM

Notes + File Attachments

1:1
Fully supported

TSP notes migrate as Twenty Notes attached to the parent record (People, Companies, or Opportunities). Note body carries the full text content. TSP file attachments do not export via CSV — these must be manually re-uploaded to Twenty after migration or migrated via Twenty's GraphQL API if the files are accessible through TSP's storage layer.

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.

Trade Service Pro logo

Trade Service Pro gotchas

High

No public API forces reliance on in-app CSV exports

Medium

Active timesheet timers do not export in CSV

Medium

eSign status on Proposals does not carry over

Low

Attachment bulk download requires separate handling

Medium

No schema documentation complicitates field mapping

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

  • Import order is enforced — companies must land before people and jobs

    Twenty's CSV import requires that the 'one' side of every relationship exists before the 'many' side can reference it. Companies must be imported and committed before People records with a companyId lookup can land, and Opportunities cannot reference People records until those contacts are present. FlitStack sequences the migration so Companies load first, then People with resolved companyId values, then Opportunities with both accountId and People links, and finally custom objects (Work Orders, Proposals, Invoices, Pricebook, Timesheets) last. Violations of this sequence produce orphan records with null lookups that appear as empty dropdowns in Twenty's UI.

  • Custom objects must be created in Settings before any data can import into them

    Twenty's CSV import creates records, not schema. All Work_Order__c, Proposal__c, Invoice__c, Product__c, and Timesheet__c objects must be defined in Settings → Data Model — with their field names, types, and pick-list options configured — before FlitStack can load a single row into those tables. TSP customers who use TSP's pricebook and work-order features extensively face the longest pre-import phase: each product category, each work-order status, and each timesheet timer type needs its own field definition in Twenty. We deliver a schema-setup plan before data extraction begins so Twenty is ready to receive records on the first import attempt.

  • File attachments do not export via CSV and require manual re-upload

    Twenty's CSV import and export functions do not carry binary attachments. TSP photos and files attached to jobs, work orders, and proposals must be re-uploaded manually to each record in Twenty, or migrated via Twenty's GraphQL API if TSP's storage layer is accessible through its file-export API. For field-service shops with photo-heavy job documentation (before/after shots, equipment photos, site maps), this is the migration step most likely to be underestimated. We flag every TSP record with an attachment and provide a per-record re-upload checklist.

  • Workspace members must accept invitations before owner relations can map

    Twenty's user-relation field on every record requires an accepted workspace member record. TSP owner IDs and user assignments cannot map to a Twenty workspaceMemberId until that user has clicked the invitation link and joined the workspace. This creates a sequencing dependency: all TSP users need Twenty accounts created and invitations sent before migration imports run. We export the TSP user list, match each owner by email against the TSP roster, generate the invitation batch for unmatched users, and hold owner mapping until all invites resolve. FlitStack flags any TSP owner with no matching TSP user account for fallback assignment.

  • API rate limits on Pro and Organization tiers affect bulk migration speed

    Twenty's API enforces request-per-minute limits: 100/min on Pro tier and 200/min on Organization tier. For TSP migrations with 50,000+ records across People, Companies, Opportunities, and custom objects, these limits govern how quickly FlitStack can push data through Twenty's /graphql endpoint. We batch records into queued import windows that respect the tier limits, adding retry logic with exponential backoff for 429 responses. Migrations under the 20,000-record CSV export cap run entirely through Twenty's UI import wizard without hitting API limits.

Migration approach

Six steps for a successful Trade Service Pro to Twenty CRM data migration

  1. Audit TSP data and build the Twenty schema plan

    FlitStack extracts a full data inventory from Trade Service Pro covering all customer contacts, companies, jobs, work orders, proposals, invoices, pricebook entries, timesheet records, and activity history. We count records per object, identify custom fields TSP has configured, and assess attachment volume. Simultaneously, we build the Twenty schema-setup plan: which custom objects to create (Work_Order__c, Proposal__c, Invoice__c, Product__c, Timesheet__c), which custom fields to add to Opportunities and People, and what pick-list values each select field needs. This plan is delivered before any data extraction so your Twenty workspace is ready when import begins.

  2. Invite all TSP users to Twenty and resolve owner mappings

    All TSP users who are assigned as job owners or dispatchers need a Twenty workspace account before owner relations can populate. FlitStack exports the TSP user list, matches each owner email against the TSP roster, and generates a batch-invite plan. Unmatched owners (TSP users with no corresponding Twenty account) are flagged with a fallback assignment recommendation. Owner mapping waits until all invitations are accepted or resolved, preventing records from landing with null workspaceMemberId values.

  3. Create custom objects and fields in Twenty

    With the schema plan in hand, we (or your admin) create all custom objects in Settings → Data Model: Work_Order__c, Proposal__c, Invoice__c, Product__c, and Timesheet__c. Each object gets its field definitions — name, type, required/optional, and pick-list options for status and category fields. Standard objects (People, Companies, Opportunities) receive any additional custom fields needed (Job_Type__c, Service_Category__c, Original_Create_Date__c). This step is validated before data extraction begins — Twenty will reject any CSV import that references a field not yet defined.

  4. Run a sample migration with field-level diff

    A representative slice — typically 200–500 records spanning contacts, companies, jobs, work orders, and proposals — migrates first. FlitStack generates a field-level diff comparing source TSP values against Twenty destination fields, surfacing any pick-list mismatches, null lookups, truncated text fields, or date-format issues before the full run. You review the diff and approve field mappings. This is the validation gate before any production data commits.

  5. Execute full migration with delta-pickup window

    The full dataset migrates in dependency order: Companies first, then People with companyId links, then Opportunities with accountId and People links, then custom objects (Work Orders, Proposals, Invoices, Products, Timesheets) last. A delta-pickup window — typically 24–48 hours — runs concurrently with your team's continued TSP work, capturing any records created or modified during the cutover window. FlitStack's audit log tracks every record written, and one-click rollback reverts the full import if reconciliation identifies data integrity issues. After validation, TSP is set to read-only or decommissioned per your plan.

Platform deep dives

Context on both ends of the pair

Trade Service Pro logo

Trade Service Pro

Source

Strengths

  • All-in-one FSM bundle covering CRM, proposals, invoicing, and scheduling for trade contractors.
  • Month-to-month subscription with no annual contract commitment.
  • 30-day free trial with no credit card required for sign-up.
  • Integrated payment processing marketed as accelerating collections for field service businesses.
  • User permission controls differentiate back-office and field technician access levels.

Weaknesses

  • No public API documented, preventing automated integrations or programmatic data exports.
  • No published pricing tiers on the website; cost transparency requires a sales conversation.
  • Small company footprint (11–50 employees, <$5M revenue) suggests limited enterprise-scale features.
  • Support is ticket-based with no documented SLA, leading to unpredictable response times.
  • Schema is undocumented; custom fields and object relationships are not publicly described.
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 Trade Service Pro 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

    Trade Service Pro: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

A TSP-to-Twenty migration for a 10–30 user shop with up to 50,000 records (contacts, jobs, work orders, proposals, invoices, and pricebook entries) typically completes in 24–72 hours of clock time once the Twenty schema is built and users are invited. The longest planning step is creating the five custom objects and their fields in Settings → Data Model before import begins — budget 3–5 days for schema setup and user invites if your team handles it manually. Larger datasets or TSP instances with heavy pricebook and timesheet data extend to 7–14 days.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Trade Service Pro.
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