CRM migration

Migrate from BookingKoala to Twenty CRM

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

BookingKoala logo

BookingKoala

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between BookingKoala and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours of clock time

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

BookingKoala structures its data around service businesses: customers who book, providers who deliver, and bookings that link the two. Its primary objects are Customers, Providers, Bookings, Industries, Services, Booking Forms, and Campaigns. Twenty CRM follows a conventional CRM model built on People, Companies, Opportunities, Notes, and Tasks, with custom objects available on Professional and Organization tiers. The migration therefore requires a significant data-model reshape — BookingKoala's booking records become Opportunities with custom fields capturing service type, status, and provider attribution, while BookingKoala's provider records surface as People with a custom role field. FlitStack AI reads BookingKoala's export API to pull customer records, provider records, booking history, and custom property data. We then transform each record to match Twenty's CSV import format, create any custom fields required to hold BookingKoala-specific concepts (service category, booking status, provider assignment) before importing, and sequence the load so Company records exist before People records are linked via companyId. BookingKoala automations, campaign logic, Zapier connections, and payment processing configurations do not migrate — those require a separate rebuild plan that we deliver alongside the data migration. The full run includes a delta-pickup window of 24–48 hours to capture any records created or modified in BookingKoala during the cutover period.

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

BookingKoala logo

BookingKoala

What's pushing teams away

  • Email-only support creates friction when urgent operational issues arise. Several reviews mention delays in getting responses, pushing frustrated customers toward platforms with live chat or phone support.
  • The 50-provider cap on the Premium plan blocks growth for mid-sized service businesses. Teams that exceed the limit must split into multiple accounts or migrate to an enterprise FSM platform.
  • No public API limits automation and migration options. Businesses that need programmatic access to booking data, customer records, or provider information outgrow the platform's CSV-only export model.
  • Advanced features including SMS, automatic reviews, gift cards, and multi-industry pricing are gated behind the Premium tier. Upgrading adds cost without guaranteeing feature parity with competing platforms.
  • Businesses that scale beyond simple booking and scheduling hit the ceiling of what BookingKoala's reporting and workflow tools offer, prompting migration to platforms with deeper analytics and custom automation.

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

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

BookingKoala

Customer

maps to

Twenty CRM

People

1:1
Fully supported

BookingKoala Customer records map directly to Twenty People. Fields including name, email, phone, address, and notes transfer as-is. A BookingKoala customer who has a company association will need the company name mapped to a Company record first, then linked via companyId on the People import. FlitStack sequences the migration so Company records load before People records to resolve the foreign key relationship correctly.

BookingKoala

Customer.company_name (optional field)

maps to

Twenty CRM

Company

1:1
Fully supported

BookingKoala customers optionally carry a company name. When present, this maps to a Twenty Company record using the company name as the displayName. If no company name exists in BookingKoala, no Company record is created — the People record stands alone with no companyId link. Duplicate company names in BookingKoala (multiple customers referencing the same employer) are deduplicated to a single Company record with multiple People records linked to it.

BookingKoala

Provider

maps to

Twenty CRM

People (or Workspace Member)

1:1
Fully supported

BookingKoala Provider records (name, email, phone, service categories assigned) map to Twenty People records with a custom Provider_Role__c field set to 'Provider' to distinguish them from customer People records. Provider records do not automatically become Twenty Workspace Members — FlitStack flags any BookingKoala provider without a corresponding user email and surfaces them for your team to create Workspace Member accounts in Twenty Settings → Members before the migration runs, so that the provider attribution on booking records can resolve correctly.

BookingKoala

Booking

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Each BookingKoala Booking record becomes a Twenty Opportunity. The Opportunity Name is constructed as '[Customer Name] — [Service Type] — [Scheduled Date]'. The booking amount maps to Opportunity Amount. Booking status (confirmed, completed, in-progress, cancelled) maps to a custom Booking_Status__c pick-list field. The scheduled date maps to the Opportunity's expectedCloseDate custom field. The customer is linked via the People record already imported, and the provider attribution is stored in a custom Provider_ID__c field pointing to the relevant People record.

