CRM migration

Migrate from Unanet CRM by Cosential to Twenty CRM

Field-level mapping, validation, and rollback between Unanet CRM by Cosential and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Unanet CRM by Cosential logo

Unanet CRM by Cosential

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

91%

10 of 11

objects map 1:1 between Unanet CRM by Cosential and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Unanet CRM by Cosential serves Architecture, Engineering, and Construction firms with a vertically integrated data model: companies, contacts, deals, personnel records, and a proposal automation module built for pursuit workflows. Twenty CRM is a modern open-source CRM with a simpler schema — People (contacts), Companies (accounts), Opportunities (deals), Notes, Tasks, and custom objects — that loads data via CSV import or REST/GraphQL API. We map Unanet's Contact to Twenty People, Company to Company, and Deal to Opportunity with pipeline-stage value mapping. The non-trivial objects are Unanet's personnel module (no native Twenty equivalent — migrates as a custom object) and the proposal/publishing module (also becomes a custom object with templates preserved as read-only notes for rebuild reference). Unanet's N:N contact-to-company associations split across multiple CSV rows with one primary company per person and secondary associations stored in a custom field. Our migration runs against Unanet's Compass API (v1/v2) with scoped read access. A delta-pickup window captures any records modified during the cutover. Audit logs and one-click rollback are available if reconciliation fails.

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

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Unanet CRM by Cosential objects map to Twenty CRM

Each row shows how a Unanet CRM by Cosential 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.

Unanet CRM by Cosential

Contact

maps to

Twenty CRM

People

1:1
Fully supported

Unanet Contact maps directly to Twenty People. Every standard contact field (name, email, phone, job title, address) maps to its Twenty People equivalent. Contacts associated with multiple Unanet companies require a primary company assignment with secondary associations preserved in a custom field.

Unanet CRM by Cosential

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Unanet Company maps to Twenty Company. Company name, domain/website, industry, employee count, and revenue transfer as direct field mappings. Unanet company hierarchies (parent/child) map to the Twenty Company parent field. Multi-company contact associations collapse to one primary companyId with secondary companies stored in a custom relationship field.

Unanet CRM by Cosential

Deal / Pipeline Stage

maps to

Twenty CRM

Opportunity + stage field

1:1
Fully supported

Unanet Deal maps to Twenty Opportunity. Deal name, amount, and expected close date transfer directly. Pipeline stages from Unanet map to Twenty Opportunity stage values — each Unanet pipeline stage name requires explicit value mapping to a Twenty stage option (or a custom stage pick-list if the pipeline has more than 5 stages).

Unanet CRM by Cosential

Activity (call, email, meeting, task)

maps to

Twenty CRM

Task or Note

1:1
Fully supported

Unanet activity records (call logs, emails, meetings, tasks) map to Twenty Tasks with Type differentiation. Email subject lines and body text migrate to the Task subject or a linked Note. Original activity timestamps and owners are preserved on the Twenty record. Unanet's Outlook-synced emails that were stored as activity records export as Tasks with the email subject as the Task name.

Unanet CRM by Cosential

Personnel module

maps to

Twenty CRM

Custom Object: Personnel

1:1
Fully supported

Unanet's personnel module (tracking staff experience, certifications, and project associations) has no native equivalent in Twenty. We migrate this as a custom Personnel object in Twenty with fields for personnel type, name, contact details, and a custom field capturing the Unanet personnel ID for traceability. Personnel-to-company associations map as lookups to the Company object.

Unanet CRM by Cosential

Proposal / Publishing module

maps to

Twenty CRM

Custom Object: Proposal

1:1
Fully supported

Unanet's proposal and publishing content (project profiles, qualification statements, resumes, government forms) migrates to a custom Proposal object in Twenty. Proposal content sections migrate as rich-text fields. Proposal templates migrate as read-only Note records with a custom field flagging them as template originals — they cannot be used for auto-population in Twenty and must be rebuilt in the workflow builder.

Unanet CRM by Cosential

User / Owner

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

Unanet users and deal owners resolve by email match against Twenty Workspace Members. If a Unanet user does not have a corresponding Twenty account, their records are assigned to a fallback owner (or flagged for manual reassignment before migration). Active vs inactive user status in Unanet maps to the account status in Twenty.

Unanet CRM by Cosential

Attachment / File

maps to

Twenty CRM

Attachment

1:1
Fully supported

Unanet file attachments on companies, contacts, and deals re-upload to Twenty's attachment structure. Files are linked to the parent record (People, Company, or Opportunity) by ID. Large files that exceed Twenty's storage limits are flagged for manual re-upload with the original file name and URL preserved as a reference note.

Unanet CRM by Cosential

Custom Object

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Unanet custom objects map 1:1 to Twenty custom objects when the target object already exists in the Twenty workspace. When a Unanet custom object has no corresponding Twenty object, we create one with the Unanet field schema. Custom object relationships that are N:N in Unanet require junction objects in Twenty if the association is many-to-many.

Unanet CRM by Cosential

Company-Contact N:N Association

maps to

Twenty CRM

People.companyId (primary) + custom field (secondary)

many:1
Fully supported

Unanet supports N:N relationships between contacts and companies natively. Twenty's People object has a single companyId lookup. We migrate the most recently modified company association as the primary companyId and store all secondary company IDs as a comma-separated custom field (Secondary_Company_Ids__c) for reference and manual reconciliation.

Unanet CRM by Cosential

Project / Pursuits

maps to

Twenty CRM

Custom Object: Project

1:1
Fully supported

