CRM migration
Field-level mapping, validation, and rollback between Factoreal and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Factoreal
Source
Twenty CRM
Destination
Compatibility
6 of 12
objects map 1:1 between Factoreal and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Factoreal to Twenty CRM is a cross-model migration: Factoreal organizes customer data around marketing-centric objects (Contacts, Segments, Campaigns, Automations) with no public REST API, while Twenty CRM is a self-hosted open-source platform built around the conventional CRM object model (People, Companies, Opportunities, Tasks, Notes) with a documented GraphQL API. Because Factoreal exposes no API, we extract all data through coordinated CSV export cycles, then transform and load records into Twenty using its GraphQL mutations. We preserve contact behavioral data and campaign attribution, reconstruct segment membership as saved filter views in Twenty, and document automation workflows as written specifications for manual rebuild. We do not migrate automations as executable rules, nor do we transfer website visitor session data or Factoreal's native reporting artifacts, as these are not exportable in structured form.
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 Factoreal 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.
Factoreal
Contact
Twenty CRM
Person
1:1Factoreal Contact records map to Twenty CRM Person objects. We extract contact profiles from CSV including name, email, phone, and custom fields, then transform them to Twenty's Person GraphQL mutation format. Factoreal's source attribution fields (how the contact entered the system) migrate as text fields on the Person record. Any duplicate detection runs against email as the canonical dedupe key before insert.
Factoreal
Contact Custom Fields
Twenty CRM
Person (custom fields)
lossyFactoreal custom fields on Contact records map to identically named custom fields on Twenty CRM's Person object. We identify all custom field definitions during discovery, export their per-record values from the CSV, and create matching custom fields in Twenty's Settings → Data Model before import. Field type mapping (text to text, number to number, date to date) is validated against the CSV header values to catch formatting mismatches early.
Factoreal
Segment
Twenty CRM
View (saved filter)
lossyFactoreal Segments are defined by filter rules on contact attributes and behavioral events. We extract segment membership logic as written filter criteria during the discovery phase, then create equivalent saved Views in Twenty CRM. Each View is named to match the original segment and scoped to the Person object with matching filter conditions. Segment membership (which contacts belong to which segment) is preserved by assigning a multi-select picklist or tag-style field to each Person rather than as a native segmented list object.
Factoreal
Tag
Twenty CRM
Tag
1:1Factoreal tags on contacts migrate to Twenty CRM tags on the Person record. We export the full tag list per contact from CSV and create matching tags in Twenty, preserving the many-to-many relationship across both systems. Tag names are normalized (lowercase, stripped of special characters) to ensure consistent matching.
Factoreal
Company
Twenty CRM
Company
1:1Factoreal company data (if stored as a related record rather than fields on Contact) maps to Twenty CRM Company. We extract company name, domain, address, and industry from the CSV export and create Company records before any Person records that reference them, satisfying the lookup dependency at migration time.
Factoreal
Campaign
Twenty CRM
Opportunity
1:manyFactoreal Campaign records hold subject, content, send history, and engagement metrics. The campaign structure maps partially to Twenty CRM's Opportunity model for pipeline tracking, but Factoreal's campaign engagement data (open rates, click rates, send timestamps) does not have a direct Twenty CRM equivalent. We preserve open and click metrics as custom number fields on the Opportunity record, and campaign send history as Activity notes for attribution purposes.
Factoreal
Campaign Send History
Twenty CRM
Activity / Task
1:1Individual campaign send events map to Twenty CRM Activity or Task records linked to the relevant Person. We preserve send timestamp, direction (outbound), and content reference. Inbound replies and bounces map to inbound Activity records with a type discriminator field.
Factoreal
SMS / WhatsApp Message History
Twenty CRM
Activity / Task
1:1Factoreal SMS and WhatsApp message logs export as part of campaign and contact data. We preserve send timestamp, direction, and message content as Activity records in Twenty CRM's timeline, using a type discriminator (SMS or WhatsApp) on the Activity record. The Person lookup ties each message to the correct contact record.
Factoreal
Automation Workflow
Twenty CRM
Documentation (no code migration)
lossyFactoreal automation workflows define trigger conditions and multi-step action sequences across channels. These are not stored in a portable exportable format. We document the full workflow graph — triggers, conditions, delays, and action steps — as a written specification that the customer's admin uses to manually configure equivalent logic in Twenty CRM or an external automation tool. This is scoped as a parallel workstream outside the data migration.
Factoreal
Email Template
Twenty CRM
Note / Attachment (no code migration)
lossyFactoreal email templates include HTML content and dynamic merge field placeholders. We extract template HTML from the CSV or application export, convert merge field syntax to a generic placeholder format, and store the result as a Note attached to a dedicated Template reference record in Twenty CRM. Visual rendering and dynamic personalization logic do not migrate as executable template code.
Factoreal
E-commerce Data (Orders, Products)
Twenty CRM
Custom Objects
1:manyFactoreal's built-in e-commerce integration captures order and product data. These map to Twenty CRM as custom objects (e.g., Product and Order) that we design and create in the destination schema before migration. Order records reference the Person (customer) and include line item data, transaction amounts, and dates. Product records include SKU and description. This mapping requires custom field schema creation in Twenty's Data Model during the schema design phase.
Factoreal
Owner
Twenty CRM
WorkspaceMember
1:1Factoreal users and owners referenced on contacts, campaigns, and automations map to Twenty CRM WorkspaceMembers. We extract owner email addresses from the CSV and match them against Twenty workspace members. Any owner without a matching workspace member is held in a reconciliation queue for the customer's admin to provision before Person record import resumes.
| Factoreal | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Contact Custom Fields | Person (custom fields)lossy | Fully supported | |
| Segment | View (saved filter)lossy | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Campaign | Opportunity1:many | Fully supported | |
| Campaign Send History | Activity / Task1:1 | Fully supported | |
| SMS / WhatsApp Message History | Activity / Task1:1 | Mapping required | |
| Automation Workflow | Documentation (no code migration)lossy | Fully supported | |
| Email Template | Note / Attachment (no code migration)lossy | Fully supported | |
| E-commerce Data (Orders, Products) | Custom Objects1:many | Mapping required | |
| Owner | WorkspaceMember1: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.
Factoreal gotchas
No public REST API for automated migration
Website visitor session data is not exportable
Contact migration required hands-on support in practice
Automation workflows do not migrate as executable rules
Limited third-party integration ecosystem
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and export coordination
We audit the Factoreal account to identify all contact fields (standard and custom), segment definitions, campaign records, automation workflows, email templates, and any e-commerce order and product data. Because Factoreal has no API, we coordinate with the customer to request full CSV exports from the application UI early in the project. We review the CSV headers against the field inventory to validate completeness before transformation begins. We also confirm the Twenty CRM deployment type (self-hosted or cloud-hosted) and obtain GraphQL API credentials for the target instance.
Schema design in Twenty CRM
We design the destination schema in Twenty CRM, which means creating custom fields on Person and Company objects for any Factoreal contact attributes that do not map to standard Twenty fields, and designing custom objects for order and product data if e-commerce history is in scope. We create saved Views in Twenty that correspond to each Factoreal segment definition. All schema changes are deployed into the Twenty instance before any data import to avoid import failures due to missing field definitions.
CSV preprocessing and transformation
We run a preprocessing step on each Factoreal CSV export batch: deduplication by email address, null and blank field handling, character encoding normalization (UTF-8), date format standardization, and phone number format normalization. Any missing required fields are flagged for customer review rather than filled silently. The transformation step maps Factoreal field names and values to Twenty CRM GraphQL input types and creates the JSON payload for the import script.
Staging migration and reconciliation
We run a full migration into the Twenty CRM staging environment using production-like data volume. The customer's team reconciles record counts (Persons in, Companies in, Activities in), spot-checks 20-30 random records against the source Factoreal export, and validates that segment Views correctly filter the expected contacts. Any field mapping corrections or schema adjustments are made in this phase before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: WorkspaceMembers (resolved by email match), Companies (if present in source), Persons (with custom field values populated), Activities (Tasks, Events linked to Person records), Custom Objects (Orders, Products), and saved Views (segment reconstructions). Each phase emits a row-count reconciliation report before the next phase begins. The Factoreal account is placed in read-only mode during the final delta migration window to capture any records modified after the initial export.
Cutover, validation, and automation documentation delivery
We enable Twenty CRM as the system of record after the final delta migration is complete and reconciled. We deliver the automation workflow documentation — a written specification of every Factoreal automation with its trigger, conditions, delays, and action steps — to the customer's admin team. We do not rebuild Factoreal automations as code inside the migration scope. We support a five-day hypercare window where we resolve reconciliation issues and answer data questions raised during user adoption.
Platform deep dives
Factoreal
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Factoreal and Twenty CRM.
Object compatibility
3 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
Factoreal: Not publicly documented.
Data volume sensitivity
Factoreal 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 Factoreal to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Factoreal to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Factoreal
Other ways to arrive at Twenty CRM
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.