CRM migration

Migrate from Kickserv to Twenty CRM

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

Kickserv logo

Kickserv

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Kickserv and Twenty CRM.

Complexity

BStandard

Timeline

3–5 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Kickserv is a field-service management platform built around jobs, scheduling, estimates, and QuickBooks integration. It has no native pipeline management, no custom objects, and a hard ceiling of 20 users. Twenty CRM is an open-source CRM (self-hostable under AGPL-3.0 or cloud at $9/user/mo) with standard People, Companies, Opportunities, Notes, and Tasks objects plus full custom-object support on Organization tier. The migration carries Kickserv Customers → Twenty Companies, Contacts → People, and Jobs → Twenty Opportunities with job-status, job-type, and work-order-number preserved as custom fields. Events map to Tasks with original start/end times. The main non-trivial translation is Kickserv's job-status and job-type pick-list values, which become Twenty custom pick-list fields. Employees must be provisioned in Twenty before migration so owner-resolution by email works correctly. Kickserv's invoicing and QuickBooks sync data do not migrate — those financial records stay in Kickserv or QuickBooks. FlitStack sequences the migration: Companies first (foreign-key root), then People (linked by companyId), then Opportunities (linked to Companies/People), then Tasks last, respecting Twenty's import-order constraint so no orphaned records land in the destination.

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

Kickserv logo

Kickserv

What's pushing teams away

  • Mobile app glitches frequently with white screen freezes, clock-in failures, and lag that disrupts technicians working in the field.
  • Hard 20-user ceiling forces growing companies to find an entirely new platform, with no path to higher user counts within Kickserv itself.
  • No offline mode means technicians in basements, rural properties, or dead zones lose access to their job data mid-assignment.
  • Page load performance in the web app is slow, frustrating office staff who rely on the dashboard for daily dispatching tasks.
  • QuickBooks Desktop integration requires an extra $50/month add-on fee that is not obvious at purchase time.

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 Kickserv objects map to Twenty CRM

Each row shows how a Kickserv 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.

Kickserv

Customer

maps to

Twenty CRM

Company

1:1
Fully supported

Kickserv Customers map 1:1 to Twenty Companies. Company name, domain, address, city, state, zip, country, industry, and employee count all have direct Twenty Company equivalents. Multi-location customers require a parent-company / child-company rule in the migration plan. Address fields may be split into street, city, state, and zip, so verify that each component aligns with Twenty's required format before import.

Kickserv

Contact

maps to

Twenty CRM

People

1:1
Fully supported

Kickserv Contacts map 1:1 to Twenty People. Each contact's name, email, phone, mobile phone, job title, and address fields migrate directly. Contacts without a primary customer link land as People with no companyId and are flagged for review. These orphaned records are logged in the migration audit report, and your admin can manually assign them to the correct company after import.

Kickserv

Contact → Customer link

maps to

Twenty CRM

People → Company (relation)

1:1
Fully supported

Kickserv's contact-to-customer association becomes a companyId relation on Twenty People. The contact's role on the Customer (e.g., Primary, Billing) maps to a custom role field on the People record. If a contact has multiple Customer associations, the primary (most recently modified) wins as companyId.

Kickserv

Job

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Kickserv Jobs are the core unit of work — they carry status, type, scheduled time, assigned employee, customer link, and line items. Twenty Opportunities store deal data with stage, amount, probability, and close date. Job name becomes Opportunity name; job status pick-list values map to Opportunity custom-stage fields; work order number and job type migrate as custom fields.

Kickserv

Job → Status pick-list values

maps to

Twenty CRM

Opportunity → Custom pick-list field

1:1
Fully supported

Kickserv job statuses (Unscheduled, Scheduled, In Progress, On Hold, Completed, Cancelled) have no direct Twenty equivalent. Each value becomes a custom pick-list option on a Job_Status__c custom field. The mapping table is delivered with the migration plan for admin review before migration runs.

Kickserv

Job → Type / Category

maps to

Twenty CRM

Opportunity → Custom pick-list field

1:1
Fully supported

Kickserv job types (Repair, Maintenance, Installation, Inspection, etc.) become a Job_Type__c custom pick-list on Twenty Opportunities. If Kickserv uses free-form type text rather than a pick-list, the unique values are enumerated during audit and created as pick-list options in Twenty before import.

Kickserv

Event

maps to

Twenty CRM

Task

1:1
Fully supported

