CRM migration

Migrate from Selligent by Marigold to Twenty CRM

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

Selligent by Marigold logo

Selligent by Marigold

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

objects map 1:1 between Selligent by Marigold and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Selligent by Marigold to Twenty CRM is a platform-type migration: Selligent is a B2C omnichannel marketing automation platform built around Universal Consumer Profiles, Dynamic Segments, and Journey Orchestration; Twenty CRM is a modern open-source CRM built around Person, Company, and Opportunity records with a custom-object metadata layer. Selligent's Individual API exposes contact records and custom profile properties; we map these to Twenty Person records, resolve organization data into Company lookups, and import Action List records into custom objects or Opportunity structures depending on the customer's use case. Selligent Journeys, Journey Programs, and campaign content do not migrate via API and require manual rebuild at the destination. Selligent's non-cancelable contract terms mean customers mid-term pay for both platforms; we flag this during scoping and recommend migration timing aligned with renewal windows where possible.

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

Selligent by Marigold logo

Selligent by Marigold

What's pushing teams away

  • Enterprise pricing with non-refundable, non-cancelable contract terms creates sticker shock when teams need to downsize or pivot to a lower-cost platform.
  • Recent acquisition by Zeta Global in 2025 introduces uncertainty about product roadmap, support continuity, and long-term pricing for existing customers.
  • Platform complexity requires significant onboarding investment; smaller marketing teams report difficulty achieving full utilization without dedicated technical support.
  • Journey and campaign configuration is deep but not easily transferable, making migrations feel like rewrites rather than data moves and increasing switching costs.
  • API documentation and partner ecosystem are less extensive than dominant US-based platforms, leading to frustration when custom integrations are needed.

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 Selligent by Marigold objects map to Twenty CRM

Each row shows how a Selligent by Marigold 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.

Selligent by Marigold

Individual (Contact)

maps to

Twenty CRM

Person

1:1
Fully supported

Selligent Individual records map directly to Twenty Person records. The USERID becomes the source_system_id stored on the Person for audit. Standard profile fields (email, first name, last name, phone) map to Twenty's emailAddress, displayName, and phoneNumber fields. Custom profile properties migrate as Twenty custom fields on Person, which must be pre-created via the Twenty /metadata API before the Person import runs. All timestamp fields (createdAt, updatedAt) preserve the original Selligent values.

Selligent by Marigold

Organization

maps to

Twenty CRM

Company

1:1
Fully supported

Selligent organizations are often stored as custom properties on Individual records or as relation tags rather than as a native parent object. We extract all distinct organization values referenced across the Individual corpus, deduplicate them, and create Twenty Company records before the Person import. Each Person record then receives a companyId lookup to the resolved Company. Organizations without a clear name default to the domain extracted from the Individual's email address.

Selligent by Marigold

Action List

maps to

Twenty CRM

Custom Object or Opportunity

1:many
Fully supported

Selligent Action Lists contain LISTID-keyed records with USERID and ACTIONCODE plus custom fields. We assess whether each Action List represents a sales pipeline stage (migrating to Twenty Opportunity) or a membership list (migrating to a custom object). Action Lists with numeric amount fields and stage-like ACTIONCODE values map to Opportunity records; lists used for campaign audience segmentation map to a custom object named after the Action List with all custom fields preserved.

Selligent by Marigold

Dynamic Segment

maps to

Twenty CRM

Workspace Tags or Manual Rebuild

lossy
Fully supported

Selligent Dynamic Segments are defined by behavioral and demographic rules that are not API-exportable. We export the member contact list for each segment (the resulting Individuals), write them to Twenty as Person records with a segment-derived tag field, and document the original segment criteria for the customer's admin to rebuild using Twenty's filter and view system. Segment definitions themselves require manual recreation.

Selligent by Marigold

Custom Fields (Profile Properties)

maps to

Twenty CRM

Custom Fields on Person

lossy
Fully supported

Selligent accepts custom field names as key-value properties at write time without requiring upfront schema registration. Twenty requires custom fields to be pre-created via the /metadata API before data can be written. We extract the full FieldsDefinition array from the customer's Selligent environment during scoping, generate the corresponding Twenty metadata API calls to create each custom field with the correct type (text, number, date, select, multiselect), and sequence Person record imports after field registration completes.

Selligent by Marigold

Tags

maps to

Twenty CRM

Tags on Person

1:1
Fully supported

Selligent tags drive personalization and segmentation. We export tag assignments per Individual and write them as tag strings on the Person record in Twenty. Tags that represent behavioral classifications (e.g., purchased, churned, VIP) are written to a dedicated custom field of type multiselect; tags that represent source attribution are written to a source field.