Unanet's project/pursuit records track project-specific data including directories, financials, logistics, and marketing documentation. These have no native Twenty equivalent. We migrate as a custom Project object with fields for project name, status, associated company, key dates, and a link to the primary opportunity. Project-specific documentation migrates as Note records attached to the Project.

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

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Custom fields must exist in Twenty before CSV import can reference them

    Twenty's CSV import creates records but does not create fields. Any custom field referenced in the import CSV that does not already exist in Settings → Data Model is silently skipped — the data for that field is lost without warning. Unanet's personnel module and proposal metadata require multiple custom fields that must be pre-created in Twenty before the migration CSV is uploaded. We deliver a pre-flight schema checklist specifying every custom field name, type, and pick-list value that must exist in Twenty before data lands. This is the most common source of data loss in Twenty migrations and requires explicit planning before cutover.

  • Unanet's proposal and publishing module has no functional equivalent in Twenty

    Unanet's Publisher module auto-populates proposal templates with CRM data and generates qualification statements, project profiles, and government forms. Twenty has no native proposal generation or document automation. We migrate proposal content as a custom Proposal object and preserve templates as read-only Note records with a template flag. The actual proposal workflow — auto-population, section sequencing, document output formats — must be rebuilt using Twenty's workflow builder and a third-party document generation tool. Teams should allocate 2–4 weeks for proposal workflow redesign as a parallel workstream to the data migration.

  • Unanet's N:N contact-company associations collapse to a single companyId in Twenty

    Unanet allows a contact to be associated with multiple companies simultaneously (a common pattern in AEC where individuals work across multiple firms). Twenty's People object has a single companyId lookup. We migrate the most recently modified company association as the primary companyId and store all secondary company IDs as a comma-separated custom field (Secondary_Company_Ids__c). However, the UI in Twenty will only display the primary company. Users must open the secondary field to see the full association history, which changes how AEC firms track cross-company contacts in their day-to-day workflow.

  • Unanet's Outlook AI email extraction may not export activity records in standard format

    Unanet's AI-powered Outlook integration extracts contact details from emails and updates the CRM automatically, but the underlying activity records may not store the full email body, headers, or thread context in Unanet's standard activity format. Email activity that was captured via Outlook AI may export with incomplete data compared to emails logged manually as Unanet activities. We run a pre-migration data audit to identify Outlook AI-sourced records and surface any data gaps before the migration runs so your team can decide whether to supplement with PST export.

  • Twenty CSV export is capped at 20,000 records per operation

    Twenty's export function limits each export to 20,000 records per object. Unanet instances with large datasets (particularly firms with years of activity history, multiple personnel records, and extensive proposal archives) may require multiple export passes per object, sorted by ID or date. We sequence the export in batches and merge the resulting CSV files before mapping to Twenty's import format. This adds planning time but does not affect data completeness if the batching strategy is established before the migration window opens.

Migration approach

Six steps for a successful Unanet CRM by Cosential to Twenty CRM data migration

  1. Audit Unanet data and pre-create Twenty schema

    We export Unanet's full data model via the Compass API including contacts, companies, deals, activities, personnel records, proposals, custom objects, and file attachments. A data audit identifies the pipeline stage values, personnel types, proposal templates, and custom field configurations that need to exist in Twenty. We deliver a schema setup checklist: every custom object, custom field name, field type, and pick-list value that must be created in Settings → Data Model before the migration CSV is uploaded. This step runs first because Twenty cannot create fields during import.

  2. Map and transform Unanet data model to Twenty schema

    We build the field mapping document across all Unanet objects and Twenty objects. Personnel and proposal modules receive custom object definitions with all fields mapped. Pipeline stages are mapped to Twenty Opportunity stage values with any non-matching stages creating custom stage options. N:N contact-company associations are resolved to one primary companyId with secondary companies in a custom field. Owner resolution runs against Twenty Workspace Members by email. All mapping decisions are documented for your review before any data moves.

  3. Migrate in dependency order: Companies → People → Opportunities → Custom Objects

    Twenty's import order requires the one-side of relationships to exist before the many-side. We migrate Company records first, then People (with companyId lookups resolved), then Opportunities (with companyId and peopleId resolved), then custom objects (Personnel, Proposal, Project). Activities and Notes migrate last, attached to their parent records. File attachments are re-uploaded to the appropriate Twenty records after the parent records are created. Each batch runs against a staging environment first to verify field mapping and relationship resolution before the production migration.

  4. Run sample migration with field-level diff and owner verification

    A representative slice of 200–500 records (spanning contacts, companies, opportunities, a few personnel entries, and one proposal) migrates first. We generate a field-level diff between the Unanet source values and the Twenty destination values so you can verify that personnel type mapping, pipeline stage values, and company lookups are correct. Owner resolution is validated against the Workspace Members list. Any unmapped fields or failed lookups surface in the diff report for immediate correction before the full run commits.

  5. Execute full migration with delta-pickup window and audit log

    The full migration runs against Twenty's production workspace with a delta-pickup window of 24–48 hours after the initial load. During the delta window, any records created or modified in Unanet are captured and appended to the Twenty import. A migration audit log records every record created, every lookup resolved, and every custom field populated. One-click rollback reverts all migration changes if reconciliation fails. After rollback verification, your team can cut over to Twenty knowing the data reflects Unanet's final state at go-live.

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
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

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 Twenty CRM.

  • 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 Twenty CRM 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 Twenty CRM data migrations

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

Can't find your answer?

Walk through your Unanet CRM by Cosential to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Unanet CRM by Cosential to Twenty CRM migrations complete in 48–72 hours for datasets under 25,000 records with no custom objects. Migrations involving the personnel module, proposal archive, or multiple custom objects extend to 5–10 business days because Twenty requires pre-creation of every custom field before import. The longest planning step is the schema setup — creating the Personnel, Proposal, and Project custom objects with all required fields in Twenty's Settings → Data Model before the migration runs.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Unanet CRM by Cosential.
Land in Twenty CRM, 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