CRM migration
Field-level mapping, validation, and rollback between KulaHub and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
KulaHub
Source
Twenty CRM
Destination
Compatibility
9 of 10
objects map 1:1 between KulaHub and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from KulaHub to Twenty CRM is a structural migration that must address three compounding challenges: KulaHub has no self-service bulk export and no public API documentation, so data extraction requires direct coordination with their support team and a pre-migration API probe to measure throughput. KulaHub also has no native Deals or Pipeline object, which means any deal-stage tracking must be re-created in Twenty as Opportunities with a custom stage set. And KulaHub stores GDPR unsubscribe preferences as undocumented contact flags that we carry into Twenty as custom People fields to preserve suppression lists. Twenty's CSV import requires custom fields to exist before data rows are uploaded, and the import order must follow Companies before People before Opportunities. We handle all three sequencing requirements and deliver a written workflow rebuild inventory for KulaHub automations and email campaign sequences that do not transfer as code.
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 KulaHub 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.
KulaHub
Contact
Twenty CRM
People
1:1KulaHub Contacts map directly to Twenty People. Every KulaHub Contact property (name fields, email, phone, address, notes, tasks, documents) migrates as a typed People field. KulaHub GDPR unsubscribe flags and email preferences transfer as custom boolean fields on People so the new system respects existing suppression lists. Company affiliation in KulaHub maps to a Twenty People-Company link resolved after the Company import phase.
KulaHub
Company (embedded in Contact)
Twenty CRM
Company
1:1KulaHub does not expose a separate Company or Account object; all business entities are stored as Contact records. We extract any contact records where company name is populated, deduplicate by domain and name, and load these as Twenty Company records before the People import so that the companyId relationship is satisfied at insert time.
KulaHub
Activity (calls, emails, meetings, system events)
Twenty CRM
Task / Event / Note
1:1KulaHub activity logs are exported as a chronological time-series. Calls migrate as Twenty Task records with taskType=Call. Meetings migrate as Twenty Event records with startDateTime, endDateTime, and attendees preserved. General system events and notes migrate as Twenty Note records linked to the parent People or Company via the relationship ID. We load in date order to preserve the audit timeline and set the ActivityDate to the original KulaHub timestamp.
KulaHub
Task / Reminder
Twenty CRM
Task
1:1KulaHub Tasks linked to contacts migrate as Twenty Tasks with Status, Priority, and due date preserved. Task assignment resolves the KulaHub owner reference to the corresponding Twenty Workspace Member by email match. Any KulaHub task with no matching user in Twenty goes to the reconciliation queue for the customer's admin to provision before the production import resumes.
KulaHub
Document / Attachment
Twenty CRM
Attachment via Note
1:1KulaHub documents attached to contacts are extracted as binary blobs and re-associated with the corresponding Twenty People record via file attachment linkage. File name and original upload date transfer as metadata. We flag any file exceeding Twenty's size limit during discovery so the customer can decide whether to link via URL instead.
KulaHub
Email Campaign (history and templates)
Twenty CRM
Note on People / Campaign tracking
1:1KulaHub campaign history including opens, clicks, and unsubscribe events migrates as Note records on the relevant People records with a type tag identifying it as campaign engagement data. GDPR unsubscribe preferences from campaign tracking are carried as typed boolean People fields to ensure the destination system respects suppression. We do not recreate email campaigns as sendable objects because Twenty does not include built-in email campaign management; campaign send capability requires a third-party email platform integration.
KulaHub
User
Twenty CRM
Workspace Member
1:1KulaHub Users are exported first so owner and assignee references resolve correctly during subsequent record imports. We match KulaHub users to Twenty Workspace Members by email address. Any KulaHub user referenced in activities or tasks but not yet provisioned in Twenty is held in the reconciliation queue. Twenty requires members to accept their invitation and appear in the Members list before record imports that reference them can succeed.
KulaHub
Form Submission
Twenty CRM
Custom Fields on People
1:1KulaHub captures website enquiries via forms linked to contact records. The form-field schema is not publicly documented. We request a sample export of form-submission data during discovery and map each key-value pair to a custom People field in Twenty's Data Model. Unmapped fields are held in a staging table and presented to the customer for manual mapping before the production migration run.
KulaHub
GDPR Preference Data
Twenty CRM
Custom Boolean Fields on People
lossyKulaHub stores email unsubscribe states and GDPR preference flags per contact but the underlying data format is not documented. We export these flags as typed boolean custom fields on the People object in Twenty, preserving the original suppression state so the destination system can respect existing opt-outs without requiring re-consent. Email marketing to migrated contacts is disabled until the customer confirms the preference data migration is complete and verified.
KulaHub
Report (contact export and activity reports)
Twenty CRM
Note / Reference Document
1:1KulaHub reports including the All Contacts export and activity reports are included in the migration scope as reference data. We extract these as CSV files and cross-reference record counts against migrated data to validate completeness. The report layouts themselves do not transfer; Twenty reporting is configured fresh using the migrated data as its source.
| KulaHub | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company (embedded in Contact) | Company1:1 | Fully supported | |
| Activity (calls, emails, meetings, system events) | Task / Event / Note1:1 | Fully supported | |
| Task / Reminder | Task1:1 | Fully supported | |
| Document / Attachment | Attachment via Note1:1 | Fully supported | |
| Email Campaign (history and templates) | Note on People / Campaign tracking1:1 | Fully supported | |
| User | Workspace Member1:1 | Fully supported | |
| Form Submission | Custom Fields on People1:1 | Fully supported | |
| GDPR Preference Data | Custom Boolean Fields on Peoplelossy | Fully supported | |
| Report (contact export and activity reports) | Note / Reference Document1: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.
KulaHub gotchas
API has no public documentation or developer portal
No self-service bulk export or documented rate limits
Deleted record restoration costs £80/hour with 30-day window
Contact form field schema is not publicly documented
GDPR preference data portability not confirmed
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
Discovery and KulaHub export coordination
We audit the KulaHub account for contact volume, activity record count, document attachments, user list, and any workaround structures for deal tracking. We initiate the assisted export workflow with KulaHub support using customer-provided credentials. During this window we probe the API with a small batch of requests to measure throughput, response structure, and any rate-limit headers, and request a sample export of form-submission data to document the field schema. The discovery output is a written migration scope confirming record counts, extraction timeline, and a mapping plan for every object type.
Schema design and Twenty workspace preparation
We configure the Twenty workspace before any data is loaded. This includes creating custom fields in Settings Data Model to cover every KulaHub contact property and GDPR flag, creating a Company object schema with domain-based dedupe, creating an Opportunity object with a stage set matching any deal-stage data reconstructed from KulaHub, and inviting all Workspace Members so that owner lookups resolve during import. Fields are created before import files are generated to ensure every column has a destination.
Test migration into a staging environment
We run a full migration into a Twenty staging workspace using production-like data volumes to validate field mappings, import ordering, and relationship resolution. We reconcile record counts (Contacts in KulaHub against People in Twenty, Companies extracted against Companies loaded, Activities counted against Tasks and Events), run 25-50 spot-checks on individual records, and verify that companyId and opportunityId lookups are resolved correctly. Any mapping corrections or missing fields are addressed here before production migration begins.
Company extraction and import
We extract all KulaHub contact records where a company name is populated, deduplicate by company name and domain, and load the resulting Company records into Twenty first. The domain field is set from the contact's email domain for automatic dedupe. Company is the one-side of the relationship and must load before any People or Opportunity records that reference it.
People, GDPR preferences, and Activities import
We load KulaHub People records in dependency order after Companies are confirmed. GDPR unsubscribe flags and email preferences are carried as typed boolean fields on each People record. Activity history (calls, emails, meetings, notes) is loaded as a chronological batch in date order with the original KulaHub timestamp preserved as ActivityDate. Documents and attachments are re-linked to their parent People records after the People load is validated. KulaHub form submissions are mapped from the discovered field schema to the corresponding Twenty custom People fields.
Opportunity reconstruction (if deal data exists)
If the customer has stored deal-stage data in KulaHub using custom fields or workaround structures, we reconstruct this as Twenty Opportunities during this phase. We map the source deal stage values to Twenty Opportunity stage names, set the linked Company and People references, and load Opportunities after all Company and People records are validated. This phase is omitted if KulaHub contains no deal data, which is the default for a standard KulaHub installation.
Cutover, delta migration, and workflow handoff
We freeze KulaHub writes, run a final delta migration of any records created or modified during the migration window, validate record counts against the pre-migration baseline, and switch the team to Twenty as the system of record. We deliver a written inventory of every KulaHub automation, email sequence, and campaign workflow that does not migrate as code, with a brief description of each and its recommended Twenty equivalent for the customer's admin to rebuild. We support a one-week post-cutover reconciliation window.
Platform deep dives
KulaHub
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 KulaHub 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
KulaHub: Not publicly documented.
Data volume sensitivity
KulaHub 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 KulaHub to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your KulaHub 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 KulaHub
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.