Selligent by Marigold

Engagement: Campaign History

maps to

Twenty CRM

Task and Note on Person

1:1
Fully supported

Selligent campaign send history (subject, send date, audience size, open/click engagement) is available via API. We export contact-level engagement metrics and write them as Task records attached to the Person, with the campaign name as the Task subject and engagement metrics stored in custom fields. This preserves the marketing interaction timeline for teams that want historical context at the contact level.

Selligent by Marigold

Journey and Journey Program

maps to

Twenty CRM

Manual Rebuild Required

1:1
Fully supported

Selligent Journey definitions are not exposed via the public REST or SOAP API. Automated journey logic, branching rules, trigger conditions, and message content must be manually rebuilt at the destination. We document the structure of each active Journey during scoping (channel, entry trigger, branches, exit conditions) in a written handoff document that the customer's team uses to recreate logic in Twenty's workflow system.

Selligent by Marigold

User (Team Member)

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Selligent user accounts and role assignments are organizational settings that migrate as configuration data. We export user email addresses and role names where accessible and map them to Twenty WorkspaceMember invitations. The customer's admin provisions the actual users in Twenty and accepts the invitations before Person records with owner assignments are imported.

Selligent by Marigold

Custom Object

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Selligent supports arbitrary custom fields on Individuals and Action Lists. Twenty provides a custom object system built on metadata tables (DataSource, Object, Field) that are queried via the /metadata GraphQL endpoint. We map Selligent custom data structures to Twenty custom objects, pre-creating the schema via metadata API calls before importing any records. Lookup relationships between custom objects require parent records to be created first.

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.

Selligent by Marigold logo

Selligent by Marigold gotchas

Medium

API rate limits are documented but not fully quantified publicly

High

Enterprise contracts are non-cancelable with no refunds mid-term

High

Journeys and campaign templates are not API-exportable

Medium

SDC bulk message limit of 100 per request caps throughput

Medium

