CRM migration
Field-level mapping, validation, and rollback between Formitize and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Formitize
Source
Twenty CRM
Destination
Compatibility
10 of 10
objects map 1:1 between Formitize and Twenty CRM.
Complexity
BStandard
Timeline
24–72 hours
Overview
Formitize is a modular field-service and paperless-business platform built around forms, jobs, documents, and a lightweight CRM. Teams move from Formitize to Twenty CRM when they want a purpose-built CRM with open-source licensing, full data ownership, and a cleaner per-seat pricing model. The data models diverge structurally: Formitize separates Clients and Contacts as distinct API entities with a one-to-many relationship from the client side, while Twenty uses a unified People object with a companyId relation to Companies. FlitStack AI extracts Formitize data via the Formitize REST API — including custom fields on Clients, Contacts, Jobs, and Assets — and maps each entity into Twenty's standard objects or custom objects where no equivalent exists. We handle the required import-order constraint (Companies load before People, People before Opportunities) and preserve Formitize owner references by matching them to Twenty Workspace Members by email. Workflows, automations, and job-based sequences are disclosed as non-migratable — we export Formitize workflow definitions as a rebuild reference for your Twenty admin.
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 Formitize 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.
Formitize
Client
Twenty CRM
Company
1:1Formitize Client maps directly to Twenty Company. Formitize Client name maps to Twenty Company.name, and the Client domain maps to Company.website. The Client's full address fields map to the Twenty Company address composite. Custom fields on the Client record map to Twenty Company custom fields.
Formitize
Contact
Twenty CRM
Person
1:1Formitize Contact maps to Twenty Person. Each Formitize Contact belongs to one Client via clientId, which maps to the Twenty Person.companyId relation. Formitize stores contact type or role as a custom field — we preserve it as a custom field on the Twenty Person record for reference. Formitize contacts without a Client are flagged for manual assignment to a Twenty Company.
Formitize
Job
Twenty CRM
Opportunity
1:1Formitize Job maps to Twenty Opportunity. The Job name becomes Opportunity.name, the Job description becomes Opportunity.body, and Job status maps to a custom Opportunity.stage select field. The Job's linked Client becomes the Opportunity.companyId link. Job custom fields are mapped to Twenty Opportunity custom fields.
Formitize
Job Status
Twenty CRM
Custom Opportunity Field
1:1Formitize Job Status values (e.g., Scheduled, In Progress, Completed, Cancelled) have no native equivalent in Twenty's Opportunity object. We create a custom select field (Job_Status__c) on Twenty Opportunities and map the Formitize status values one-to-one into the custom field options. This preserves your operational workflow state within Twenty's CRM without requiring manual re-entry.
Formitize
Asset
Twenty CRM
Custom Object (Asset)
1:1Formitize Assets belong to Asset Types and carry custom column data per type. Since Twenty has no native Asset object, we create a custom object named Asset and map asset name, description, asset type, and client link (via companyId relation) into the custom object. Custom columns from Formitize become custom fields on the Twenty Asset object.
Formitize
Asset Location
Twenty CRM
Custom Object (Asset) custom fields
1:1Formitize stores asset latitude/longitude and zone data for physical locations. We create custom fields Latitude__c, Longitude__c, and Location_Zone__c on the Twenty Asset custom object to preserve this geographic context. If Formitize Location Zones are used, those are stored as a text custom field.
Formitize
Formitize User / Owner
Twenty CRM
WorkspaceMember
1:1Formitize owner references on Jobs and Contacts are resolved by matching the owner's email address against Twenty Workspace Members. If a Formitize user has no matching email in Twenty, we flag the record and assign it to a fallback Workspace Member designated by your admin before migration.
Formitize
Formitize Custom Fields
Twenty CRM
Custom Fields on Target Object
1:1Formitize custom fields on Clients, Contacts, and Jobs are defined in Settings and exposed via the API. Each custom field type (text, number, date, select) maps to the equivalent Twenty field type. We create the custom fields in Twenty under Settings → Data Model before the import runs so the CSV columns resolve correctly.
Formitize
Document / Attachment
Twenty CRM
Attachment / Note on Related Record
1:1Formitize document attachments linked to Jobs are preserved as Attachments on the corresponding Twenty Opportunity record. We re-upload files to Twenty's attachment storage. If a Document has no linked Job, we attach it to the related Company or Person record based on the document's context in Formitize.
Formitize
Workflow / Automation
Twenty CRM
Not Migrated
1:1Formitize Smart Assist automations and Workflows (Auto Follow Up, Auto Task Actions, Auto Invoice) are not migratable to Twenty. Twenty uses a different event-action workflow model with limited sequencing. We export the Formitize workflow definitions as a JSON reference document so your Twenty admin can rebuild the logic in Twenty's workflow builder.
| Formitize | Twenty CRM | Compatibility | |
|---|---|---|---|
| Client | Company1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Job | Opportunity1:1 | Fully supported | |
| Job Status | Custom Opportunity Field1:1 | Fully supported | |
| Asset | Custom Object (Asset)1:1 | Fully supported | |
| Asset Location | Custom Object (Asset) custom fields1:1 | Fully supported | |
| Formitize User / Owner | WorkspaceMember1:1 | Fully supported | |
| Formitize Custom Fields | Custom Fields on Target Object1:1 | Fully supported | |
| Document / Attachment | Attachment / Note on Related Record1:1 | Fully supported | |
| Workflow / Automation | Not Migrated1: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.
Formitize gotchas
Limited bulk export mechanism complicates migration scoping
Custom field schemas are per-account, not organizational templates
Workflow definitions do not transfer between platforms
Asset zone and GPS data requires explicit extraction
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
Audit Formitize data and create Twenty field schema
FlitStack connects to Formitize via API to enumerate all Clients, Contacts, Jobs, Assets, Custom Fields, and Document links. We generate a Twenty field creation checklist: every standard field missing from Twenty (phone on Person, industry on Company, etc.) and every custom field to create in Settings → Data Model. Your Twenty admin creates these fields before we proceed so the import has nowhere to drop data.
Resolve owners and invite Workspace Members
Formitize owner references are resolved by email match against Twenty Workspace Members. We cross-reference each Formitize user ID with existing Twenty workspace members, and any user without a matching email is flagged immediately. Your admin then decides whether to invite that person to join the Twenty workspace or assign a designated fallback owner for their records. This verification step ensures every migrated record lands with a valid Twenty assignee rather than an unowned state.
Export and map Formitize data via API
We pull Formitize data in dependency order: Companies first (exported as Formitize Clients), then People (Contacts) with companyId references resolved to the migrated Company UUIDs, then Opportunities (Jobs) with companyId and personId links, then Custom Objects (Assets) with companyId relations, and finally Attachments linked to the target record. Custom fields on each object are included in the export and mapped to the corresponding Twenty custom field definitions.
Run sample migration with field-level diff
A representative slice of 100–500 records spanning all major entity types — Clients, Contacts, Jobs, and Assets — migrates first as a validation step. We generate a detailed field-level diff that compares source values from Formitize directly against the resulting Twenty record, highlighting any discrepancies in custom field mapping, companyId resolution accuracy, owner assignment correctness, and status-to-custom-select field transformations. This allows you to verify the migration logic works as intended before committing to the full dataset.
Execute full migration with delta-pickup window
The full migration loads into Twenty using the validated mapping logic. A delta-pickup window of 24 to 48 hours runs after the bulk load to capture any new or modified Formitize records created during the cutover period. All migration operations are recorded in a comprehensive audit trail, and the one-click rollback feature can instantly revert the Twenty workspace to its pre-migration state if data integrity issues are discovered during reconciliation, providing a safety net to address problems without disrupting your production environment.
Platform deep dives
Formitize
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Formitize and Twenty CRM.
Object compatibility
2 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
Formitize: Not publicly documented.
Data volume sensitivity
Formitize 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 Formitize to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Formitize 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 Formitize
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.