CRM migration
Field-level mapping, validation, and rollback between KulaHub and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
KulaHub
Source
Freshsales
Destination
Compatibility
5 of 8
objects map 1:1 between KulaHub and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
KulaHub stores all records as Contacts with no separate Account or Deal object, while Freshsales uses a three-tier model of Leads, Contacts, and Accounts plus a visual Opportunity pipeline. We extract company-level data embedded in Contact records during the discovery phase and create Freshsales Accounts before importing Contacts, preserving the business relationship. Email campaign history and GDPR unsubscribe flags transfer as linked records so Freshsales respects existing suppression lists on day one. KulaHub's undocumented API and absence of self-service bulk export require direct credential-based extraction and rate-limit probing during scoping, which adds time to the discovery phase. We do not migrate KulaHub workflows or email sequences; these are delivered as a written inventory for the customer's admin to rebuild in Freshsales.
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 Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
KulaHub
Contact
Freshsales
Lead, Contact, or Account-Contact pair (split required)
1:manyKulaHub stores all entities as Contacts with no separate Company object. We extract company name and domain from KulaHub Contact records during discovery and create Freshsales Accounts before importing Contacts. Individual Contact properties (name, email, phone, address) map to Freshsales Contact fields. The split between Lead and Contact on the destination depends on whether the customer wants unqualified prospects to enter Freshsales as Leads (defaulting to Contact conversion later) or directly as Contacts attached to Accounts. We confirm the preferred entry model during scoping and apply it consistently across all imported records.
KulaHub
Contact (company-level data)
Freshsales
Account
1:manyCompany information embedded in KulaHub Contact records (company name, website, industry, employee count where present) is extracted and consolidated into Freshsales Account records. We use company name as the dedupe key to avoid duplicate Accounts. If a KulaHub Contact references no company, it is imported as a standalone Contact without an Account link. Account creation precedes Contact import so that the AccountId lookup is resolved at import time.
KulaHub
Activity (calls, emails, meetings, system events)
Freshsales
Task, Event, or EmailMessage
1:1KulaHub activity logs (telephone calls, emails, meetings, and system events) are exported as chronological time-series and loaded in date order to preserve the audit trail. Calls map to Freshsales Task with TaskSubtype=Call and CallDurationInSeconds in custom fields. Emails map to Freshsales EmailMessage records linked to a Timeline Task entry. Meetings map to Event with StartDateTime and EndDateTime preserved. System events are imported as notes or custom Activity Log entries depending on their type. Owner mapping resolves KulaHub user references to Freshsales Users by email match.
KulaHub
Email Campaign
Freshsales
Contact Activity + Custom Fields
1:1KulaHub campaign records (campaign name, status, send date, open rate, click rate, unsubscribe count) are mapped to Freshsales as custom fields on Contact records plus linked activity records. GDPR unsubscribe flags from KulaHub migrate to Freshsales HasOptedOutOfEmail on Contact and to a custom gdpr_unsubscribe_date__c field. We do not recreate campaign objects in Freshsales CRM (Freshmarketer handles campaign management separately). The customer's admin maps which campaign metrics should appear as custom fields versus historical notes.
KulaHub
Task / Reminder
Freshsales
Task
1:1KulaHub tasks linked to Contacts migrate to Freshsales Task records with Status, Priority, and ActivityDate preserved. Task subject and body map to Subject and Description. Owner mapping resolves KulaHub task assignments to Freshsales User records. Tasks without a resolvable owner are held in a reconciliation queue and imported as tasks owned by the migration service account for the customer's admin to reassign.
KulaHub
Document / Attachment
Freshsales
Attachment (via Freshsales import)
1:1Documents attached to KulaHub Contacts are extracted as binary blobs and re-associated with the corresponding Freshsales Contact record. Freshsales supports attachment import via CSV with file upload or via API. We confirm the attachment size and format constraints during discovery and test a sample batch before loading the full set. Attachments without a parent Contact on the destination are held in a staging table.
KulaHub
User
Freshsales
User
1:1KulaHub user records export first so that OwnerId mapping is resolved before any record import that references users (Contacts, Tasks, Activities). We match KulaHub users to Freshsales Users by email address. Users without a matching Freshsales User are held in a provisioning queue for the customer's admin to create active Freshsales accounts before record import resumes. Inactive KulaHub users (departed staff) are imported as inactive Freshsales Users to preserve the owner history on migrated records.
KulaHub
Form Submission
Freshsales
Custom Fields or Note on Contact/Lead
lossyKulaHub captures website enquiries via forms linked to Contacts, but the form-field schema is not publicly documented. We request a sample form submission export during discovery to identify the actual field names and data types. Unmapped form fields are staged in a holding table and presented to the customer for manual mapping before the production run. Form submissions without a corresponding Contact record are imported as standalone Notes with a source tag identifying the form.
| KulaHub | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Lead, Contact, or Account-Contact pair (split required)1:many | Fully supported | |
| Contact (company-level data) | Account1:many | Fully supported | |
| Activity (calls, emails, meetings, system events) | Task, Event, or EmailMessage1:1 | Fully supported | |
| Email Campaign | Contact Activity + Custom Fields1:1 | Fully supported | |
| Task / Reminder | Task1:1 | Fully supported | |
| Document / Attachment | Attachment (via Freshsales import)1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Form Submission | Custom Fields or Note on Contact/Leadlossy | 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
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Discovery and data audit
We extract a sample of Contact records from KulaHub using customer-provided credentials, identifying all active fields, activity types, document attachments, and user accounts. We probe the API with a small batch of requests to observe response structure and any rate-limit headers. We request a sample form submission export to identify the form-field schema. We audit the total record counts across Contacts, activities, documents, and users to build the migration volume estimate. The discovery output is a written scope document with confirmed object mapping, any unmapped fields requiring customer decisions, and an estimated timeline.
Company extraction and Account creation plan
We extract company-level data (company name, domain, industry) from KulaHub Contact records and deduplicate by company name to build the target Account list. We create the Freshsales Accounts in a staging phase before any Contact import so that AccountId lookups are available at Contact import time. Any KulaHub Contact without a company reference is flagged for the customer's decision: import as a standalone Contact or consolidate into an existing Account.
GDPR and email preference export
We extract unsubscribe states, GDPR consent flags, and email campaign history from KulaHub as separate linked records. These are exported as custom field values on the Contact record plus a gdpr_consent_log__c text area for audit timestamps. We preserve the original KulaHub consent source (form submission, manual entry, imported) if present. The customer confirms whether transactional and marketing consent need separate fields in Freshsales.
Sandbox migration and reconciliation
We run a full migration into a Freshsales test account (14-day free trial) using production-like data volume from the discovery extract. The customer reconciles record counts (Accounts in, Contacts in, Activities in), spot-checks 25-50 records against the KulaHub source, and signs off the mapping before production migration begins. Any field mapping corrections, unmapped field decisions, and GDPR field confirmations happen in this phase.
Production migration in dependency order
We run production migration in record-dependency order: Users first (for owner mapping), then Accounts (from extracted company data), then Contacts (with AccountId resolved), then Activity history (Tasks, Events, EmailMessages via Freshsales API with rate-limit handling), then Documents. GDPR preference data is applied to each Contact at import time. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow handoff
We freeze KulaHub writes during cutover, run a final delta migration of any records modified during the migration window, then enable Freshsales as the system of record. We deliver a written inventory of any KulaHub workflow or automation configurations requiring rebuild in Freshsales. We support a five-business-day hypercare window for reconciliation issues. We do not rebuild KulaHub workflows or sequences as Freshsales automation as standard scope; that is a separate engagement or an internal admin task.
Platform deep dives
KulaHub
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Freshsales.
Object compatibility
2 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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your KulaHub to Freshsales 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 Freshsales
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.