CRM migration

Migrate from Spiro to Twenty CRM

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

Spiro logo

Spiro

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

82%

9 of 11

objects map 1:1 between Spiro and Twenty CRM.

Complexity

CModerate

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Spiro to Twenty CRM is a migration from an AI-first SMB CRM with limited export tooling to an open-source platform with a GraphQL/REST API. Spiro has no publicly documented public API for programmatic data extraction; all export work routes through the Data Collector feature that requires CSM enablement and a Dropbox destination. We coordinate with Spiro's team to provision Data Collector access, extract the full object schema including custom field definitions, and transform the export into Twenty's API-compatible import format. We preserve the Spiro pipeline stages as custom stage values in Twenty's Opportunity pipeline, map activity history (calls, emails, meetings) to Twenty's timeline, and handle the Spiro attachment URLs by verifying reachability and re-linking in Twenty. Automations, Data Collector schedules, and AI relationship signals from Spiro do not migrate; we deliver a written inventory of any configured alerts or rules requiring rebuild in Twenty.

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

Spiro logo

Spiro

What's pushing teams away

  • Email integration disconnects without warning, causing missed activity logs
  • Integration issues with existing systems increase implementation time and friction
  • Users report the platform lacks depth for complex sales processes beyond basic tracking
  • Limited documentation makes self-service troubleshooting difficult
  • Small vendor size raises concerns about long-term viability and support continuity

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

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

Spiro

Company

maps to

Twenty CRM

Organization

1:1
Fully supported

Spiro Companies map to Twenty's Organization object. The Spiro company name, address fields (street, city, state, postal code, country), phone, website domain, and industry values migrate directly. We normalize address components if the source Spiro export combines fields. Any Spiro Company records sharing the same legal entity name are flagged as potential duplicates for customer review before final import. Spiro's custom Company fields migrate as Organization custom fields after the customer provisions them in Twenty's workspace settings.

Spiro

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Spiro Contacts map to Twenty's Person object. Name, email, phone, job title, and LinkedIn URL fields migrate directly. The Spiro Contact's linked Company (via Company lookup) migrates as the Person's organization relationship pointing to the target Organization record. Spiro's custom Contact fields migrate as Person custom fields. The email address serves as the primary dedupe key during import.

Spiro

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Spiro Opportunities map to Twenty's Opportunity object with the pipeline and stage reconstructed in Twenty before import. The Opportunity name, amount (value), expected close date, and notes migrate directly. Stage mapping is explicit: each Spiro stage value becomes a custom stage value in Twenty's Opportunity pipeline that we configure during the schema preparation phase. Closed-Lost and Closed-Won statuses from Spiro map to the corresponding stage values in Twenty.

Spiro

Pipeline

maps to

Twenty CRM

Pipeline + Stage

lossy
Fully supported

Spiro's single pipeline with stage values migrates to Twenty's customizable pipeline configuration. We create a Pipeline in Twenty's workspace settings and define stage values that correspond to Spiro's stage labels. Stage order and probability percentages (if present in Spiro) are preserved. If Spiro has multiple pipeline views (for different product lines or team structures), we replicate these as separate Pipelines in Twenty.

Spiro

Custom Fields (Companies, Contacts, Opportunities)

maps to

Twenty CRM

Custom Fields

lossy
Fully supported

Spiro does not expose custom field definitions via a self-serve API. We coordinate with Spiro's Customer Success Manager to extract the full custom field inventory, including field name, type (text, number, date, picklist, checkbox), and object assignment. We then pre-create each custom field in Twenty's workspace (Organizations, People, Opportunities) before importing any data. Field type mapping from Spiro to Twenty is straightforward for text, number, date, and checkbox types; picklist values migrate as-is and require manual recreation in Twenty's picklist settings.

Spiro

Activity: Call

maps to

Twenty CRM

TimelineEvent (custom)

1:1
Fully supported

Spiro call records migrate as TimelineEvent entries in Twenty. The call title, date, duration (minutes), outcome, and notes migrate as event fields. The linked Contact and Company are resolved to the target Person and Organization records respectively. If Twenty's standard timeline does not support call duration fields natively, we create a custom TimelineEvent type with duration and outcome fields. Owner assignment migrates by matching the Spiro user's email to the target Twenty workspace member.

Spiro

Activity: Email

maps to

Twenty CRM

TimelineEvent (custom)

1:1
Fully supported