Kickserv Events (scheduled work blocks with start/end time, employee assignment, and job link) migrate as Twenty Tasks. Event subject becomes Task subject, start time becomes due date, and the job link becomes a custom field (Related_Job__c) since Twenty Tasks can link to People, Companies, and Opportunities but not directly to custom objects.

Kickserv

Employee

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Kickserv Employees map to Twenty WorkspaceMembers. Owner-resolution in Opportunities and Tasks uses email match: each Kickserv employee email is matched to a Twenty user by email address. Unmatched employees are flagged before migration — your team either provisions them in Twenty first or assigns their records to a fallback owner.

Kickserv

Estimate / Invoice

maps to

Twenty CRM

Custom Object (Estimate / Invoice)

1:1
Fully supported

Kickserv Estimates and Invoices have no direct Twenty CRM equivalent. These migrate as a custom object (if your Twenty plan supports it) or as Opportunity custom fields storing the latest estimate/invoice amount, number, and status. Line items are not structurally migratable — they are referenced by estimate/invoice number.

Kickserv

Note

maps to

Twenty CRM

Note

1:1
Fully supported

Kickserv Notes on Customers, Contacts, or Jobs migrate as Twenty Notes attached to the corresponding Company, People, or Opportunity record. Rich-text formatting in Kickserv Notes is preserved as HTML in Twenty Notes. If the original notes contain file attachments, those files must be exported separately and linked manually in Twenty, as the note migration transfers text content only.

Kickserv

Time Entry

maps to

Twenty CRM

Task (custom fields)

1:1
Fully supported

Kickserv Time Entries track employee hours on jobs. Each time entry becomes a Task with custom fields for hours logged, billable/non-billable flag, and linked job reference. The Kickserv time-entry total hours are stored on the related Opportunity custom fields for reporting.

Kickserv

Custom fields on Job, Customer, Contact

maps to

Twenty CRM

Custom fields on Opportunity, Company, People

1:1
Fully supported

Kickserv custom fields on Jobs, Customers, and Contacts map to custom fields on Twenty Opportunities, Companies, and People respectively. All custom fields must be created in Twenty Settings → Data Model before import — the CSV import creates records, not fields. FlitStack delivers a custom-field creation checklist with the migration plan.

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.

Kickserv logo

Kickserv gotchas

High

No offline mode breaks field work in dead zones

High

API access gated behind Premium plan tier

Medium

QuickBooks sync errors corrupt data if not resolved pre-migration

Medium

20-user hard cap forces complete platform switch

Low

API token resets on password change

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

  • Twenty's Pro plan caps custom objects at 10 — Kickserv custom fields map to a custom object count that can exceed this

    Kickserv supports custom fields on Customers, Contacts, and Jobs. Each Kickserv custom field set (job-status variants, job-type categories, billing flags) maps to a Twenty custom field. On Pro tier you get 10 custom objects total. If your Kickserv setup has more than 10 distinct custom-field groups, you'll need to either consolidate them into fewer custom objects or upgrade to Organization tier before migration. We audit custom field count during scoping and flag the tier requirement before work begins.

  • Twenty's import requires users to exist before owner resolution works

    Twenty's import documentation explicitly warns: 'Invite users BEFORE importing data. If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.' Kickserv Employees are the owner/assignee source. Every Kickserv employee email must match a provisioned Twenty WorkspaceMember. If your Kickserv has employees without valid email addresses, those job assignments land as unassigned records. FlitStack runs an owner-resolution check before migration and surfaces the unmatched list.

  • Twenty CSV export is capped at 20,000 records per operation — Kickserv job archives may exceed this

    Twenty's export documentation states: 'Up to 20,000 records per export.' Large Kickserv instances with years of job history can produce more than 20,000 Job records. These must be exported in date-bounded chunks. FlitStack handles chunking by splitting exports on created_date ranges, importing each chunk sequentially, and re-establishing cross-chunk record relationships. The process requires maintaining an offset table, updating import order logs, and verifying that parent-child links remain intact across chunk boundaries. This adds planning time and must be disclosed in the migration plan.

  • Kickserv invoicing and QuickBooks sync data do not migrate — financial records require a separate plan

    Kickserv's invoicing object (with Stripe payment status, amounts, line items, and QuickBooks Desktop/Online sync flags) has no Twenty CRM equivalent. Twenty has no native invoicing, payment processing, or accounting integration. Invoices and payment records must remain in Kickserv or be handled by your QuickBooks setup post‑migration. FlitStack can export invoice records as a reference CSV for manual entry or accounting‑system re‑entry, but the migration scope covers CRM objects only. The exported CSV includes invoice number, amount, status, date, and customer reference, enabling manual entry or integration into a dedicated accounting tool after go‑live. Teams should schedule a post‑migration review of this data to ensure financial continuity.

  • Kickserv Events map to Tasks but the job-link is not a native Twenty relation

    Kickserv Events carry a job_id linking them to the scheduled work. Twenty Tasks can link natively to People, Companies, and Opportunities, but not to custom objects. Since Kickserv Jobs map to Opportunities, the Event's job link becomes a custom field (Related_Job_Opportunity_Id__c) on the Twenty Task. This preserves the relationship for reference but the Tasks list view in Twenty will not auto-filter by related Opportunity — your team uses the custom field filter instead.

