CRM migration

Migrate from Voopty Inc. to Twenty CRM

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

Voopty Inc. logo

Voopty Inc.

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

80%

8 of 10

objects map 1:1 between Voopty Inc. and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Migrating from Voopty Inc. to Twenty CRM is a cross-category move from a niche school-management platform to a general-purpose open-source CRM. Voopty organizes data around Students, Courses, Scheduled Sessions, and Attendance; Twenty uses People, Companies, Opportunities, Tasks, and Custom Objects. The structural difference means there is no direct object-by-object equivalence — Courses map to Custom Objects, Students and Clients map to People records, and attendance and scheduling history requires a custom object schema built in Twenty before migration. Voopty has no documented public API, so data extraction requires either CSV exports from the platform UI or coordination with Voopty support. We do not migrate Workflows, automations, or Telegram/email campaign configurations; we deliver a written inventory of these for the customer's admin to rebuild in Twenty's settings. The self-hosted and open-source nature of Twenty eliminates per-seat licensing costs indefinitely, which is the primary financial driver for this switch.

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

Voopty Inc. logo

Voopty Inc.

What's pushing teams away

  • Voopty has limited public documentation, marketing footprint, and review presence — buyers concerned about vendor stability often migrate to better-known platforms such as Teachworks, Opus1, or Omnify.
  • No published API or developer documentation, blocking integration with payroll, accounting, or marketing automation tools that growing schools eventually need.
  • Feature surface is narrower than horizontal SMB CRMs — once a school needs deeper marketing automation, certification tracking, or multi-location reporting, Voopty becomes the limiting factor.
  • English-language product information is sparse and pricing is not publicly listed, raising procurement friction for evaluators outside the vendor's core market.
  • Reporting and analytics depth is limited; growing chains needing cross-location operational dashboards typically move to platforms with built-in BI.

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 Voopty Inc. objects map to Twenty CRM

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

Voopty Inc.

Student

maps to

Twenty CRM

Person (custom Student fields)

1:1
Fully supported

Voopty Student records map to Twenty Person records with custom fields added via Settings > Data Model before import. Required custom fields include student_id (external reference), enrolled_courses (multi-select or related Custom Object link), attendance_rate (calculated percentage), and enrollment_status (active/inactive/enrolled). Voopty contact details (email, phone, address) map directly to the standard Person fields. We set Person type = Person since Twenty does not support a separate Student object natively.

Voopty Inc.

Client

maps to

Twenty CRM

Person

1:many
Fully supported

Voopty Client records (adult learners and parents who book services) map to Twenty Person records. Where a single Voopty Client account spans multiple Student records (parent-child relationships), we create Person records for each parent account and link them via a custom person_relationship__c field or topic tagging. Active-client status derived from Voopty's one-lesson-per-month threshold is preserved in a custom field original_active_status__c for future reconciliation.

Voopty Inc.

Teacher / Staff

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Voopty Staff records with teacher and administrator roles map to Twenty WorkspaceMembers. Role assignments (teacher, admin) migrate as custom fields on the WorkspaceMember record. Voopty staff contact details map to the WorkspaceMember profile fields. We extract staff records before student records so that Teacher lookups on Scheduled Sessions and Attendance records are resolvable at migration time.

Voopty Inc.

Course

maps to

Twenty CRM

Custom Object: Course

1:1
Fully supported

Voopty Course records (group classes and individual lesson configurations) map to a Twenty Custom Object named Course, created via the /metadata API before migration. Custom fields include course_type (group/individual), max_students (integer), duration_minutes (integer), and pricing_tier (text or picklist). Course definitions are migrated before Student enrollment records so that the lookup relationship resolves at import time.

Voopty Inc.

Student Enrollment

maps to

Twenty CRM

Custom Object: CourseEnrollment

lossy
Fully supported

Voopty's student-course relationship (which students are enrolled in which courses) does not map to a native Twenty object. We create a CourseEnrollment Custom Object with fields student_id (lookup to Person), course_id (lookup to Course), enrollment_date, and status. This is the highest-risk relationship in the migration because it requires both the Student and Course records to exist and resolved before the enrollment import. We sequence CourseEnrollment last among core records.

Voopty Inc.

Scheduled Session

maps to

Twenty CRM