Spiro email engagement records migrate as TimelineEvent entries in Twenty. The email subject, body (plain text), sent or received direction, and timestamp migrate. Note: if Spiro's email integration was disconnected during the source period, some emails may not have been logged in Spiro at all; we cannot backfill data that was never recorded. We verify email activity records exist in the Spiro export before importing and flag gaps to the customer.

Spiro

Activity: Meeting

maps to

Twenty CRM

TimelineEvent (custom)

1:1
Fully supported

Spiro meeting records migrate as TimelineEvent entries in Twenty with meeting title, date and time, duration, location, and attendees. Attendee emails are resolved to Person records where matches exist in the migrated data; unresolved attendee emails are noted as external participants. The meeting organizer maps to the Twenty workspace member who owns the record.

Spiro

Activity: Task

maps to

Twenty CRM

Task

1:1
Fully supported

Spiro tasks migrate as Twenty Tasks. Task title, description, due date, completion status, priority, and assignee (owner) migrate directly. The linked Contact or Company resolves to the target Person or Organization in Twenty. Task status (completed, in progress, not started) maps to Twenty's task status values.

Spiro

User / Owner

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Spiro user records map to Twenty workspace members. We resolve by email address. Any Spiro user without a matching Twenty workspace member is held in a reconciliation queue; the customer provisions the user in Twenty before the import resumes. Owner assignment on Opportunities, Contacts, and Activities resolves at migration time using the email match lookup.

Spiro

Attachment (file reference)

maps to

Twenty CRM

Attachment (re-linked)

1:1
Fully supported

Spiro stores file attachments as URL references rather than embedded blobs. During migration, we verify each attachment URL is reachable at the time of export, download the file content, and re-upload it to Twenty's attachment storage if available. If the source Spiro workspace access is revoked post-migration, the original URL references become orphaned. We recommend downloading critical attachments before the migration window closes and flag any URLs that fail reachability checks during the export phase.

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.

Spiro logo

Spiro gotchas

High

Email disconnection silently breaks activity logging

Medium

Data Collector requires CSM enablement and Dropbox access

Medium

Attachment URLs are references, not embedded files

Low

Custom field definitions not exposed via self-service API

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

  • Spiro has no self-serve public API for data extraction

    Spiro does not publish a public REST or GraphQL API that third-party migration tooling can call programmatically. All data extraction routes through the Data Collector feature, which requires a Customer Success Manager to enable it for the organization and a Dropbox folder destination for the export files. This adds 3-5 business days of coordination time before migration work begins. We work with Spiro's team to provision Data Collector access and confirm the Dropbox folder is accessible before any export phase starts. Teams that have not used Data Collector before should expect this coordination step in every migration timeline.

  • Custom field definitions require CSM coordination to extract

    Spiro does not expose custom field schema through a self-serve endpoint. The custom field inventory (field name, type, object assignment) must be extracted from Spiro's UI by a CSM or confirmed through a support ticket. Without the custom field schema, we cannot pre-create the equivalent fields in Twenty before importing data, which risks field mismatch or data loss on custom fields. We include a schema extraction coordination step in every Spiro migration scope and flag any fields we cannot confirm before mapping begins.

  • Activity history gaps from email disconnection cannot be backfilled

    Users report that Spiro's email integration disconnects without notice, meaning emails sent during the disconnection window are not logged to Contact or Company records. We cannot migrate data that was never recorded in Spiro. During migration scoping we verify email sync status in Spiro and export any activity logs the customer wants to preserve before the cutover window. If email sync was interrupted during the period the customer cares about, we flag the gap in the discovery report and document it as an export limitation rather than a migration failure.

  • Twenty self-hosted updates can cause blank workspace state

    Twenty's self-hosted update process has known issues where running database migrations between versions results in a blank CRM workspace on next login. We strongly recommend that self-hosted Twenty customers snapshot their database and container state before any version update during or after migration. If the workspace becomes blank post-migration, the database snapshot allows recovery. This is a Twenty-specific operational risk that customers choosing self-hosted Twenty must manage independently of the migration work.

  • Twenty lacks some standard fields that Spiro users may expect

    Twenty's out-of-box field set for People and Organizations does not include all fields present in typical CRM platforms. Users migrating from Spiro may need to create custom fields for industry classifications, employee counts, revenue ranges, or other SMB-focused data points that Spiro included as defaults. We create these fields during the schema preparation phase, but the customer should review their Spiro data and flag any fields that are not appearing in Twenty's standard schema so we can provision them before import.

