CRM migration

Migrate from Weave to Twenty CRM

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

Weave logo

Weave

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

18 of 18

objects map 1:1 between Weave and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Weave organizes patient-facing practices around contacts, locations, communication threads, and appointments. Its data model blends CRM records with real-time VoIP call logging, SMS history, and appointment reminders — optimized for front-desk workflows in dental, veterinary, and medical settings. Twenty CRM provides People (contacts), Companies (accounts), Opportunities (deals), Notes, and Tasks as standard objects, with custom objects and fields available on paid tiers. FlitStack AI extracts Weave records via API (contacts, companies, communications, appointments, tasks) and loads them into Twenty via CSV import or GraphQL API — handling relationship resolution (person-to-company links via companyId), call-log flattening into Tasks with metadata, and appointment-to-Note conversion. Weave custom properties migrate as custom fields on the matching Twenty object. Workflows, sequences, and automations built in Weave do not transfer — Weave's automation model has no equivalent in Twenty's workflow builder. We deliver a field-level diff before the full run, capture in-flight changes during a 24–48 hour delta window, and generate an audit log so you can trace every record to its source.

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

Weave logo

Weave

What's pushing teams away

  • Software plateaued and stopped evolving with practice needs; features stagnated while competitors added AI and automation capabilities.
  • Customer support became inconsistent over time, with longer response times and difficulty reaching knowledgeable staff for technical issues.
  • Cost became difficult to justify as the practice grew and the feature set no longer matched the increasing monthly spend.
  • Customization limitations frustrated practices with unique workflows that could not be adapted within Weave's opinionated structure.

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 Weave objects map to Twenty CRM

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

Weave

Contact (Patient)

maps to

Twenty CRM

People

1:1
Fully supported

Weave Contact records migrate as Twenty People objects. Each patient's primary company (practice or location) resolves to a companyId link pointing to the corresponding Company record. For patients without a linked location, FlitStack creates a standalone People record with either a placeholder company or a custom 'Unassigned' flag to preserve data integrity and ensure relationship consistency in Twenty's schema.

Weave

Contact Name (First + Last)

maps to

Twenty CRM

People.name

1:1
Fully supported

Weave stores first name and last name as separate contact properties. These two fields concatenate to populate the Twenty People name field. For contacts that lack a name in Weave, FlitStack preserves the original source identifier (such as an internal Weave ID) in a custom 'Source_Name__c' field on the People record to maintain traceability.

Weave

Contact Email

maps to

Twenty CRM

People.email

1:1
Fully supported

The primary email address from each Weave Contact maps directly to the Twenty People email field. When a Weave contact has multiple email addresses on file, the primary email populates the standard email field while additional addresses are stored in a custom multi-value field called 'Additional_Emails__c' using a semicolon-separated format.

Weave

Contact Phone

maps to

Twenty CRM

People.phone

1:1
Fully supported

Weave's primary phone field maps to the Twenty People.phone standard field. Mobile phone, home phone, and work phone stored as separate contact properties in Weave migrate to custom text fields on the People record (Mobile_Phone__c, Home_Phone__c, and Work_Phone__c respectively) to preserve all available contact numbers.

Weave

Contact Address

maps to

Twenty CRM

People.address + custom fields

1:1
Fully supported

Weave stores address components (street, city, state, postal code, and country) as separate sub-fields on the contact record. These consolidate into a single formatted address string in Twenty's People.address field while maintaining individual custom fields for city, state, and postal code to enable precise filtering, segmentation, and geographic reporting.

Weave

Contact Communication Preferences

maps to

Twenty CRM

Custom fields on People

1:1
Fully supported

Weave tracks SMS opt-in, email opt-in, and call preferences as per-contact settings. Since Twenty has no native equivalent for these preference fields, FlitStack migrates each preference as a custom boolean field on the People record: SMS_Opt_In__c, Email_Opt_In__c, and Call_Permission__c, preserving the original consent status from Weave.

Weave

Location (Practice)

maps to

Twenty CRM

Company

1:1
Fully supported