BookingKoala

Booking.service_type

maps to

Twenty CRM

Opportunity (custom field: Service_Type__c)

1:1
Fully supported

BookingKoala service types (from the Industry and Service setup) have no native equivalent in Twenty's Opportunity object. We create a custom pick-list field Service_Type__c on the Opportunity object in Twenty before the migration runs. The pick-list values are populated from BookingKoala's service catalog export. If a booking references a service type not in the pick-list, it is imported as a free-text custom field value and flagged for your team to review.

BookingKoala

Booking.status

maps to

Twenty CRM

Opportunity (custom field: Booking_Status__c)

1:1
Fully supported

BookingKoala booking status values (Confirmed, In-Progress, Completed, Cancelled, No-Show) map to a custom Booking_Status__c pick-list field on Twenty Opportunities. Each status value is mapped explicitly — Cancelled and No-Show statuses trigger a note on the Opportunity record indicating the original BookingKoala status, since Twenty's native stage model is oriented around sales pipeline progression rather than service delivery states.

BookingKoala

Industry / Booking Form

maps to

Twenty CRM

Company (custom field: Industry_Category__c) + Opportunity (Service_Type__c)

1:many
Fully supported

BookingKoala Industries represent business categories (Home Cleaning, Pet Grooming, Moving Service) and each Industry has one or more Booking Forms attached. When migrating, we split this concept: the Industry name becomes a custom Industry_Category__c text field on the Company record, and the specific service delivered in each booking is captured in the Service_Type__c field on the Opportunity. This two-level mapping preserves both the vertical category and the specific service without requiring a complex custom object.

BookingKoala

Booking.price_book / pricing_parameter

maps to

Twenty CRM

Opportunity (Amount) + Note

1:1
Fully supported

BookingKoala pricing can be simple (flat fee) or complex (hourly rate × duration × parameters). The calculated booking amount maps directly to Opportunity Amount. If BookingKoala uses pricing parameters (multiplying base rate by service category, duration, or add-ons), the breakdown is captured as a Note attached to the Opportunity, preserving the pricing logic for reference even though it cannot reproduce BookingKoala's live calculation engine.

BookingKoala

Campaign / Automation

maps to

Twenty CRM

None — reference export provided

1:1
Fully supported

BookingKoala Campaigns and automations (email triggers, SMS on booking confirmation, review request sequences) have no equivalent in Twenty CRM's workflow model. Twenty's workflow builder is available on Professional and Organization tiers but does not include native sequencing, CRM-triggered email sends, or SMS actions. FlitStack exports your BookingKoala automation definitions as a JSON reference document listing each workflow name, trigger condition, and action sequence so your team can rebuild them in Twenty or a third-party tool like Zapier.

BookingKoala

Note / Attachment on Booking

maps to

Twenty CRM

Note

1:1
Fully supported

BookingKoala booking notes (internal staff comments, checklist completions, special instructions) migrate as Twenty Notes attached to the corresponding Opportunity record. If BookingKoala files are attached to a booking (photos, signed documents in My Drive), those are downloaded and re-uploaded as file attachments on the Opportunity or the related People record, subject to file size limits.

BookingKoala

Payment / Invoice record

maps to

Twenty CRM

Note on Opportunity

1:1
Fully supported

BookingKoala payment records (deposit taken, full payment captured, partial payment, refund) have no native equivalent in Twenty CRM — Twenty does not include a payment processing module. Payment and invoice history is preserved as a Note on the Opportunity record with the original payment amount, method, and date captured. For full payment accounting, a custom object can be created in Twenty Professional and Organization tiers to hold payment records, linking to the Opportunity via a relation field.

BookingKoala

BookingKoala custom properties on any object

maps to

Twenty CRM

Custom fields on respective Twenty object

1:1
Fully supported

Any BookingKoala custom property (added via the custom fields feature on Customers, Providers, or Bookings) is assessed for type compatibility. Text, number, date, and select types create matching custom fields in Twenty via Settings → Data Model before the migration runs. Multi-select values from BookingKoala are stored as comma-separated text in Twenty's custom field to preserve the data without requiring multi-select field creation, which Twenty handles differently depending on version.

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.