Migration approach

Six steps for a successful Spiro to Twenty CRM data migration

  1. Data Collector coordination and export

    We initiate contact with Spiro's Customer Success Manager to enable Data Collector for the customer's workspace and provision the Dropbox export folder. We define the export scope: Organizations (Companies), People (Contacts), Opportunities, Activities (calls, emails, meetings, tasks), Users (owners), and any available custom field data. We confirm the Dropbox folder is accessible and that the CSM has completed the export before proceeding. This step typically adds 3-5 business days to the timeline and is the gating factor for all subsequent work.

  2. Schema extraction and custom field inventory

    We work with Spiro's support team to extract the full custom field schema: field name, data type, and object assignment for Companies, Contacts, and Opportunities. We cross-reference this against the Spiro export files to confirm all fields are present in the data export. We then provision the equivalent custom fields in Twenty's workspace settings before any data import begins. Any fields we cannot confirm in the schema are flagged as potential data loss risk and presented to the customer for resolution.

  3. Twenty pipeline and stage configuration

    We create the target pipeline in Twenty's workspace settings and define stage values that correspond to Spiro's pipeline stages. Stage order and any probability percentages migrate as stage metadata. We configure the Opportunity object in Twenty to use this pipeline as the default. Pipeline configuration is validated in Twenty's sandbox or test environment before production import begins.

  4. Owner and user reconciliation

    We extract every distinct user (owner) referenced in Spiro's export files across Opportunities, Contacts, Activities, and any custom object records. We match each user by email address against Twenty's workspace member list. Any Spiro user without a matching Twenty workspace member goes to a reconciliation queue for the customer's admin to provision. Migration cannot proceed past user provisioning because OwnerId references are required on standard objects.

  5. Sandbox migration and validation

    We run a full migration into Twenty's environment using production-like data volume. The customer reconciles record counts (Organizations, People, Opportunities, Activities), spot-checks 25-50 random records against the Spiro source, and validates that the pipeline stages and custom fields rendered correctly. Any mapping corrections, missing fields, or relationship gaps surface here and are resolved before production migration begins.

  6. Production migration in dependency order

    We run production migration in dependency order: Organizations (from Spiro Companies) first, then People (with Organization relationship resolved), then Opportunities (with Organization and Owner resolved), then Activities (calls, emails, meetings, tasks), and finally any attachment file downloads and re-uploads. Each phase emits a row-count reconciliation report before the next phase begins. The Data Collector export is the source of record; any modifications made in Spiro after the export date are documented separately for a delta pass.

  7. Cutover, validation, and handoff

    We freeze Spiro writes during the cutover window and run a final delta migration of any records modified during the migration window. We verify record counts, spot-check relationship integrity (Contacts linked to Organizations, Opportunities linked to Organizations and Contacts), and confirm pipeline stage distribution matches the Spiro source. We deliver a written inventory of any Spiro automations, alerts, or Data Collector schedules that require rebuild in Twenty's workflow tools. We provide a one-week post-migration support window for reconciliation issues raised by the customer's team.

Platform deep dives

Context on both ends of the pair

Spiro logo

Spiro

Source

Strengths

  • Proactive AI surfaces relationship signals without manual CRM entry
  • Data Collector enables no-code batch imports from any external source
  • Custom fields extend the core data model for SMB use cases
  • Dropbox-based file transfer requires no engineering resources
  • Remote-first vendor with focused customer success engagement

Weaknesses

  • No publicly documented REST API limits migration tooling options
  • Email integration reliability issues reported in user reviews
  • Small vendor footprint raises long-term support concerns
  • Limited published documentation for advanced configuration
  • Activity attribution can break silently when email disconnects
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?

Moderate CRM migration. 4 of 8 objects need a mapping; the rest are 1:1.

C

Overall complexity

Moderate migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Spiro and Twenty CRM.

  • Object compatibility

    C

    4 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

    Spiro: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Migrations under 10,000 Contacts, 2,000 Opportunities, and a moderate activity history (under 50,000 engagement records) typically land between three and five weeks. The Data Collector coordination step adds 3-5 business days before any export begins, so projects with tight deadlines should account for this upfront. Migrations with larger activity histories, multiple custom field objects, or complex company normalization (deduplication of Spiro Company records) extend to eight to twelve weeks. Self-hosted versus cloud-hosted Twenty does not meaningfully change migration duration.

Adjacent paths

Related migrations to explore

Ready when you are

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