Weave Locations representing practices, clinics, or offices map directly as Twenty Companies. Each Weave location name becomes a Company.name value. For multi-location practices in Weave that maintain separate contact lists and scheduling queues, FlitStack generates separate Company records linked by a custom 'Practice_Group__c' field to represent the parent organization.

Weave

Location Address

maps to

Twenty CRM

Company.address + address fields

1:1
Fully supported

Location address fields (street, city, state, postal code, country) from Weave map to Twenty Company address fields following the same transformation pattern applied to contact addresses. The consolidated address string populates the standard Company.address field while individual sub-fields (city, state, postal_code) are preserved as custom fields for reporting and geographic segmentation.

Weave

Contact–Location Association

maps to

Twenty CRM

People.companyId

1:1
Fully supported

Weave's patient-to-location association (identifying which clinic or practice a patient belongs to) maps to People.companyId pointing to the corresponding Twenty Company record. When a patient has multiple associated locations in Weave, secondary location links are stored as a custom 'Additional_Locations__c' multi-select field on the People record.

Weave

Communication (SMS / Call / Email)

maps to

Twenty CRM

Task

1:1
Fully supported

Weave communication threads (SMS messages, VoIP calls, emails) transform into Twenty Tasks. Each Task captures the interaction direction (inbound/outbound), communication type (call/sms/email), call duration stored in a custom Duration_Seconds__c field, the original timestamp, and the original Weave thread ID. The task body stores a truncated transcript or summary for quick reference.

Weave

Appointment

maps to

Twenty CRM

Note + Task

1:1
Fully supported

Weave appointments transform into a Note linked to People and Company records plus a companion Task. The Note contains appointment type, duration, and clinical notes while the Task carries the appointment date as dueDate and the assigned provider in the assignee field. Weave reminder sequences do not migrate — those must be rebuilt using Twenty's workflow builder on Pro or Organization tiers.

Weave

Appointment Reminder

maps to

Twenty CRM

Not migrated

1:1
Fully supported

Weave's automated SMS and email appointment reminders built on Weave's automation engine have no equivalent in Twenty's workflow model. These workflows cannot be exported and must be rebuilt from scratch using Twenty's workflow builder (available on Pro and Organization Cloud tiers) or via an external scheduling integration. FlitStack exports reminder configurations as a JSON reference document for your Twenty admin to use during the rebuild.

Weave

Task / To-Do

maps to

Twenty CRM

Task

1:1
Fully supported

Weave tasks and front-desk action items map directly to Twenty Tasks. Task status (completed/incomplete), due date, assignee, and description fields carry over directly from Weave. The completed flag preserves the original completion state so your team can review historical task data in Twenty without needing to re-create the work history.

Weave

Custom Property (Contact)

maps to

Twenty CRM

Custom field on People

1:1
Fully supported

Weave custom contact properties migrate as custom fields on the Twenty People object. Field type mapping follows these rules: text properties become TEXT fields, numeric properties become NUMBER fields, date properties become DATE fields, and picklist properties become SELECT or multi-select fields depending on Weave's configuration. All custom fields must be pre-created in Twenty Settings before import.

Weave

Custom Property (Location)

maps to

Twenty CRM

Custom field on Company

1:1
Fully supported

Weave custom location properties such as tax ID, NPI number, scheduling rules, and clinic-specific attributes migrate as custom fields on the Twenty Company object. The same type-mapping rules applied to People custom fields (text, number, date, picklist) apply here, ensuring data types remain consistent across both object types during migration.

Weave

Billing / Payment Record

maps to

Twenty CRM

Custom Object or Note

1:1
Fully supported

Weave's integrated billing and payment records have no direct equivalent in Twenty's standard data model. FlitStack migrates billing summaries (most recent payment amount, date, and status) as Note records attached to the relevant People or Company record. Full payment history, invoice records, and outstanding balances require a custom object setup in Twenty available on Pro and Organization tiers.

Weave

Owner / Assigned User

maps to

Twenty CRM

People.companyId + custom owner field

