CRM migration

Migrate from Ziggu to Twenty CRM

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

Ziggu logo

Ziggu

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

83%

10 of 12

objects map 1:1 between Ziggu and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Ziggu and Twenty CRM serve fundamentally different purposes. Ziggu is a client-portal platform built for property developers — its data model centers on Projects, Units, Clients, Documents, and Conversations. Twenty CRM is a relationship-management platform with a standard People-Companies-Opportunities schema. The migration requires translating Ziggu's project-centric records into CRM-native objects: Ziggu Clients become Twenty CRM People records with linked Company records; Ziggu Projects map to Twenty CRM Opportunities, with pipeline stage values converted to Opportunity Stage pick-list entries; Ziggu Tasks migrate as Twenty CRM Tasks with original due dates and assignees; Document attachments re-upload to Twenty CRM Files or attach to Notes. The critical translation layer is mapping Ziggu's multi-status project lifecycle (Inquiry, Reservation, Contract, Handover) into Twenty CRM's Opportunity Stage model — this is not a 1:1 field map but a workflow decision your team makes before migration runs. FlitStack sequences the migration so Companies load first, then People with their companyId lookups, then Opportunities with linked company and person associations, then Tasks and Notes. Activity history (Conversations) migrates as Notes on the linked People record. Custom fields and add-on modules (Financials, Surveys, Sales) in Ziggu create custom fields or custom objects in Twenty CRM depending on their structure. Workflows, automations, and approval chains in Ziggu do not migrate — they must be rebuilt in Twenty CRM's workflow builder or documented for manual recreation.

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

Ziggu logo

Ziggu

What's pushing teams away

  • Teams outgrow the platform when project volumes exceed tier minimums — the per-active-project pricing model becomes expensive at scale and forces difficult decisions about which legacy projects to deactivate.
  • The lack of a public REST API means Zapier/Make integrations must be built around screen scraping or webhook triggers, creating fragile automations that break on UI updates.
  • Property developers with complex multi-entity corporate structures find Ziggu's flat account model insufficient — there is no parent-company hierarchy or multi-subsidiary consolidation view.
  • When a project is deactivated it becomes read-only and cannot accept new tasks, conversations, or file uploads, which creates friction in post-handover support scenarios where the development team still needs to communicate with buyers.

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 Ziggu objects map to Twenty CRM

Each row shows how a Ziggu 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.

Ziggu

Client

maps to

Twenty CRM

People

1:1
Fully supported

Ziggu Clients map directly to Twenty CRM People. Each Client record carries name, email, phone, and company association — these translate to People.name, People.emails.primary, People.phone, and People.companyId. Original client IDs preserved as custom field Source_Client_ID__c for delta-run de-duplication. Email addresses populate the emails array with the primary flag set, and any secondary phone numbers map to additional phone entries on the People record.

Ziggu

Client

maps to

Twenty CRM

Company

1:many
Fully supported

When a Ziggu Client record includes a company name field (companyName or similar), that value splits into a new Twenty CRM Company record with the person linked via companyId. If no company name exists, the person links to a default 'Individual Client' placeholder Company record to satisfy Twenty CRM's required companyId on People.

Ziggu

Project

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Ziggu Projects translate to Twenty CRM Opportunities. Project.name becomes Opportunity.name; project total value or unit prices sum into Opportunity.amount; project status (Inquiry/Reservation/Contract/Works/Handover) maps to Opportunity.stage values. Your team defines the stage pick-list before migration — FlitStack generates the value-mapping plan.

Ziggu

Unit

maps to

Twenty CRM

Opportunity (line item)

1:many
Fully supported

Ziggu Units within a Project split into separate Twenty CRM Opportunities when each unit represents an independent deal (separate buyer, separate price). Units with shared buyer and price aggregate into a single Opportunity with amount = unit count × unit price. FlitStack surfaces the splitting logic in the pre-migration plan so your team confirms the rule before data moves.

Ziggu

Project Status

maps to

Twenty CRM

Opportunity Stage

1:1
Fully supported

Ziggu project lifecycle stages (Inquiry, Reservation, Contract, Works, Handover) map to Twenty CRM Opportunity Stage values. Each source stage name maps to a target stage name via a value-map. Probability and forecast category re-applied from Twenty CRM's stage setup. Stage-transition timestamps preserved as custom datetime fields Stage_Entered_Date__c.

Ziggu

Task

maps to

Twenty CRM

Task

1:1
Fully supported

Ziggu Tasks map 1:1 to Twenty CRM Tasks. Task.title → Task.title; Task.dueDate → Task.dueDate; Task.assignee email resolves to Twenty CRM workspace member by email match. Tasks linked to a Project attach to the migrated Opportunity; Tasks linked to a Client attach to the migrated People record.

Ziggu

Document

maps to

Twenty CRM

File / Note

1:1
Fully supported

