CRM migration
Field-level mapping, validation, and rollback between Daylite and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Daylite
Source
Salesforce Sales Cloud
Destination
Compatibility
7 of 13
objects map 1:1 between Daylite and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Daylite and Salesforce have structurally different data models that require deliberate mapping decisions before migration begins. Daylite's unified People object does not map directly to either Salesforce Lead or Contact; the split rule must be defined during discovery based on whether each Person has an associated Opportunity. Companies map 1:1 to Salesforce Account, and Opportunities map to Opportunity with stage names normalized from Daylite's plain-text values to Salesforce's picklist. Daylite Projects have no direct Salesforce equivalent; we preserve them as a custom object with custom fields. Appointments and Tasks migrate as Event and Task respectively, with UTC timestamps and attendee relations reconstructed. Groups, Tags, and plugin-stored data require configuration-level decisions during scoping. We do not migrate Billings Pro records, Daylite Workflows, or automations as code; we deliver written inventories for the customer's admin to rebuild post-migration.
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 Daylite object lands in Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Daylite
People
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyDaylite People with at least one linked Opportunity map to Salesforce Contact attached to the corresponding Account. Daylite People with no linked Opportunity map to Salesforce Lead. The split is evaluated at migration time by querying the Opportunity foreign key in the People table. We preserve the original Daylite Person ID in a custom field daylite_person_id__c on both Lead and Contact for audit and cross-referencing. Any Person marked as a Company contact (is_company_primary_contact flag) is treated as a Contact regardless of Opportunity status.
Daylite
Company
Salesforce Sales Cloud
Account
1:1Daylite Company records map directly to Salesforce Account. The Company name becomes Account Name; the address fields map to BillingAddress. The Daylite Company ID is preserved in a custom field daylite_company_id__c. Accounts are imported before any People migration so that AccountId lookup references are satisfied at Contact insert time. Multiple Daylite People linked to the same Company all resolve to the same AccountId.
Daylite
Opportunity
Salesforce Sales Cloud
Opportunity
1:1Daylite Opportunities map to Salesforce Opportunity with the linked Person resolved to Contact (via the AccountId chain) and the linked Company resolved to AccountId. The Opportunity monetary value maps to Amount, probability maps to a probability percentage we derive from the Daylite stage mapping table, and close date maps to CloseDate. Stage names are normalized from Daylite plain-text strings to the Salesforce Sales Process stage picklist via the stage mapping table produced during scoping.
Daylite
Pipeline Stage
Salesforce Sales Cloud
Opportunity Stage
lossyDaylite Opportunity stages are freeform text strings with no managed taxonomy. We extract every distinct stage value from the export, deduplicate variants (handling typos and case differences), and present a stage mapping table during scoping. Each unique Daylite stage maps to a Salesforce stage name and probability percentage that the customer approves before migration. The mapping becomes a Salesforce Sales Process deployed to the Sandbox before production import.
Daylite
Project
Salesforce Sales Cloud
Custom Object (Project__c)
lossyDaylite Projects have no native Salesforce equivalent. We pre-create a Project__c custom object in the destination org during schema design, with custom fields for project status, start and end dates, budget amount, linked Company (Account lookup), and linked Person (Contact lookup). Project tasks migrate as Task records linked to the Project__c parent via WhatId. If the iOSXpert Time&Budget plugin tables are present in the export, budget and cost data migrate to custom numeric fields on Project__c.
Daylite
Task
Salesforce Sales Cloud
Task
1:1Daylite Tasks map to Salesforce Task with Status, Priority, ActivityDate, and Description preserved. Standalone Tasks carry no WhatId reference. Tasks linked to a Project carry the Project__c custom object ID as WhatId. Task assignment maps by resolving the Daylite owner ID to Salesforce UserId via the owner mapping produced during scoping. Sub-tasks inherit the parent Task ID as a custom parent_task__c field.
Daylite
Appointment
Salesforce Sales Cloud
Event
1:1Daylite Appointments map to Salesforce Event with StartDateTime and EndDateTime preserved in UTC. The all-day flag maps to IsAllDayEvent. Location maps to Location. Category (Daylite's categorical tag) maps to a custom Event Category picklist that we create during schema design. Attendee links migrate as EventRelation records pointing to the resolved Contact or Lead.
Daylite
Note
Salesforce Sales Cloud
Note
1:1Daylite Notes migrate to Salesforce Note records linked via ContentDocumentLink to the parent object (Lead, Contact, Account, Opportunity, or Project__c). The note body migrates as rich text. Notes with a linked Person attach to the corresponding Contact; notes with a linked Company attach to the Account. We preserve the Daylite note creation timestamp in a custom field daylite_note_created__c.
Daylite
Group
Salesforce Sales Cloud
Custom Field or Campaign Membership
lossyDaylite Groups are static groupings of People or Companies with no direct Salesforce equivalent. During scoping, the customer chooses between recreating Groups as a custom multi-select picklist on Contact (groups__c), as Salesforce Campaign records with CampaignMember membership, or as Salesforce Topics. We implement the chosen strategy during schema design and populate group membership during import.
Daylite
Tag
Salesforce Sales Cloud
Label or Custom Multi-Select Picklist
lossyDaylite Tags are cross-object string labels exported as a separate lookup table. We map tags to either a custom Label__c multi-select picklist on each applicable object or to Salesforce Labels, depending on the destination's tagging strategy. The customer confirms the strategy during scoping.
Daylite
Attachment
Salesforce Sales Cloud
ContentDocument
1:1Daylite attachments are bundled into the compressed export as a flat folder with filenames referencing the parent object type and ID. We parse the filename structure, reattach each file to the correct Salesforce record via ContentVersion and ContentDocumentLink, and preserve the original filename and Daylite creation date in custom ContentVersion fields.
Daylite
Custom Field
Salesforce Sales Cloud
Custom Field
1:1Daylite custom field definitions (name, type, options) live in a separate metadata table in the export. We extract both the definition table and the value columns, map each Daylite field type to the nearest Salesforce field type (text to Text, date to Date, number to Number, checkbox to Checkbox, picklist to Picklist), pre-create the custom fields on the appropriate Salesforce object during schema design, and migrate values during the standard object import phase.
Daylite
iOSXpert Plugin Data
Salesforce Sales Cloud
Custom Fields on Existing Objects
lossyiOSXpert plugins (Time&Budget, FinanceConnector) write to additional tables within Daylite's database. If those tables are present in the exported CSVs, we migrate their data to custom fields on the corresponding Daylite object (e.g., Time&Budget hours to a custom numeric field on Project__c). If a plugin was not installed when the export was generated, its tables will be absent and we flag the gap for the customer to confirm whether the data exists elsewhere.
| Daylite | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| People | Lead or Contact (split required)1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Project | Custom Object (Project__c)lossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Appointment | Event1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Group | Custom Field or Campaign Membershiplossy | Fully supported | |
| Tag | Label or Custom Multi-Select Picklistlossy | Fully supported | |
| Attachment | ContentDocument1:1 | Fully supported | |
| Custom Field | Custom Field1:1 | Fully supported | |
| iOSXpert Plugin Data | Custom Fields on Existing Objectslossy | Mapping required |
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.
Daylite gotchas
Database export download expires after 14 days
Billings Pro self-serve is discontinued, cloud migration required
Plugin-stored data is only exportable if the plugin is installed
Custom field definitions must be manually mapped
Pipeline stage names are plain text, not a managed taxonomy
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Export validation and scoping
We begin by confirming that the Daylite database export download link is still active. If it has expired, we request a fresh export before proceeding. We ingest the CSV tables and audit the schema: we identify all present tables, check for iOSXpert plugin table signatures (Time&Budget, FinanceConnector), flag absent plugin tables for customer confirmation, and extract the custom field definition table alongside the value tables. We produce a scoping document listing all migratable objects, record counts per table, and a preliminary object mapping summary before any schema design begins.
Schema design in Salesforce Sandbox
We design the destination schema in a Salesforce Full Copy or Partial Copy Sandbox. This includes provisioning the Project__c custom object with custom fields, creating any custom fields from Daylite's custom field metadata table on People, Company, Opportunity, Task, and Event, defining Salesforce Sales Process and stage picklist values from the deduplicated stage mapping table, configuring the Group recreation strategy (campaigns, multi-select picklist, or topics), and creating any required record types. Schema is deployed via Salesforce metadata API into the Sandbox for validation before production.
Sandbox migration and record reconciliation
We run a full migration into the Sandbox using production-like data volume. The customer's admin reviews record counts across all objects, spot-checks 25-50 records per object against the Daylite source, validates the Lead-Contact split logic, confirms stage name normalization, and reviews the Project__c custom object structure. We resolve any mapping corrections in the Sandbox before proceeding to production. This step prevents mapping errors from reaching production data.
Owner reconciliation and User provisioning
We extract every distinct Daylite owner referenced on People, Company, Opportunity, Task, Appointment, and Note records and match by email address against the Salesforce destination org's User table. Any Daylite owner without a matching Salesforce User is placed in a reconciliation queue. The customer's Salesforce admin provisions the missing Users (active for current team members, inactive for departed users whose records must be reassigned) before record import proceeds. OwnerId references must be valid at insert time for most standard Salesforce objects.
Production migration in dependency order
We execute production migration in strict dependency order: Accounts (from Companies) first, then Leads and Contacts with the split rule applied and AccountId lookups resolved, then Opportunities with AccountId, OwnerId, and stage values resolved, then Project__c records with custom field data, then Tasks and Events with parent WhatId references, then Notes as ContentDocumentLink records, then attachments as ContentVersion. Each phase emits a row-count reconciliation report before the next phase begins. Activity history volumes exceeding CSV loader capacity are migrated via the Salesforce Bulk API 2.0 with batch chunking and exponential backoff on rate limit responses.
Cutover, validation, and rebuild handoff
We freeze Daylite writes during the cutover window, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We validate record counts, spot-check a second sample against Daylite source data, and deliver a migration summary report to the customer's admin. We deliver a written inventory of every Daylite automation or workflow with a recommended Salesforce Flow equivalent for the admin or a Salesforce partner to rebuild. We support a one-week post-cutover window for reconciliation issues. We do not rebuild Daylite automations as Salesforce Flow inside the migration scope.
Platform deep dives
Daylite
Source
Strengths
Weaknesses
Salesforce Sales Cloud
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 Daylite and Salesforce Sales Cloud.
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
Daylite: Not publicly documented as specific numeric quotas; standard SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Daylite exposes a bulk API — large-volume migrations stream efficiently.
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 Daylite to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Daylite to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Daylite
Other ways to arrive at Salesforce Sales Cloud
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.