Migration approach

Six steps for a successful Kickserv to Twenty CRM data migration

  1. Audit Kickserv data and design the Twenty target schema

    FlitStack exports all Kickserv objects via API or CSV: Customers, Contacts, Jobs, Events, Employees, Notes, Time Entries, and any custom fields. We enumerate unique pick-list values for job status and job type, count records per object, and identify records without email-linked employees. The output is a Kickserv data inventory with record counts, data quality flags, and a Twenty target-schema checklist: custom objects needed, custom fields to create per object, and pick-list option sets for each custom field.

  2. Provision Twenty workspace and create custom fields

    Before any import, your Twenty admin (or FlitStack on your behalf) creates all custom fields and custom objects in Settings → Data Model. Kickserv custom fields, job-status pick-list values, job-type values, work-order-number fields, and employee-role fields are all pre-created. Employees are invited to Twenty as WorkspaceMembers. FlitStack delivers a step-by-step Twenty setup checklist derived from the schema audit so nothing is missed before import begins.

  3. Migrate Companies first, then People, then Opportunities, then Tasks

    Twenty's import-order documentation specifies: 'Companies first (the one side of relationships), People second (linked via companyId), Opportunities third (linked to Companies/People), Custom objects with relations last.' FlitStack follows this sequence precisely. Companies land first with no dependencies. People land second with validated companyId links. Opportunities land third with validated companyId and assigneeId links. Tasks land last. This ordering prevents orphaned records where a child record references a non-existent parent.

  4. Run sample migration with field-level diff

    A representative slice — typically 100–500 records spanning Customers, Contacts, Jobs, Events, and Employees — migrates first. FlitStack generates a field-level diff comparing source Kickserv values against the migrated Twenty values for each record. You verify job-status value mapping, job-type value mapping, employee email matching, and custom field population. Any field mapping errors are corrected before the full run commits. No billing record is created until the sample diff is signed off.

  5. Execute full migration with delta-pickup window

    Full migration runs against Twenty using the validated mapping. A delta-pickup window (24–48 hours) captures any Kickserv records created or modified during the cutover. FlitStack uses scoped read access on Kickserv throughout — your team continues working in Kickserv during migration. An audit log records every operation. One-click rollback is available if reconciliation fails. Post-migration verification confirms all People have valid companyId links, all Opportunities have valid assigneeId, and all Tasks have valid relation references.

Platform deep dives

Context on both ends of the pair

Kickserv logo

Kickserv

Source

Strengths

  • All-in-one FSM including scheduling, dispatch, invoicing, and GPS tracking with no feature gating across tiers.
  • Bidirectional QuickBooks Online sync is Gold Developer certified by Intuit and handles customers, invoices, and payments.
  • Per-user flat pricing with no per-job or per-transaction fees that can surprise smaller operators.
  • Custom templates for estimates, invoices, and work orders using Liquid templating are fully supported.
  • Full account data export is available from the Account & Billing settings section.

Weaknesses

  • Mobile app suffers from frequent glitches, white screen freezes, and clock-in failures that disrupt field operations.
  • No offline access means technicians lose all functionality when network connectivity drops.
  • Hard user cap of 20 across all plans with no enterprise tier or unlimited option for growth.
  • API uses XML over HTTP rather than JSON, limiting tool compatibility and requiring transformation during migration.
  • Rate limits and bulk export endpoints are not publicly documented, making migration scoping imprecise.
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 Kickserv 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

    Kickserv: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Kickserv 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 Kickserv to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Kickserv to Twenty CRM migrations complete in 3–5 days of clock time for under 10,000 total records. Larger setups with 10,000+ records, multiple custom fields per object, or job-history archives requiring chunked CSV exports extend to 5–10 days. The longest planning step is custom-field creation in Twenty Settings → Data Model and employee provisioning so owner resolution works during import. Timeline does not include post-migration workflow rebuild in Twenty.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Kickserv.
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