Ziggu Documents attached to Projects or Clients download and re-upload to Twenty CRM as Files on the corresponding Opportunity or People record. Documents with text content (specifications, briefs) migrate as Twenty CRM Notes with the file linked as an attachment. File size and format compatibility checked against Twenty CRM limits before migration.

Ziggu

Conversation

maps to

Twenty CRM

Note

1:1
Fully supported

Ziggu Conversation messages migrate as Twenty CRM Notes on the linked People record. Each message becomes a separate Note with timestamp, sender, and message body. Original conversation threading is not preserved — messages appear as sequential notes ordered by creation date. Conversation metadata (read/unread status) does not migrate as Twenty CRM has no equivalent.

Ziggu

Financials add-on

maps to

Twenty CRM

Custom fields on Opportunity

1:1
Fully supported

Ziggu Financials module (payment schedules, invoices, balances) translates to custom Number, Currency, or Date fields on Twenty CRM Opportunity. Payment status, amount paid, and balance due become custom fields: Z_Payment_Status__c, Z_Amount_Paid__c, Z_Balance_Due__c. Invoice line items require a custom Invoice_Lines__c relation object if granular detail must be preserved.

Ziggu

Surveys add-on

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Ziggu Surveys module translates to a Twenty CRM custom object (Survey_Response__c) with custom fields matching each survey question. Respondent email links to the People record via email match. Survey scores and NPS values become Number fields. Multi-question surveys create a one-to-many relationship (one People record → many Survey_Response__c records).

Ziggu

Sales add-on

maps to

Twenty CRM

Opportunity + Custom fields

1:1
Fully supported

Ziggu Sales module (leads, reservations, contracts) maps to Twenty CRM Opportunities with custom fields capturing reservation status and contract terms. Reservation date becomes Z_Reservation_Date__c; contract signed flag becomes Z_Contract_Signed__c (checkbox). Pipeline stage handles the overall progression — the Sales add-on fields augment rather than replace the standard Opportunity object.

Ziggu

Owner / Team Member

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

Ziggu team member email addresses resolve against Twenty CRM Workspace Members by email match. Unmatched owners are flagged before migration — your Twenty admin either creates a matching workspace member or assigns those records to a fallback owner. No record lands without a valid Twenty CRM assignee.

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.

Ziggu logo

Ziggu gotchas

High

Deactivated projects lock tasks and files but keep conversations open

High

Per-active-project pricing creates a minimum portfolio cost

Medium

Add-ons scale per active unit, not per project

Medium

No public API means migration runs through manual export workflows

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

  • Project-to-Opportunity stage mapping requires manual definition before migration

    Ziggu's project lifecycle (Inquiry → Reservation → Contract → Works → Handover) has no native equivalent in Twenty CRM. Your team must define Opportunity Stage values in Twenty CRM that match your project workflow before data moves. If you skip this step, the migration loads with blank stage values and your pipeline view shows no records. FlitStack delivers a stage-definition worksheet with your Ziggu status distribution so the pick-list is populated before validation runs. This is the single most common delay in Ziggu-to-Twenty migrations — plan 1–2 days for stage definition rather than assuming a default set will work.

  • Multi-unit Projects split into separate Opportunities requires explicit business rule

    Ziggu Multi-unit Projects contain many Units, each potentially with a different buyer and price. Twenty CRM Opportunities have a single amount field and a single company/person link. FlitStack must apply a splitting rule — either each Unit becomes its own Opportunity (preserving individual price and buyer) or all Units aggregate into one Opportunity with a summed amount. Neither approach is automatically correct; your project manager confirms the rule. A mixed setup (some projects split, some aggregated) adds complexity because FlitStack needs a flag in the source data to determine which rule applies per project. We surface this decision in the pre-migration discovery call.

  • Twenty CRM API rate limits apply during bulk import via REST — CSV import bypasses them

    Twenty CRM's REST API enforces 100 calls/minute on Pro tier and 200/minute on Organization tier. FlitStack uses Twenty CRM's bulk CSV import endpoint by default, which is not rate-limited and handles up to 20,000 records per import. However, if your migration includes post-import operations (webhook triggers, workflow automations firing on record creation), those calls count against the rate limit and may throttle. We configure import settings to disable post-import triggers during migration to prevent rate-limit errors. Re-enable triggers after migration completes.

  • Ziggu Conversations do not map to Twenty CRM's activity tracking — they become Notes

    Ziggu's Conversation threads are a chronological message log between team members and clients, attached to Projects or Clients. Twenty CRM has no Conversation or messaging thread object — the closest construct is Notes on a People record. Each Ziggu message becomes a separate Note with timestamp and author. The thread context (who replied to whom, in what order) is preserved in Note ordering but the conversation UI is lost. If your team relies on Ziggu Conversations for client-facing communication history, that workflow must be rebuilt in Twenty CRM's Notes section or replaced with email logging.

  • Ziggu add-on modules (Multi-unit Projects, Partner Portal, Financials) require custom object design in Twenty CRM

    Ziggu's add-on modules — Multi-unit Projects, Partner Portal, Financials, Surveys, and Sales — are not standard CRM objects. They do not map 1:1 to any Twenty CRM native object. FlitStack translates each add-on into custom fields on Opportunity or a custom object (for Survey_Response__c), but the schema must be designed before migration. If you use the Financials module heavily (payment schedules, invoices, balance tracking), the custom field count on Opportunity can become large. Twenty CRM's data model editor (Settings → Data Model) handles up to 100 fields per object — FlitStack checks field count before migration and splits into additional custom objects if needed.

