CRM migration
Field-level mapping, validation, and rollback between VBOUT and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
VBOUT
Source
Twenty CRM
Destination
Compatibility
10 of 12
objects map 1:1 between VBOUT and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from VBOUT to Twenty CRM is a migration from a marketing-automation-centric platform to a developer-friendly open-source CRM with a custom runtime data model. VBOUT organizes data around Contacts, Smart Audiences, Leads, and Tags with a marketing-first object hierarchy. Twenty CRM uses People, Companies, Opportunities, Tasks, and Notes as its standard objects, with runtime-extensible custom objects and fields. The core migration challenge is that VBOUT's Soft CRM features (Lead Scoring, Pipeline Stages encoded as Tags, Smart Audience segmentation rules) have no direct Twenty equivalent, so we map Tags to custom fields on People records and document the segmentation logic for manual reconstruction. VBOUT's automation workflows and dashboard reports do not migrate; we deliver a JSON artifact of workflow definitions and raw analytics data for the customer's admin to rebuild in Twenty's workflow editor and reporting layer. We handle VBOUT's 15 req/sec API rate limit through exponential backoff and batch chunking so that large contact lists move within migration timelines.
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 VBOUT 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.
VBOUT
Contact
Twenty CRM
People
1:1VBOUT Contacts map directly to Twenty People. Standard fields (name, email, phone) transfer 1:1. Custom fields on VBOUT Contacts require pre-creation in Twenty via Settings → Data Model before import because Twenty's standard People object has sparse field coverage (GitHub issue #13953 flags this as a known gap). We create every custom field in Twenty first, then map each VBOUT Contact property to the equivalent Twenty field, using Text, Number, Date, Select, or Multi-Select types based on VBOUT's field definition. VBOUT's Lead Score property migrates to a numeric custom field on People.
VBOUT
Company
Twenty CRM
Company
1:1VBOUT Companies map to Twenty Companies. Company domain, address fields, and industry map 1:1. Like People, the Companies object in Twenty has limited standard fields out of the box, so any custom fields on VBOUT Companies (division, annual revenue tier, account tier) must be pre-created in Twenty before the Company import batch runs. We resolve Company as the parent of People before Contact import so that the People-Company relationship link is satisfied at insert time.
VBOUT
Lead
Twenty CRM
People (with Lead context)
1:1VBOUT's Lead object is distinct from Contact and carries source attribution, assignment data, and lead score. We map these to Twenty People records with custom fields for lead_source__c, assigned_to__c, and lead_score__c. Note that Twenty does not yet have a native Lead object with a conversion action to custom objects (GitHub issue #10422); Leads that should become Opportunities in Twenty require manual conversion or a custom workflow rebuild.
VBOUT
Tag
Twenty CRM
Custom Field (Multi-Select or Text)
lossyVBOUT Tags encode pipeline stage, segment classification, and contact classification. We extract the full Tag taxonomy during discovery, then create equivalent custom fields in Twenty: pipeline_stage__c (Select), primary_segment__c (Select), and contact_classification__c (Multi-Select). Tags apply to People and Company records via lookup. The customer chooses whether each Tag set becomes a Select (single-value) or Multi-Select (multi-value) field during scoping.
VBOUT
Smart Audience
Twenty CRM
Custom Filter or Segment (documented only)
1:1VBOUT Smart Audiences are dynamic segmented lists based on behavioral and demographic criteria with proprietary rule definitions. The segmentation rules do not export in a portable format. We extract the raw criteria (field names, operators, values) and produce a written rebuild guide for each Smart Audience mapped to Twenty's filter and view system. The segmentation logic must be manually rebuilt in Twenty as saved views and filters; the audience members themselves are not a separate object and are covered by the underlying Contact export.
VBOUT
Pipeline Stage
Twenty CRM
Custom Field (Select) + Opportunity Stage
lossyVBOUT Pipeline Stages are stored as Tags with ordering metadata rather than as a native pipeline object. We extract the stage names and order from the Tag set, then create a pipeline_stage__c Select field on People and a stage__c Select field on Twenty Opportunities. If the customer uses VBOUT's pipeline management module (Professional tier), we map stage definitions to Twenty's Opportunity stage dropdown values via Settings → Data Model.
VBOUT
Custom Field (Contact/Lead)
Twenty CRM
Custom Field (People/Company)
1:1VBOUT custom fields on Contacts and Leads (dropdown, conditional, text, numeric, date, payment field types) map to equivalent custom fields in Twenty's Data Model. VBOUT conditional and payment field types that have no direct Twenty equivalent are mapped to Text fields with the raw value preserved; the customer reviews and reconciles these post-migration. We require all destination custom fields to be created in Twenty before the migration batch begins because Twenty's CSV import creates records, not fields.
VBOUT
Email Campaign
Twenty CRM
Note or Custom Object (documented only)
1:1VBOUT email campaign history (subject, send date, open rate, click rate) can be exported as structured records. We export campaign metadata and statistics as a CSV artifact. These do not map to a native Twenty object; we recommend creating a custom EmailCampaign object in Twenty with fields for subject, sent_date, opens, clicks, and contact_count. Email template bodies export as content artifacts but must be manually re-created in Twenty's template editor because the visual layout is not transferable.
VBOUT
Form
Twenty CRM
Custom Object (documented only)
1:1VBOUT forms (standard, multi-step, conditional, payment) export field definitions and submission records as structured data. Form field configurations migrate as a custom FormField object in Twenty. Form submission records migrate as FormSubmission records linked to the submitting Contact's People record. Payment form transaction data migrates with the submission metadata; the payment processing integration does not carry over and must be reconfigured with a Twenty-compatible payment gateway.
VBOUT
Automation Workflow
Twenty CRM
Documented artifact (manual rebuild required)
1:1VBOUT automation workflows store trigger-action sequences in a proprietary JSON schema not portable to Twenty's workflow system. We export each workflow definition as a structured JSON artifact and produce a step-by-step rebuild guide mapped to Twenty's workflow editor. The trigger conditions, delays, and actions are documented in plain English so the customer's admin can replicate the logic. This is a documentation-only deliverable; the workflows themselves must be rebuilt manually.
VBOUT
Landing Page
Twenty CRM
Documented artifact (manual rebuild required)
1:1VBOUT landing pages are stored as platform-specific page definitions with no transferable layout. We export page metadata, form field configurations, and redirect rules as a structured artifact. The visual layout, copy, and design must be rebuilt manually in Twenty's page builder or an external tool. Form field configurations carried over in the artifact reduce rebuild effort but do not eliminate it.
VBOUT
Dashboard Report
Twenty CRM
Raw data artifact (manual rebuild required)
1:1VBOUT dashboard reports are UI-native visualizations that cannot be exported. We export the underlying raw data (email open rates, click maps, form submission counts, lead activity logs) as CSV so equivalent reports can be built in Twenty's analytics layer. The dashboard configurations themselves do not transfer; the customer rebuilds them as Twenty views and saved filters post-migration.
| VBOUT | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Lead | People (with Lead context)1:1 | Fully supported | |
| Tag | Custom Field (Multi-Select or Text)lossy | Fully supported | |
| Smart Audience | Custom Filter or Segment (documented only)1:1 | Fully supported | |
| Pipeline Stage | Custom Field (Select) + Opportunity Stagelossy | Fully supported | |
| Custom Field (Contact/Lead) | Custom Field (People/Company)1:1 | Fully supported | |
| Email Campaign | Note or Custom Object (documented only)1:1 | Fully supported | |
| Form | Custom Object (documented only)1:1 | Fully supported | |
| Automation Workflow | Documented artifact (manual rebuild required)1:1 | Fully supported | |
| Landing Page | Documented artifact (manual rebuild required)1:1 | Fully supported | |
| Dashboard Report | Raw data artifact (manual rebuild required)1: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.
VBOUT gotchas
Email send volume is tier-gated, not contact-gated
Automation workflows are not cross-platform portable
API rate limit of 15 req/sec forces migration chunking
Dashboard reports are UI-native and not exportable
Calendar booking does not sync to external calendars
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 data audit
We audit the source VBOUT account across plan tier (Free/Starter/Professional/Enterprise), total Contacts and Leads, custom field definitions on both objects, Tag taxonomy (pipeline stages, segments, classifications), active automation workflows, email campaign history, form definitions and submission counts, landing page count, and dashboard report count. We pair this with Twenty destination scoping: cloud vs self-hosted deployment, user count, and which standard and custom fields need to be created in Settings → Data Model before import. The discovery output is a written migration scope document listing every VBOUT object, its record count, its mapping to Twenty, and any pre-work required on the Twenty side.
Twenty schema pre-creation
Before any data extraction from VBOUT begins, we create all required custom fields in Twenty's Data Model. This includes pipeline_stage__c (Select), primary_segment__c (Select), contact_classification__c (Multi-Select), lead_score__c (Number), lead_source__c (Text), and any VBOUT custom field equivalents. We also create the EmailCampaign and FormSubmission custom objects with their respective fields. If the customer uses VBOUT's pipeline management module, we configure the Opportunity stage dropdown values. Twenty's requirement that fields exist before import is enforced at this step; any schema gap discovered during extraction causes a pause and schema catch-up before data load resumes.
VBOUT data extraction with rate-limit handling
We extract VBOUT data in dependency order using the REST API with a 15 req/sec chunking strategy. Companies export first (if any exist), then Contacts, then Leads, then Tags applied to each record. We implement exponential backoff on HTTP 429 responses and log every retry. For large contact lists (over 30,000 records), we split extraction into queued batches with checkpoint persistence so that a partial extraction failure does not require restarting from zero. Email campaign metadata, form submissions, and form field definitions export as separate artifacts alongside the core record export.
Data transformation and field mapping
We transform the exported VBOUT data against the mapping document. Tags become custom field values (pipeline_stage__c, primary_segment__c, etc.). Lead Score becomes a numeric custom field on People. Smart Audience segmentation rules are extracted as plain-text criteria documentation. Automation workflow JSON artifacts are produced from the workflow definitions. VBOUT custom field values are mapped to their Twenty equivalents with type transformation where needed (VBOUT conditional fields become Text, VBOUT payment fields become Text with a payment_note suffix). The transformation output is a set of CSV files and JSON artifacts ready for Twenty ingestion.
Twenty ingestion via GraphQL API
We ingest data into Twenty using batched GraphQL mutations. Records are inserted in dependency order: Companies first (to satisfy the People-Company relationship), then People (with companyId resolved from the Company insert), then Opportunities (with companyId and contactId resolved). Custom object records (EmailCampaign, FormSubmission) insert last because they reference People records. Each batch emits a row-count reconciliation report. We handle duplicate detection by email address on People and by company domain on Companies, flagging duplicates for the customer's review rather than auto-skipping them.
Cutover, validation, and workflow rebuild handoff
We freeze VBOUT writes during cutover, run a final delta migration of any records created or modified during the migration window, then switch the customer to Twenty as the system of record. We deliver the automation workflow JSON artifact and rebuild guide to the customer's admin team. We deliver the raw analytics data CSV for the customer to rebuild reports in Twenty's analytics layer. We support a one-week hypercare window for reconciliation issues. We do not rebuild VBOUT workflows as Twenty workflows inside the migration scope; that is documented separately for the customer's admin to execute.
Platform deep dives
VBOUT
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 VBOUT 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
VBOUT: 15 requests per second per org; HTTP 429 on breach with exponential backoff required.
Data volume sensitivity
VBOUT 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 VBOUT to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your VBOUT 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 VBOUT
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.