Custom Object: ScheduledSession

1:1
Fully supported

Voopty Scheduled Sessions (both static fixed schedules and dynamic scheduling) map to a Twenty Custom Object named ScheduledSession. Fields include session_date (date), start_time and end_time, teacher_id (lookup to WorkspaceMember), course_id (lookup to Course), and session_type (static/dynamic). Recurrence rules from dynamic schedules are preserved as a custom recurrence_json__c text field. We convert static schedules to individual session records at migration time.

Voopty Inc.

Attendance Record

maps to

Twenty CRM

Custom Object: AttendanceRecord

1:1
Fully supported

Voopty attendance tracking per session per student maps to a Twenty Custom Object named AttendanceRecord. Fields include student_id (lookup to Person), session_id (lookup to ScheduledSession), attendance_status (present/absent/excused), and notes. Status values require value-mapping since Voopty's attendance vocabulary may differ from the destination's conventions. We flag any attendance records with missing session references for manual resolution.

Voopty Inc.

Subscription

maps to

Twenty CRM

Custom Object: Subscription

1:1
Fully supported

Voopty Subscription plans tied to students or clients map to a Twenty Custom Object named Subscription. Fields include subscriber_id (lookup to Person), plan_name, billing_cycle (monthly/quarterly/annual), amount, currency, start_date, and status. Billing cycle and pricing are stored as text and numeric fields rather than a native billing object since Twenty lacks a built-in subscription management module. We flag any subscription records referencing inactive Voopty clients for status reconciliation.

Voopty Inc.

Payment

maps to

Twenty CRM

Custom Object: Payment

1:1
Fully supported

Voopty payment records tied to WayForPay, LiqPay, and Stripe integrations map to a Twenty Custom Object named Payment. Fields include payment_id (original transaction reference), subscriber_id (lookup to Person), amount, currency, payment_date, payment_provider (WayForPay/LiqPay/Stripe/other), and status (paid/pending/refunded). Provider references and transaction IDs preserve as text for audit purposes. Payment records are migrated after Subscription records so that the subscription_id lookup resolves correctly.

Voopty Inc.

Note (platform-level communications)

maps to

Twenty CRM

Note

1:1
Fully supported

Voopty notes and session-level observations stored as text records map to Twenty Note objects linked via ContentDocumentLink to the parent Person or Custom Object record. We preserve note body as rich text and set the note creation date from the original Voopty timestamp. Notes are migrated after all parent records are in place.

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.

Voopty Inc. logo

Voopty Inc. gotchas

High

No documented public API for data export

Medium

Active client definition affects subscription mapping

Low

Static scheduling exports require format conversion

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

  • Voopty has no documented public API for data extraction

    Our research found no publicly available API documentation, developer portal, or export endpoints for Voopty. Migration requires either manual CSV exports from the platform UI or coordination with Voopty support to extract data in structured form. We request explicit data access from Voopty during scoping, validate all exported records for completeness and format before field-mapping begins, and flag any records that cannot be extracted in structured format. This step is the primary timeline risk for this migration pair.

  • Twenty CRM requires custom fields to be created before CSV import

    Twenty's CSV import creates records but does not create fields. Per Twenty's documentation, all custom fields must exist in Settings > Data Model before import begins. For this migration, this means the Student, Course, CourseEnrollment, ScheduledSession, AttendanceRecord, Subscription, and Payment Custom Objects must be fully schema-designed and deployed before any Voopty data is loaded. We build the complete destination schema in a staging workspace first and validate all field types and lookups before production migration.

  • Twenty CRM standard Person and Company objects have limited out-of-the-box fields

    GitHub Issue #13953 documents that Twenty's standard People and Companies objects lack industry-standard fields (multiple emails, multiple phones, social profiles, job title, department). Institutions migrating from Voopty where Student and Client records carry structured contact detail will need to create custom fields for any contact sub-types not covered by the base schema. We scope this custom field creation as part of the pre-migration schema design phase.

  • Scheduled session recurrence rules require custom handling

    Voopty supports both static fixed schedules and dynamic scheduling. Static schedules convert cleanly to individual ScheduledSession records. Dynamic schedules with recurrence rules (every Monday at 10am for 12 weeks) are converted to individual session instances at migration time to avoid a separate recurrence-engine dependency in Twenty. The original recurrence pattern is preserved as a JSON field on the first generated session record for reference.