Custom field schema must be pre-created at destination before import

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

  • Twenty's standard Person and Company fields are incomplete by industry standards

    A documented GitHub issue (#13953) in the Twenty repository identifies that the Person and Company standard objects lack fields that users expect from established CRMs, including multi-email and multi-phone support, jobTitle, department, industry on Company, and contactType. Teams migrating from Selligent with rich contact profiles will encounter fields that do not map to a native Twenty field and must be created as custom fields before import. We extract the full Selligent FieldsDefinition during scoping, create all needed custom fields via the metadata API, and flag any fields that cannot map directly to Twenty's current schema for the customer to review.

  • Selligent Individual API batch ceiling of 100 records per request

    The Selligent SDC API caps bulk message operations at 100 records per request with a 4MB JSON body maximum. For migrations involving tens of thousands of Individual records, this requires hundreds of sequential API calls. We handle this with a queuing pipeline that batches Selligent Individual exports into chunks of 80 records (accounting for field overhead), parallelizes requests across multiple authenticated sessions, and applies exponential backoff on 429 responses. This adds sequencing time that affects timeline estimates for large record sets.

  • Custom fields must be pre-created in Twenty before any data import

    Unlike Selligent, which accepts arbitrary key-value profile properties at write time without schema registration, Twenty requires custom fields to be defined via the /metadata API before data can be written to them. We generate and execute all metadata field creation API calls before beginning any Person or Company record import. Skipping this step results in silent field drops on import. The sequence is: extract Selligent FieldsDefinition, generate Twenty metadata calls, deploy schema, validate schema via read-back, then begin record import.

  • Organization-to-Company lookup resolution requires a dedupe pass

    Selligent stores organizations as custom properties on Individual records rather than as a native parent object. When extracting organization data for Twenty Company creation, we encounter multiple references to the same organization under slightly different name variants (e.g., 'Acme Corp', 'Acme Corporation', 'ACME'). We run a dedupe pass using fuzzy matching on organization name and domain extraction from associated Individual email addresses before creating Company records, then resolve the companyId lookup on each Person import. This pass adds scope to the data-cleaning phase.

  • Selligent Journeys, campaigns, and content are not API-exportable

    Selligent does not expose journey definitions, campaign content templates, or journey branching logic via its public REST or SOAP API. We migrate contact records, engagement history, and tag associations, but all automated journey logic, message content, and journey triggers must be manually rebuilt in Twenty's workflow system or documented for a separate rebuild engagement. We deliver a written journey inventory describing each active Selligent Journey's entry trigger, channel steps, branching conditions, and exit criteria to guide the rebuild.

Migration approach

Six steps for a successful Selligent by Marigold to Twenty CRM data migration

  1. Discovery and contract timing assessment

    We audit the customer's Selligent environment across Individual record count, Action List count, custom field definitions, active Journey count, and engagement volume. We pair this with a Twenty self-hosted versus cloud deployment decision and assess the customer's Selligent contract term. If the customer is mid-contract, we advise aligning the migration window with the renewal date to avoid paying for both platforms simultaneously. The discovery output is a written scope, a data-cleaning recommendation, and a contract-timing memo.

  2. Twenty schema deployment via metadata API

    We deploy the destination schema in Twenty before any data moves. This includes creating all custom fields on Person and Company (matching Selligent's FieldsDefinition), creating any custom objects for Action List migrations, and configuring field types, select options, and required constraints. Schema deployment runs via the Twenty /metadata API against a staging workspace first. We validate the schema by querying each created field before proceeding.

  3. Organization dedupe and Company pre-creation

    We extract all distinct organization values from Selligent Individual custom properties, run a fuzzy dedupe pass to merge name variants, and create the resulting Company records in Twenty before any Person import. This ensures that companyId lookup resolution is satisfied at the moment of Person insert. We store the Selligent organization name and the resolved Twenty Company ID in a cross-reference table for audit.

  4. Individual export with chunked API sequencing

    We export Selligent Individual records in batches of 80 records using the Individual API with exponential backoff on 429 responses. Each batch is validated for field completeness before being staged for Twenty import. We export custom profile properties, tag assignments, and timestamp fields alongside standard fields. The Individual USERID is preserved as source_system_id on each record for reconciliation.

  5. Person import with companyId lookup resolution

    We import Person records in dependency order using the Twenty REST API, resolving each Person's companyId lookup from the Company cross-reference table. Owner assignments map Selligent user references to Twenty WorkspaceMember records that have been provisioned by the customer's admin. Custom fields are written in the same API call as standard fields. Each import batch emits a row-count reconciliation report.

  6. Action List and engagement history import

    We assess each Selligent Action List to determine whether it represents a pipeline stage or a membership list, then import to Twenty Opportunity or a custom object accordingly. Campaign engagement history migrates as Task records attached to the relevant Person. We deliver a written journey inventory document describing each Selligent Journey's logic for the customer's admin to rebuild in Twenty's workflow system.

  7. Cutover, delta sync, and Journey rebuild handoff

    We freeze Selligent writes during cutover, run a final delta migration of any records modified during the migration window, then mark Twenty as the system of record. We deliver the complete field-mapping document, the journey inventory, and the Action List reconstruction guide to the customer's admin. We support a one-week hypercare window for reconciliation issues. Workflow rebuild in Twenty is outside standard scope and is handed off as a documented task list.

Platform deep dives

Context on both ends of the pair

Selligent by Marigold logo

Selligent by Marigold

Source

Strengths

  • Email deliverability rates consistently praised in user reviews across retail and media verticals.
  • Native support for GDPR, CCPA, and CAN-SPAM compliance with documented sub-processor list.
  • Flexible custom field and data modeling accommodates complex B2C schemas without schema locks.
  • Multichannel journey orchestration across email, SMS, push, and web personalization in one platform.
  • AI-powered audience selection and send-time optimization built into the core platform.

Weaknesses

  • Public API documentation lacks comprehensive rate-limit tables and bulk export endpoints.
  • Journey builder configurations are not exportable via API, making migrations require full manual rebuilds.
  • Non-refundable contract terms mean customers pay for the full order term regardless of early termination.
  • Platform complexity creates a steep learning curve compared to simpler email-focused tools.
  • Ownership transition to Zeta Global introduces uncertainty for existing Marigold/Selligent customers.
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 Selligent by Marigold 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

    Selligent by Marigold: Not publicly quantified; connector documentation shows batched behavior at 2500 requests or 10-minute windows.

  • Data volume sensitivity

    A

    Selligent by Marigold exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Selligent by Marigold 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 Selligent by Marigold to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 15,000 Individual records with no custom objects or complex Action Lists. Migrations with multiple Action Lists, custom field schemas exceeding 20 fields, large engagement histories, or extensive organization name deduplication move to seven to twelve weeks because of metadata API sequencing, Company pre-creation, and data cleaning scope. The customer's contract timing affects total duration if a mid-contract migration requires parallel platform operation.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Selligent by Marigold.
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