BookingKoala logo

BookingKoala gotchas

High

No public API — all migration relies on CSV exports

High

Provider count is capped at 50 on Premium plans

High

Multi-industry setup has no export path

Medium

CSV exports are date-range filtered and flat

Medium

Booking time logs export separately from booking records

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

  • BookingKoala booking forms create a service-category taxonomy that has no direct equivalent in Twenty's Opportunity stage model

    BookingKoala lets you configure multiple Booking Forms per Industry, each with its own set of service types, pricing parameters, and custom fields. When migrating, each distinct service type from each Booking Form needs a corresponding value in the custom Service_Type__c pick-list field on Twenty Opportunities. If you have five Booking Forms with ten service types each, you could end up with 50 distinct pick-list values — which is manageable, but your Twenty admin needs to pre-create the field and populate all values before the import CSV is uploaded. FlitStack generates the full list of required pick-list values from your BookingKoala service catalog export so nothing is missed.

  • BookingKoala provider records do not automatically become Twenty Workspace Members — user provisioning must happen first

    Twenty's CSV import resolves owner/assignee relations by matching against existing Workspace Members (via email). If a BookingKoala provider does not have a corresponding Twenty Workspace Member account at migration time, any booking record that references that provider via Provider_ID__c will land without a resolved owner and be flagged in the pre-migration audit. Your team must create Workspace Member accounts in Twenty Settings → Members and wait for each invitation to be accepted before the migration runs, or FlitStack can use a fallback owner assignment rule for unresolved providers.

  • BookingKoala's N:N customer-to-provider association has no built-in equivalent in Twenty's People model

    In BookingKoala, a customer can book with multiple providers and a provider can serve multiple customers — this N:N relationship is native. Twenty's People object is a flat contact list with a companyId link, but no native many-to-many contact-to-contact relationship. When a BookingKoala customer has booked with multiple providers, FlitStack creates a custom Provider_Associations__c custom field on the People record storing a comma-separated list of provider IDs. If your migration requires queryable provider history per customer, Twenty Professional and Organization tiers support creating a custom junction object — your admin chooses the structure before or after migration.

  • BookingKoala's per-booking custom fields from booking forms must be pre-created in Twenty before the import runs

    BookingKoala Booking Forms can include custom input fields beyond the standard booking metadata — these vary per form and per industry. Twenty's CSV import creates records, not fields: if a custom field does not already exist in Settings → Data Model, its data is silently skipped during import. FlitStack audits all BookingKoala booking form field configurations before migration and creates matching custom fields in Twenty. The Planning step includes a field creation checklist that your Twenty admin must action (or delegates to FlitStack) before the data load phase begins.

  • BookingKoala's built-in payment and invoice records have no native destination in Twenty

    BookingKoala stores deposit amounts, payment methods, partial payment balances, and refund records per booking. Twenty CRM has no native payment or invoicing module — these records cannot map to a standard Twenty object. FlitStack migrates payment summary data (total charged, payment method, payment date, refund amount) as a text Note attached to the relevant Opportunity. If your team needs structured payment records, a custom Payment object can be created on Twenty Professional and Organization tiers, but this requires your admin to define the field schema before migration and must be accounted for in the pre-migration planning phase.

Migration approach