Migration approach

Six steps for a successful Ziggu to Twenty CRM data migration

  1. Audit Ziggu data and define Twenty CRM schema

    FlitStack runs a scoped read export of your Ziggu workspace covering Clients, Companies, Projects, Units, Tasks, Documents, and Conversation history. We also inventory add-on module usage (Financials, Surveys, Sales) and flag records with missing required fields. Simultaneously, your team defines Opportunity Stage values in Twenty CRM matching your project lifecycle, and creates any custom fields or custom objects needed for add-on data. We deliver a schema setup checklist so the Twenty CRM workspace is ready before data validation begins.

  2. Map Ziggu records to Twenty CRM objects and validate load order

    FlitStack builds the field-level mapping document covering every source field to its Twenty CRM destination. We apply the unit-splitting rule (per-Unit Opportunity vs. aggregated) and confirm it with your project manager. The import sequence is locked: Companies first (to resolve companyId on People), then People (to resolve Opportunities' person links), then Opportunities, then Tasks and Notes. Documents and Conversations import last. We run a pre-flight check comparing record counts between Ziggu and the expected Twenty CRM load to catch orphaned relationships before the sample migration runs.

  3. Resolve owners and workspace members by email

    Ziggu team member and project owner email addresses are matched against Twenty CRM Workspace Members by exact email. Unmatched owners are flagged in a pre-migration report — your Twenty admin either invites the user to create a workspace member or assigns their records to a fallback owner. No record lands in Twenty CRM without a valid assignee. This step also surfaces inactive Ziggu users whose records will need reassignment.

  4. Run sample migration with field-level diff

    A representative slice migrates first — typically 200–500 records spanning Clients, Companies, Projects, Units, Tasks, and a sample Conversation thread. We generate a field-level diff between the Ziggu source values and the Twenty CRM destination fields so you can verify stage mapping, amount calculation, unit-splitting behavior, and owner resolution before the full run commits. You sign off on the sample before FlitStack proceeds to full migration.

  5. Execute full migration with delta pickup window

    Full migration runs against Twenty CRM using bulk CSV import. A delta-pickup window (typically 24–48 hours) captures any records created or modified in Ziggu during the cutover window. All operations are logged in FlitStack's audit log. If reconciliation fails — record counts don't match, required fields are blank, or association links break — one-click rollback reverts the Twenty CRM workspace to its pre-migration state. Your team keeps working in Ziggu during migration; no downtime in the source system.

Platform deep dives

Context on both ends of the pair

Ziggu logo

Ziggu

Source

Strengths

  • Per-project billing aligns cost to active workload — completed projects can be deactivated without losing history.
  • Built-in client portal with 24/7 transparency reduces the back-and-forth email volume between development teams and buyers.
  • Conversations remain writable on deactivated projects, keeping post-handover support communication open.
  • Structured approval workflows with deadline tracking help property developers collect client decisions without chasing.
  • Survey module integrates NPS and custom question collection at defined project milestones.

Weaknesses

  • No public REST API documented — integrations must rely on webhook triggers or manual export workflows.
  • Per-active-project pricing with tier minimums (10/15/25) makes the platform expensive to maintain for large legacy project portfolios.
  • Deactivated projects become read-only across tasks and files, limiting post-handover activity.
  • Partner Portal, Multi-unit Projects, Financials, Sales, and Surveys are all paid add-ons priced per active unit, layering costs quickly.
  • Flat account structure with no parent-company or multi-subsidiary hierarchy for larger property groups.
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. 1 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 Ziggu and Twenty CRM.

  • Object compatibility

    B

    1 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

    Ziggu: Not publicly published — Ziggu states limits are tuned to integration use cases and confirmed during onboarding.

  • Data volume sensitivity

    B

    Ziggu doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Ziggu 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 Ziggu to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Ziggu-to-Twenty CRM migrations complete in 48–72 hours of clock time for under 25,000 records. The longest phase is pre-migration schema design — defining Opportunity Stage values and custom fields for add-on modules takes 1–2 days of your team's time before data moves. Configurations with 100,000+ records, complex multi-unit project splitting, or multiple Ziggu add-on modules extend to 5–10 days. Timeline depends more on how quickly your team confirms the stage mapping and unit-splitting rule than on record volume.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Ziggu.
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