CRM migration
Field-level mapping, validation, and rollback between BookingKoala and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
BookingKoala
Source
Twenty CRM
Destination
Compatibility
11 of 12
objects map 1:1 between BookingKoala and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours of clock time
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
Twenty CRM
People
1:1BookingKoala 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)
Twenty CRM
Company
1:1BookingKoala 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
Twenty CRM
People (or Workspace Member)
1:1BookingKoala 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
Twenty CRM
Opportunity
1:1Each 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
Twenty CRM
Opportunity (custom field: Service_Type__c)
1:1BookingKoala 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
Twenty CRM
Opportunity (custom field: Booking_Status__c)
1:1BookingKoala 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
Twenty CRM
Company (custom field: Industry_Category__c) + Opportunity (Service_Type__c)
1:manyBookingKoala 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
Twenty CRM
Opportunity (Amount) + Note
1:1BookingKoala 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
Twenty CRM
None — reference export provided
1:1BookingKoala 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
Twenty CRM
Note
1:1BookingKoala 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
Twenty CRM
Note on Opportunity
1:1BookingKoala 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
Twenty CRM
Custom fields on respective Twenty object
1:1Any 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.
| BookingKoala | Twenty CRM | Compatibility | |
|---|---|---|---|
| Customer | People1:1 | Fully supported | |
| Customer.company_name (optional field) | Company1:1 | Fully supported | |
| Provider | People (or Workspace Member)1:1 | Fully supported | |
| Booking | Opportunity1:1 | Fully supported | |
| Booking.service_type | Opportunity (custom field: Service_Type__c)1:1 | Fully supported | |
| Booking.status | Opportunity (custom field: Booking_Status__c)1:1 | Fully supported | |
| Industry / Booking Form | Company (custom field: Industry_Category__c) + Opportunity (Service_Type__c)1:many | Fully supported | |
| Booking.price_book / pricing_parameter | Opportunity (Amount) + Note1:1 | Fully supported | |
| Campaign / Automation | None — reference export provided1:1 | Fully supported | |
| Note / Attachment on Booking | Note1:1 | Fully supported | |
| Payment / Invoice record | Note on Opportunity1:1 | Fully supported | |
| BookingKoala custom properties on any object | Custom fields on respective Twenty object1:1 | Fully supported |
Gotchas + challenges
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 gotchas
No public API — all migration relies on CSV exports
Provider count is capped at 50 on Premium plans
Multi-industry setup has no export path
CSV exports are date-range filtered and flat
Booking time logs export separately from booking records
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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
BookingKoala
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across BookingKoala and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
BookingKoala: Not publicly documented.
Data volume sensitivity
BookingKoala doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during BookingKoala to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave BookingKoala
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.