1:1
Fully supported

Weave owner assignments identifying which staff member owns a contact or location resolve via email match to Twenty workspace members. Unmatched owners are flagged in a pre-migration report for manual assignment. Original ownership metadata is preserved in a custom 'Source_Owner__c' field on each record, storing the Weave owner email for audit and reference purposes.

Weave

HIPAA Compliance Flag

maps to

Twenty CRM

Custom field on People

1:1
Fully supported

Weave's HIPAA compliance infrastructure including audit logs and secure messaging has no native equivalent in Twenty's general-purpose CRM model. FlitStack preserves a HIPAA_Flag__c custom boolean field on People records and a 'Compliance_Notes__c' field for storing audit trail references from Weave's export. The compliance framework itself must be addressed at the deployment level.

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.

Weave logo

Weave gotchas

High

Pricing hides setup, hardware, and addon costs

High

SMS and voicemail retention limits

Medium

Limited public API documentation

Medium

VoIP call records tied to phone service

Medium

Consolidated pricing tiers obscure feature availability

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

  • Weave's SMS and VoIP communication model has no native equivalent in Twenty's data model

    Weave logs SMS threads, VoIP calls, and email interactions as Communication records with direction, duration, and full message bodies. Twenty has no standard communication log object — these records must flatten into Tasks with metadata fields (direction, duration, type) stored as custom fields on the Task. Call recordings attached to Weave communications require manual re-upload to Twenty's file attachments. Teams that rely on Weave's thread-level SMS history need to decide whether to store full message bodies as Note records (which Twenty supports) or accept a summarized Task-based log. We surface this as a pre-migration decision point and include a thread-summary-to-Note transformation option.

  • Weave's multi-location model maps awkwardly to Twenty's single-workspace Companies object

    Weave supports multiple practice locations with separate contact lists, scheduling queues, and staff assignments per location. Twenty's Company object represents a single business entity — there is no native multi-location hierarchy. Teams migrating from Weave with 3+ locations must decide: either flatten all locations into a single Company with a custom 'Location_Name__c' field (simplest), or create separate Company records for each location and use a custom junction object to represent the parent organization (more accurate but adds schema complexity). We flag this decision before migration and provide both options in the field mapping plan.

  • Weave's appointment reminders and sequences do not transfer — Twenty's workflow builder is more limited

    Weave sequences (automated SMS reminders, follow-up sequences, appointment confirmation workflows) are built on Weave's own automation engine and have no export mechanism. Twenty's workflow builder (Pro/Organization tiers) supports event-based triggers but lacks native sequencing with time-based wait steps and branching conditions. Teams migrating from Weave will need to rebuild reminder sequences either inside Twenty's workflow builder or via an external scheduling integration. We export Weave sequence definitions as a structured JSON reference document so your Twenty admin can recreate the logic. This is always a manual rebuild step — we disclose it upfront.

  • Weave's HIPAA compliance infrastructure does not have a direct migration path to Twenty

    Weave is marketed as HIPAA-compliant and includes audit logging, secure messaging, and BAA availability for covered entities. Twenty CRM is not marketed as HIPAA-compliant out of the box — it is a general-purpose CRM without a Business Associate Agreement program. Practices migrating from Weave that require HIPAA compliance must evaluate whether Twenty's self-hosted deployment meets their compliance obligations, or plan for a dedicated BAA arrangement. We preserve HIPAA-related flags from Weave (audit references, compliance notes) as custom fields on People records, but the compliance infrastructure itself must be addressed at the deployment level.

  • Twenty's CSV import caps at 20,000 records per export — large Weave datasets require multi-pass extraction

    Twenty's built-in CSV import supports a maximum of 20,000 records per import operation. Weave does not expose a public bulk export API that returns all record types in a single pull. FlitStack AI handles this by performing multiple paginated API extractions from Weave (contacts, locations, communications, appointments, tasks) and batching the data into Twenty-importable CSV files in chunks of 20,000. Relationship integrity across batches (person-to-company links, task-to-person links) is maintained via source system IDs that resolve after all batches land in Twenty. We disclose the batch strategy in the migration plan before execution.