Migration approach

Six steps for a successful Voopty Inc. to Twenty CRM data migration

  1. Data extraction scoping and Voopty access coordination

    We audit the Voopty portal for available export formats, record counts per object (Students, Clients, Teachers, Courses, Scheduled Sessions, Attendance, Subscriptions, Payments), and any custom fields or configurations. Because Voopty has no documented public API, we coordinate with Voopty support or guide the customer through CSV export from the platform UI. We validate export completeness against in-system record counts before accepting the export as our migration source. Any objects that cannot be exported in structured form are flagged and scoped as a manual-rebuild item.

  2. Destination schema design and custom object creation

    We design the Twenty CRM destination schema before any data import. This includes creating the Course, CourseEnrollment, ScheduledSession, AttendanceRecord, Subscription, and Payment Custom Objects via the Twenty /metadata API, adding all required custom fields (with correct field types: text, number, date, picklist, lookup), and configuring lookup relationships between Custom Objects. Standard Person and Company fields are also reviewed and extended with custom fields where Voopty contact data has sub-structures not covered by Twenty's defaults. Schema is validated in a Twenty staging workspace before production deployment.

  3. WorkspaceMember provisioning and user mapping

    We extract every distinct Voopty Teacher and Staff record and map them to Twenty WorkspaceMembers. Voopty role assignments (teacher, administrator) migrate as custom fields on the WorkspaceMember. WorkspaceMembers must be provisioned and active in Twenty before any ScheduledSession or AttendanceRecord records are imported, since these records carry teacher lookups. Any Voopty staff without a corresponding Twenty user are held in a reconciliation queue for the customer's admin to provision.

  4. Core record migration in dependency order

    We run production migration in record-dependency order: WorkspaceMembers first (for teacher lookup resolution), then Persons (for Student and Client records), then Course Custom Object (for enrollment lookups), then CourseEnrollment Custom Object, then ScheduledSession Custom Object, then AttendanceRecord Custom Object, then Subscription and Payment Custom Objects. Each phase emits a row-count reconciliation report before the next phase begins. Voopty active-client status derived from the one-lesson-per-month threshold is preserved in a custom field for audit.

  5. Cutover, validation, and automation rebuild handoff

    We freeze Voopty writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We validate a sample of 30-50 records per object type against the Voopty source for field-level accuracy. We deliver a written inventory of any Voopty Telegram campaigns, email campaign configurations, or workflow-style automations that cannot migrate, with a rebuild guide for Twenty Settings. We support a one-week post-migration window for reconciliation issues.

Platform deep dives

Context on both ends of the pair

Voopty Inc. logo

Voopty Inc.

Source

Strengths

  • All-in-one platform covering scheduling, billing, attendance, and student management for education businesses
  • Supports multiple payment processors common in Eastern European markets including WayForPay and LiqPay
  • Online booking and attendance tracking built into the core product for class-based businesses
  • Telegram and email campaign integration for parent and student communication
  • Role-based staff accounts with configurable permissions for teachers and administrators

Weaknesses

  • Limited public documentation on API endpoints, data schema, and export capabilities
  • Pricing calculator-based model means no published per-seat or per-feature pricing tiers
  • Small company footprint with 3-11 employees raises long-term viability questions for enterprise customers
  • Eastern European market focus limits available support channels and documentation in English
  • No documented bulk data export API or migration tooling referenced in public resources
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 Voopty Inc. 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

    Voopty Inc.: Not publicly documented. We confirm available export channels with Voopty support before scoping a migration..

  • Data volume sensitivity

    B

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

Estimator

Estimate your Voopty Inc. 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 Voopty Inc. to Twenty CRM data migrations

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

Can't find your answer?

Walk through your Voopty Inc. 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 institutions under 2,000 students and 500 clients with standard course structures and no complex multi-tier subscription models. Migrations with multiple course types, multi-year attendance histories, region-specific payment provider references, or complex parent-student enrollment hierarchies move to seven to eleven weeks because of custom object schema design and value-mapping work. The primary timeline risk is Voopty data extraction — if the customer cannot export structured CSVs and requires Voopty support coordination, add two to four weeks to the estimate.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Voopty Inc..
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