CRM migration
Field-level mapping, validation, and rollback between Unanet CRM by Cosential and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Unanet CRM by Cosential
Source
Salesforce Sales Cloud
Destination
Compatibility
13 of 13
objects map 1:1 between Unanet CRM by Cosential and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
48–72 hours
Overview
Unanet CRM by Cosential and Salesforce Sales Cloud share the same high-level CRM concepts — contacts, companies, opportunities — but their data models diverge significantly in the details that matter for an Architecture, Engineering, or Construction firm. Unanet stores proposals, past performance records, and pursuit-level stage sets as native objects; Salesforce requires custom objects with __c fields for each of these. Unanet uses snake_case field names and embeds locations inside organizations; Salesforce normalizes addresses on Account, uses PascalCase field names, and gates stage pick-lists behind RecordTypeId assignment. FlitStack AI reads from Unanet's Compass v1/v2 API (basic-auth + firm ID + API key), transforms each record through a field-level mapping plan, and loads into Salesforce via Bulk API — preserving original timestamps, resolving owners by email match, and surfacing every Unanet proposal attachment reference as a custom field on the Salesforce Proposal__c custom object. Workflows, automations, and proposal-generation templates do not migrate; we export definitions as a rebuild reference for your Salesforce admin.
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 Unanet CRM by Cosential 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.
Unanet CRM by Cosential
Organization
Salesforce Sales Cloud
Account
1:1Unananet Organization maps 1:1 to Salesforce Account. Organization name, industry, employee count, and annual revenue transfer as standard Account fields. Multiple Unanet locations on one organization collapse to the primary Account address; secondary locations require a Location__c custom object or Address records in Salesforce.
Unanet CRM by Cosential
Individual
Salesforce Sales Cloud
Contact
1:1Unanet Individual maps directly to Salesforce Contact. First name, last name, email, phone, mobile, job title, and address fields transfer as standard Contact fields. Each Individual's primary Organization becomes the Contact.AccountId lookup. Original create timestamps are preserved as a custom Original_Create_Date__c field.
Unanet CRM by Cosential
Individual
Salesforce Sales Cloud
Individual__c (Custom Object)
1:1If your Unanet Individual records contain AEC-specific fields not represented in standard Salesforce Contact (e.g., Professional License Number, Certification Expiry Date), FlitStack creates a custom Individual__c object with __c fields and links it to the Contact via a lookup. All custom fields are enumerated during scoping.
Unanet CRM by Cosential
Pursuit
Salesforce Sales Cloud
Opportunity
1:1Unanet Pursuit maps to Salesforce Opportunity. Pursuit name becomes Opportunity Name; pursuit amount becomes Amount; expected close date maps to CloseDate; owner email resolves to OwnerId. Pursuit stage maps to Opportunity StageName via a value-mapping table. Unanet's multi-pipeline-per-record model requires a custom Pursuit_Pipeline__c field when more than one pipeline is present.
Unanet CRM by Cosential
Pursuit Stage
Salesforce Sales Cloud
Opportunity StageName
1:1Stage names in Unanet map value-by-value to Salesforce Opportunity StageName values. Stage probability, forecast category, and stage-entry timestamps are preserved as custom fields on Opportunity (Stage_Probability__c, Forecast_Category__c, Stage_Entered_Date__c). When multiple Unanet pursuit pipelines exist, we pre-coordinate with your Salesforce admin to create the correct RecordTypeId assignments before stage mapping runs.
Unanet CRM by Cosential
Pursuit Team Member
Salesforce Sales Cloud
OpportunityTeamMember
1:1Unanet pursuit team members — assigned individuals with a role on a pursuit — transfer as Salesforce OpportunityTeamMember records. Team member role maps to TeamMemberRole (e.g., Pursuer, Estimator, Subject Matter Expert). Primary contact flag maps to OpportunityContactRole with IsPrimary = true. Both objects require the parent OpportunityId to exist first, so team migration runs after opportunity insertion.
Unanet CRM by Cosential
Proposal
Salesforce Sales Cloud
Proposal__c (Custom Object)
1:1Unanet Proposal has no Salesforce native equivalent. FlitStack creates a Proposal__c custom object linked to the target Opportunity (via Proposal__c.Opportunity__c lookup) and the associated Account. Fields include: Proposal_Name__c, Amount__c, Status__c, Version__c, Created_Date__c, and Proposal_File_Reference__c (storing the original Unanet attachment URL or re-uploaded Salesforce Files link). Version history from Unanet is preserved as separate Proposal__c records keyed by version number.
Unanet CRM by Cosential
Past Performance Record
Salesforce Sales Cloud
Past_Performance__c (Custom Object)
1:1Unanet stores past performance data (award value, client name, project description, contract type) as native pursuit fields. These map to a custom Past_Performance__c custom object with fields: Award_Value__c, Client_Name__c, Project_Description__c, Contract_Type__c, Start_Date__c, End_Date__c, and Contact__c lookup to the relevant Salesforce Contact. Linked to Opportunity via a lookup field for SF-1449 and past-performance reporting.
Unanet CRM by Cosential
Project
Salesforce Sales Cloud
Project__c (Custom Object)
1:1Unanet Project records (post-pursuit project tracking) transfer as a custom Project__c object in Salesforce linked to the Account and the originating Opportunity. Fields include: Project_Name__c, Project_Value__c, Status__c, Start_Date__c, End_Date__c, and Location__c. Unanet's financial connector data (if present) can be mapped to Project__c.Financial_Summary__c as a long-text area.
Unanet CRM by Cosential
Individual-Organization Relationship
Salesforce Sales Cloud
AccountContactRelation
1:1Unanet allows multiple Organizations to be associated with a single Individual (N:N relationship). Salesforce Contact supports a primary AccountId plus AccountContactRelation for additional associations. FlitStack migrates the primary organization as Contact.AccountId; secondary organizations become AccountContactRelation records with a Roles field. The relationship type from Unanet is preserved in AccountContactRelation.Roles.
Unanet CRM by Cosential
Activity Log (Call, Email, Meeting, Note)
Salesforce Sales Cloud
Task / Event / Note
1:1Unanet activity logs for calls, emails, and meetings map to Salesforce Task (Type = Call/Email) and Event records respectively. Original timestamps, owners, and parent-record links (ContactId, OpportunityId) are preserved. Unanet notes map to Salesforce Notes (the enhanced Notes object, not legacy Note). Attachments referenced in Unanet notes are re-uploaded to Salesforce Files and linked.
Unanet CRM by Cosential
Attachment / File
Salesforce Sales Cloud
ContentVersion / ContentDocumentLink
1:1Unanet file attachments on any record (Individual, Organization, Pursuit, Proposal) re-upload to Salesforce Files. ContentVersion stores the binary; ContentDocumentLink associates the file to the target Salesforce record (Contact, Account, or custom object). Salesforce's 25MB per-file limit is enforced; files exceeding this are flagged before migration and handled as external links stored in a custom URL field.
Unanet CRM by Cosential
Location
Salesforce Sales Cloud
Address (Account Address) / Location__c
1:1Unanet Organizations often have multiple office locations stored inline. The primary location becomes the Account billing/shipping address fields on Account. Secondary locations are migrated as Location__c custom object records linked to the Account. Each Location__c record stores: Location_Name__c, Street__c, City__c, State__c, Postal_Code__c, Country__c, and Is_Primary__c.
| Unanet CRM by Cosential | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Organization | Account1:1 | Fully supported | |
| Individual | Contact1:1 | Fully supported | |
| Individual | Individual__c (Custom Object)1:1 | Fully supported | |
| Pursuit | Opportunity1:1 | Fully supported | |
| Pursuit Stage | Opportunity StageName1:1 | Fully supported | |
| Pursuit Team Member | OpportunityTeamMember1:1 | Fully supported | |
| Proposal | Proposal__c (Custom Object)1:1 | Fully supported | |
| Past Performance Record | Past_Performance__c (Custom Object)1:1 | Fully supported | |
| Project | Project__c (Custom Object)1:1 | Fully supported | |
| Individual-Organization Relationship | AccountContactRelation1:1 | Fully supported | |
| Activity Log (Call, Email, Meeting, Note) | Task / Event / Note1:1 | Fully supported | |
| Attachment / File | ContentVersion / ContentDocumentLink1:1 | Fully supported | |
| Location | Address (Account Address) / Location__c1: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.
Unanet CRM by Cosential gotchas
Non-standard object names block naive field mapping
API requires Enterprise License agreement
Duplicate contact risk on bulk imports
Custom fields require manual schema enumeration
Proposal templates carry template logic, not just data
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
Audit source schema and deliver Salesforce schema setup plan
FlitStack AI reads the Unanet Compass API to enumerate all active objects, fields, and pick-list values currently in use — including any custom fields your firm has added. We compare this against Salesforce's standard objects and deliver a schema setup plan listing every custom object (__c), custom field, pick-list value set, and RecordTypeId assignment your Salesforce org needs before data arrives. Your admin creates the schema in a sandbox; we validate it matches the plan before the migration test run begins.
Authenticate to both platforms and validate data extraction
We authenticate to Unanet's Compass API using your firm's API key and access code, then run a data extraction against a representative sample (200–500 records per object) to validate field-level data quality. We flag records with missing required foreign keys (e.g., Individual without a primary Organization), malformed dates, and pick-list values with no Salesforce match. Owner email resolution runs next: Unanet owner IDs are matched by email to Salesforce User records. Unmatched owners are flagged for your team to invite to Salesforce or assign to a fallback user before migration commits.
Run a test migration with field-level diff
A representative slice — typically 200–500 records spanning Individual, Organization, Pursuit, Proposal, and Activity — migrates into your Salesforce sandbox. We generate a field-level diff report showing source value, transformed value, and destination field for every mapped column. You verify that proposal versioning, past performance fields, and multi-pipeline stage mapping look correct before the full run. Any field mapping corrections are applied to the migration plan before the production run is scheduled.
Migrate in dependency order with foreign-key resolution
Salesforce requires Accounts before Contacts (via AccountId) and Opportunities before OpportunityTeamMembers. We sequence the migration so Organization records load first, then Individual records with their AccountId lookups resolved, then Pursuit records with their OwnerId and AccountId lookups resolved, then Proposal__c, Past_Performance__c, and Activity records. AccountContactRelation records for multi-organization Individuals are inserted after Contacts. OpportunityTeamMember records are inserted after Opportunities. This sequencing prevents foreign-key violations that would block record insertion.
Cut over with delta-pickup window and audit log
The full migration loads into your production Salesforce org. A delta-pickup window — typically 24–48 hours — captures any Unanet records created or modified during the cutover period. Your team continues working in Unanet during migration; FlitStack uses scoped read access only. An audit log records every insert, update, and skip operation with the reason code (e.g., no matching Account, pick-list value not found). One-click rollback is available if reconciliation fails — this reverts all Salesforce changes to the pre-migration state so you can re-run with a corrected plan.
Platform deep dives
Unanet CRM by Cosential
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 Unanet CRM by Cosential 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
Unanet CRM by Cosential: Not publicly documented.
Data volume sensitivity
Unanet CRM by Cosential 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 Unanet CRM by Cosential to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Unanet CRM by Cosential 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 Unanet CRM by Cosential
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.