Migration approach

Six steps for a successful Weave to Twenty CRM data migration

  1. Extract Weave data via paginated API

    FlitStack AI authenticates against the Weave API and extracts all standard and custom record types: contacts (patients), locations (practices), communications (SMS, calls, emails), appointments, and tasks. We pull in 10,000 records per API page, handling Weave's rate limits with exponential back-off. Each record is tagged with its Weave ID, owner email, location ID, and original create/update timestamps. The extraction generates a manifest showing record counts per object and flags any records that exceed the field-length limits of Twenty's schema.

  2. Map Weave objects to Twenty schema and pre-create custom fields

    Before data loads, we map each Weave object to its Twenty equivalent and create any missing custom fields in Twenty's Settings → Data Model. Custom properties from Weave (contact fields, location fields) are created as custom fields on the matching Twenty object with the appropriate type. Multi-location Weave setups are flagged for the location-mapping decision (flattened vs. junction). All custom fields must exist before CSV import — Twenty's import creates records, not fields. This step includes a custom field manifest reviewed by your Twenty admin before proceeding.

  3. Run sample migration with field-level diff

    A representative slice of 100–500 records migrates first — covering contacts across different locations, a sample of communication history, and appointment records. We generate a field-level diff comparing the Weave source values against the loaded Twenty records. This diff is reviewed by your team to verify that location mapping, owner resolution, communication type encoding, and appointment conversion meet expectations before the full run commits. Any mapping adjustments are made before the production migration.

  4. Execute full migration with delta-pickup window

    The full dataset loads into Twenty in batches of 20,000 records per CSV import, following the Twenty import order: Companies (locations) first, then People (contacts), then Tasks (communications, appointments, to-dos). During the cutover window, your team continues working in Weave. After the initial full load, FlitStack AI runs a delta extraction capturing any Weave records created or modified in the previous 24–48 hours and loads them into Twenty as a final batch. The audit log records every operation for traceability. One-click rollback is available if reconciliation reveals data integrity issues.

  5. Deliver migration manifest, field mapping doc, and sequence reference export

    After migration completes, FlitStack AI delivers: a record-count manifest showing all objects migrated and any records skipped or flagged; a field mapping document with every Weave field → Twenty field mapping including transformation notes; a Weave sequence definition export (JSON) for your Twenty admin to use as a rebuild reference; and a list of unmapped Weave features (reminders, automations, billing records) with recommendations for rebuilding in Twenty or via an external integration. Your team reviews the deliverables and confirms readiness for go-live.

Platform deep dives

Context on both ends of the pair

Weave logo

Weave

Source

Strengths

  • Single platform covers phone, texting, scheduling, and payments for small healthcare practices.
  • HIPAA compliance is built-in rather than bolted on, simplifying security reviews.
  • Voicemail transcription is automatic and integrated into the communication inbox.
  • Text-to-pay brings billing into the same thread as patient communication.
  • G2 rating of 4.6 reflects consistent user satisfaction across dental, vet, and medical segments.

Weaknesses

  • API documentation is not publicly prominent, limiting self-service integration and migration tooling.
  • Historical SMS and voicemail retention depends on plan and storage policies, which may not cover the full relationship history.
  • Feature development slowed relative to competitors, with users noting stagnation over multi-year periods.
  • Customization options are limited compared to general-purpose CRMs, restricting adaptation to non-standard workflows.
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. 2 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 Weave and Twenty CRM.

  • Object compatibility

    B

    2 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

    Weave: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Weave 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 Weave to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Weave-to-Twenty migrations complete in 48–72 hours of clock time for under 50,000 total records. Larger datasets exceeding 20,000 records per object require multi-batch CSV loading due to Twenty's import limit, extending to 5–7 days. The longest planning step is pre-creating custom fields in Twenty and deciding on the multi-location mapping strategy. Data extraction from Weave adds 2–8 hours depending on record volume and API rate limit behavior.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Weave.
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