CRM migration

Migrate from Unanet CRM by Cosential to Salesforce Sales Cloud

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 logo

Unanet CRM by Cosential

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

100%

13 of 13

objects map 1:1 between Unanet CRM by Cosential and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Unanet CRM by Cosential logo

Unanet CRM by Cosential

What's pushing teams away

  • Account Planning feature remains weak despite repeated user requests, leaving Business Development teams unsupported in long-term account strategy.
  • Navigation is widely criticized — convoluted search, hard-to-find dashboards, and a steep learning curve frustrate new users.
  • Double data entry is required in some workflows, particularly when integrating with financial systems or proposal tools outside the core CRM.
  • The interface is described as dated and clunky compared to modern CRM alternatives, affecting daily user experience.
  • Users report that the platform can be slow to load dashboards and reports, especially with large datasets accumulated over years.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How Unanet CRM by Cosential objects map to Salesforce Sales Cloud

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

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

Unananet 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

maps to

Salesforce Sales Cloud

Contact

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

Individual__c (Custom Object)

1:1
Fully supported

If 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

maps to

Salesforce Sales Cloud

Opportunity

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

Opportunity StageName

1:1
Fully supported

Stage 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

maps to

Salesforce Sales Cloud

OpportunityTeamMember

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

Proposal__c (Custom Object)

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

Past_Performance__c (Custom Object)

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

Project__c (Custom Object)

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

AccountContactRelation

1:1
Fully supported

Unanet 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)

maps to

Salesforce Sales Cloud

Task / Event / Note

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

ContentVersion / ContentDocumentLink

1:1
Fully supported

Unanet 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

maps to

Salesforce Sales Cloud

Address (Account Address) / Location__c

1:1
Fully supported

Unanet 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.

Gotchas + challenges

What specifically takes care here

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 logo

Unanet CRM by Cosential gotchas

High

Non-standard object names block naive field mapping

High

API requires Enterprise License agreement

Medium

Duplicate contact risk on bulk imports

Medium

Custom fields require manual schema enumeration

Low

Proposal templates carry template logic, not just data

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Multi-pipeline pursuit stage mapping creates duplicate StageName values

    Unanet allows each Pursuit record to belong to a separate pipeline with its own stage-value set — stage values are per-record, not global. Salesforce Opportunity StageName uses a single global pick-list per Sales Process tied to RecordTypeId. When a firm has more than one Unanet pursuit pipeline, mapping all stage names into Salesforce's global pick-list creates duplicates (e.g., two pipelines both have 'Qualified'). We handle this by pre-coordinating RecordTypeId assignments with your Salesforce admin: each Unanet pipeline maps to its own Salesforce record type so stage values remain unique per type. This requires the Salesforce admin to create record types before the migration loads data.

  • Proposal document versioning requires a custom object strategy

    Unanet Proposal stores document attachments and version history as native platform features. Salesforce has no native Proposal object — proposals must live in a custom Proposal__c object with custom fields. Version history from Unanet (e.g., v1, v2, v3) does not map to a Salesforce-native version control mechanism. We handle this by creating separate Proposal__c records per version, keyed by version number, and storing the original Unanet attachment reference or re-uploaded Salesforce Files link in a custom field. Your team decides whether to display all versions on the Opportunity page layout or collapse to the latest. This is not data loss — it is a conscious schema design decision made before migration.

  • Unanet Compass API pagination and authentication require conversion layer

    Unanet's Compass v1/v2 API uses HTTP basic-auth (username:password) with x-compass-firm-id and x-compass-api-key headers, plus Lucene query syntax for search endpoints. Salesforce uses OAuth 2.0 Connected App credentials or JWT bearer token flow for API access. These are not directly compatible — FlitStack builds an authentication bridge that converts Compass credentials into a Salesforce Connected App session, then applies Lucene query pagination (page size, cursor offset) to Salesforce Bulk API query patterns. API rate limits also differ: Compass has no publicly documented per-day limit, while Salesforce Enterprise editions default to 100,000 daily API requests plus 1,000 per user license. We monitor Salesforce API usage during migration and throttle or batch accordingly.

  • Past performance and AEC-specific fields require pre-built custom objects

    Unanet's AEC-specific data — past performance records (award value, client name, project description), professional certifications, and past-performance document attachments — have no standard Salesforce equivalent. Salesforce Opportunity does not natively store SF-1449 past-performance fields. Teams migrating from Unanet must pre-build Past_Performance__c and Proposal__c custom objects with the correct field types before data can land. We deliver a schema setup plan listing every required custom object, field label, API name (__c), data type, and pick-list value set so your Salesforce admin can create the schema in a sandbox before the migration test run. Skipping this step results in unmapped fields and data loss at the destination.

Migration approach

Six steps for a successful Unanet CRM by Cosential to Salesforce Sales Cloud data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Unanet CRM by Cosential logo

Unanet CRM by Cosential

Source

Strengths

  • Deep AEC-native data model purpose-built for project-based relationship tracking and proposal generation
  • Proposal automation directly integrated with CRM data, eliminating manual re-entry for qualification packages
  • Strong company-association model handles multi-role contacts and firm hierarchy within a single object structure
  • Reputation and track record with 1,000+ AEC firms over 20+ years provides industry credibility
  • Comprehensive Microsoft Outlook integration and mobile app support field teams working on projects

Weaknesses

  • Non-standard field names and AEC-specific object names require significant field-level mapping work
  • Account Planning feature is consistently under-developed and a pain point for Business Development teams
  • Navigation and search are widely criticized as convoluted, suggesting a dated UX
  • Custom fields are not fully documented in the public API schema, making discovery a manual process
  • Pricing starts at $50/user/month with significant implementation costs, making it expensive for smaller AEC firms
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

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

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Unanet CRM by Cosential: Not publicly documented.

  • Data volume sensitivity

    B

    Unanet CRM by Cosential doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Unanet CRM by Cosential to Salesforce Sales Cloud migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Unanet CRM by Cosential to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during Unanet CRM by Cosential to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most Unanet-to-Salesforce migrations complete in 48–72 hours of clock time for under 50,000 records. Larger setups with 200,000+ records or multiple proposal, past-performance, and project custom objects extend to 5–10 days. The longest planning step is building the Proposal__c and Past_Performance__c custom objects, coordinating RecordTypeId assignments with your Salesforce admin, and validating the field mapping plan before any data loads into your production org.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Unanet CRM by Cosential.
Land in Salesforce Sales Cloud, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day