Six steps for a successful BookingKoala to Twenty CRM data migration

  1. Audit BookingKoala data export and define Twenty custom field schema

    FlitStack connects to your BookingKoala account using scoped read access and exports all Customers, Providers, Bookings, Industries, Services, and custom property definitions. We also extract your Booking Form configurations to catalog every custom field used per form. From this export, we generate a Twenty pre-migration checklist: a list of custom fields (Service_Type__c, Booking_Status__c, Provider_ID__c, Industry_Category__c, Data_Source__c, Provider_Role__c) and custom pick-list values that must exist in Twenty's Settings → Data Model before any CSV import runs. Your Twenty admin creates these fields, or FlitStack creates them via the Twenty GraphQL API if your account has API access. This step typically takes 1–3 business days.

  2. Create Workspace Members in Twenty for provider resolution

    Twenty's import resolves owner and assignee relations by matching email addresses against existing Workspace Members. FlitStack generates a provider mapping report listing every BookingKoala provider record with its email. Your team creates Workspace Member accounts for any providers who need to appear as Twenty users (or confirms they should map only as People contact records). This step must complete before the migration data load so that Provider_ID__c fields can resolve correctly. FlitStack flags any provider without an email in BookingKoala for manual review.

  3. Load Company records first, then People, then Opportunities

    Following Twenty's import order constraint, FlitStack sequences the migration: (1) Companies are loaded first using BookingKoala company names from the Customer object. (2) People records are loaded second, linked to Companies via companyId for customers who have an associated company name, and tagged as either 'Customer' or 'Provider' via the custom Provider_Role__c field. (3) Opportunity records are loaded third, with each Opportunity linked to its customer People record via personId and its amount, service type, status, and provider attribution populated from the Booking record. Notes and file attachments are imported after all primary objects are loaded.

  4. Run a sample migration with field-level diff before the full load

    FlitStack migrates a representative slice of 200–500 records spanning multiple Industries, booking statuses, and provider assignments. We generate a field-level diff comparing the source BookingKoala values against the destination Twenty fields — verifying that Service_Type__c pick-list values are populated, Booking_Status__c mappings are correct, People records are linked to Companies where applicable, and Provider_ID__c fields resolve. The diff report is shared for your team to validate before the full migration run commits. Any mapping corrections are applied before the production migration begins.

  5. Execute full migration with delta-pickup window and audit log

    The full migration loads all remaining records into Twenty. A delta-pickup window of 24–48 hours runs concurrently with your team's continued use of BookingKoala, capturing any new bookings, customer updates, or provider changes that occur during the cutover period. FlitStack maintains a full audit log of every record created, updated, or skipped in Twenty. If reconciliation reveals missing or mismatched records, one-click rollback reverts the Twenty workspace to its pre-migration state so the migration can be re-run with corrections. After go-live, your team receives a migration summary report and the BookingKoala automation export JSON for rebuilding workflows in Twenty or a third-party tool.

Platform deep dives

Context on both ends of the pair

BookingKoala logo

BookingKoala

Source

Strengths

  • Quick-launch all-in-one setup with a built-in customer and provider portal, removing the need to buy and integrate separate scheduling tools.
  • Multi-industry architecture supports multiple service verticals within a single account, appealing to growing businesses with diverse offerings.
  • Multi-location support on Premium plans enables a single account to manage operations across several physical sites.
  • Zapier integration extends automation beyond native features, allowing small teams to connect BookingKoala to third-party accounting, CRM, and marketing tools.
  • Customer and provider data export via CSV from the admin dashboard, enabling basic data portability without developer involvement.

Weaknesses

  • No public API for programmatic data access — all migration and integration work relies on UI-based CSV exports with date-range filters.
  • Premium plan caps at 50 providers, which blocks mid-sized service businesses from growing within a single account.
  • Industry, booking form, and checklist structures have no export path and must be manually rebuilt at the destination.
  • Email-only support creates response delays that frustrate businesses with urgent operational or migration-blocking issues.
  • Advanced features including SMS notifications, automatic review requests, gift cards, and multi-industry pricing are gated behind the Premium tier, increasing total cost as needs grow.
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 BookingKoala 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

    BookingKoala: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most BookingKoala-to-Twenty migrations complete in 48–72 hours of clock time for datasets under 25,000 records. The pre-migration planning phase — creating custom fields in Twenty and provisioning Workspace Members — typically takes 1–3 business days and runs in parallel. Larger migrations with over 100,000 records, multiple booking form types, and provider-account provisioning extend to 5–10 business days. The longest single step is the custom field schema setup in Twenty because Twenty's CSV import requires fields to exist before records can be loaded — that preparation cannot be shortcut.

Adjacent paths

Related migrations to explore

Ready when you are

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