CRM migration

Migrate from Road Runner to Twenty CRM

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

Road Runner logo

Road Runner

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Road Runner and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Road Runner is a field-service management platform built for container rental operations — its data model centers on Customers, Jobs, Containers, Invoices, and Drivers with GPS and route-optimization features tied to QB accounting integration. Twenty CRM is a modern open-source CRM with a standard People, Companies, Opportunities, Tasks, and Notes object model plus unlimited custom objects and fields. The migration requires translating Road Runner's job-centric schema into Twenty's contact-centric model: customers become People linked to Companies, active jobs become Opportunities with stage mapping, containers migrate as custom objects, and invoices move to custom fields or a dedicated custom object if your team needs line-item history accessible inside Twenty. FlitStack uses Road Runner's API and CSV export endpoints to extract records, applies type-aware field transformations, and loads into Twenty via CSV import and GraphQL API. Workflows, automations, QB integrations, GPS route data, and driver apps do not migrate and must be rebuilt or reconfigured on the Twenty side. We sequence the migration so company records land first, then people with their companyId links, then opportunities with person and company associations, then any container or custom objects. A 24–48 hour delta window captures jobs created or modified during the cutover window before you decommission Road Runner.

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

Road Runner logo

Road Runner

What's pushing teams away

  • Not applicable — there is no platform at this URL to leave. Road Runner Sports is a retailer; visitors leave the site when they finish shopping.
  • If the catalog intended the PHP RoadRunner server, customers migrate off RoadRunner v1 to RoadRunner v2 due to breaking API changes, or migrate to alternative PHP servers (FrankenPHP, Swoole, ReactPHP) for simpler operational profiles.

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

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

Road Runner

Customer

maps to

Twenty CRM

People

1:1
Fully supported

Road Runner customers map directly to Twenty People. Each customer record's name, email, phone, and address fields map to the corresponding Twenty fields. Customer records without an email receive a placeholder domain (e.g., customer-{id}@placeholder.local) flagged for admin review. Phone numbers are normalized to a standard format during import.

Road Runner

Customer Company

maps to

Twenty CRM

Companies

1:1
Fully supported

When a Road Runner customer represents a business entity rather than an individual, their company name and domain map to Twenty Companies. The companyId relationship links the People record to the Companies record, preserving the account hierarchy that Twenty uses for pipeline reporting.

Road Runner

Job

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Road Runner jobs are the primary work unit. Each job maps to a Twenty Opportunity with the job name as the Opportunity name, job amount as the Amount, and the Road Runner status (Scheduled, In Progress, Completed, Invoiced) mapped to a Twenty Opportunity stage pick-list. Job priority maps to a custom Priority field on the Opportunity.

Road Runner

Job Status

maps to

Twenty CRM

Opportunity Stage

1:1
Fully supported

Road Runner's job status field has discrete values that must map to Twenty's Opportunity Stage values. 'Scheduled' maps to a Prospecting or Qualification stage; 'In Progress' maps to an active stage; 'Completed' maps to Closed Won; 'Invoiced' maps to Closed Won with invoice data attached; 'Cancelled' maps to Closed Lost.

Road Runner

Container

maps to

Twenty CRM

Custom Object: Container

1:1
Fully supported

Road Runner's container tracking has no direct Twenty CRM equivalent. We create a Container custom object in Twenty with fields for Container ID, Type/Size, Status (On Rent, Available, In Service), and Current Location. Each container links to its associated Company via a relation field.

Road Runner

Invoice / Billing Record

maps to

Twenty CRM

Custom Object: Invoice

1:1
Fully supported

Road Runner's QB-synced invoices require a custom Invoice object in Twenty if line-item history is needed inside the CRM. We map Invoice ID, date, total amount, and status. If only summary invoice data is required, these fields attach to the parent Opportunity record instead.

Road Runner

Job Activity (call, note, email)

maps to

Twenty CRM

Task / Note

1:1
Fully supported

Road Runner job notes and communication logs attached to a job record migrate as Twenty Notes linked to the corresponding Opportunity. Timestamps and author attribution are preserved. Call disposition records map to Tasks with the disposition captured in the Task subject or a custom field.

Road Runner

Driver

maps to

Twenty CRM

WorkspaceMember / Custom Object: Driver

1:1
Fully supported

Road Runner driver records map to Twenty Workspace Members by email match if drivers are also CRM users. If drivers are not CRM users, their records migrate as a custom Driver object with name, phone, and status fields, linked to job assignments via a relation field on the Opportunity.

Road Runner

Attachment / File

maps to

Twenty CRM

Note / External Storage

1:1
Fully supported

Road Runner attachments (photos, delivery confirmations, container condition reports) download from Road Runner storage and re-upload to Twenty's attached Notes. If the files are large or numerous, we surface them in Twenty as a custom URL field pointing to a shared storage location rather than migrating binary blobs directly.

Road Runner

Custom Properties (container type, rental tier, service agreement)

maps to

Twenty CRM

Custom Fields on relevant objects

1:1
Fully supported

Any Road Runner custom fields on customer, job, or container records migrate as custom fields on the corresponding Twenty object. Multi-select pick-lists in Road Runner (e.g., service types applied to a job) map to Twenty multi-select fields or a series of boolean fields depending on filterability needs.

Road Runner

Owner / Assigned Rep

maps to

Twenty CRM

WorkspaceMember (OwnerId)

1:1
Fully supported

Road Runner owner or assigned rep on a job record is resolved by email match against Twenty Workspace Members. Unmatched owners are flagged before migration. You either invite them to Twenty first or assign their records to a fallback owner — no record lands without an owner reference in Twenty.

Road Runner

QB Integration Records

maps to

Twenty CRM

Not Migrated

1:1
Fully supported

QuickBooks sync state, QB-specific invoice IDs, and payment reconciliation links do not have an equivalent in Twenty CRM. Invoice header data migrates to the custom Invoice object; QB-level transaction references are stored as a text field for reconcilliation after you connect your accounting tool to Twenty.

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.

Road Runner logo

Road Runner gotchas

High

No public REST API for FSM record export

High

v1-to-v2 API rewrite requires complete config migration

Medium

Per-installation KV namespace schema varies

Medium

Bulk export not supported — we read incrementally

Low

Attachment and media files are external to RoadRunner

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

  • QB invoice sync state does not transfer — reconcilliation happens post-migration

    Road Runner's bidirectional QB integration stores payment status, QB invoice IDs, and sync tokens that have no equivalent in Twenty CRM. When invoice data migrates to Twenty's custom Invoice object, the QB payment status (Paid/Unpaid/Overdue) is preserved, but the QB sync token and lock state are not. You will need to manually reconcile any in-flight QB transactions — particularly those in a 'syncing' or 'pending' state at the time of migration — after your accountant confirms the QB side is accurate.

  • Container-to-job relationships require a custom object with N:1 links

    Road Runner lets one job reference multiple containers and one container appear on multiple jobs over time. Twenty CRM's native relation model is one-to-many (one Opportunity has many related records, but no built-in junction table for N:N container-to-job links). We create a Container custom object and either use a multi-select relation field on the Opportunity or a dedicated Junction object — your admin chooses the approach based on how you want to filter and report on container utilization in Twenty.

  • Twenty's API rate limits cap throughput on large migrations

    Road Runner's CRM export can push large record sets via its API, but Twenty's Cloud Pro tier limits you to 100 API calls per minute and the Organization tier to 200 per minute. For migrations exceeding 50,000 records, FlitStack falls back to Twenty's CSV bulk-import capability (which supports up to 20,000 records per import run) combined with API calls for relation linking. This approach keeps the migration within rate-limit bounds while maintaining relational integrity.

  • GPS route data and driver app state are not migratable

    Road Runner's driver app stores GPS breadcrumbs, route-optimization results, and real-time job status updates that live in the driver's mobile session, not in the Road Runner database. Twenty has no field-service mobile app. Historical job completion times and driver assignments migrate as data on the Opportunity record, but the granular GPS trail, actual arrival/departure timestamps, and route efficiency data are lost in the migration and would require a custom mobile app build on Twenty if that operational data is needed going forward.

  • Workflows, sequences, and automations require full manual rebuild

    As with all migrations, Road Runner automations — such as automatic job-status update triggers, QB invoice creation rules, or customer notification workflows — do not migrate to Twenty. Twenty's workflow builder supports basic trigger-action automations but has a different paradigm from Road Runner's rule engine. We export your Road Runner workflow definitions as a reference document that your Twenty admin can use to rebuild equivalent rules, but the translation is manual and must be validated by your operations team before go-live.

Migration approach

Six steps for a successful Road Runner to Twenty CRM data migration

  1. Audit Road Runner data and build the field mapping document

    FlitStack extracts a full export from Road Runner via API and CSV, covering customers, jobs, containers, invoices, and driver records. We produce a mapping document that specifies for each field: the source Road Runner field name, the destination Twenty field or custom object, the transformation type (direct, value-map, custom field required), and any business rules for multi-value or multi-record fields like container assignments. This document is the contract for the migration — you review and approve it before any data moves.

  2. Create Twenty workspace structure and custom objects

    Before records land, we create the Container and Invoice custom objects in Twenty along with any custom fields referenced in the mapping document (Opportunity_Priority__c, Opportunity_Type__c, and others). Twenty requires fields to exist before import, so this step runs before the CSV upload. We also invite all team members to Twenty at this stage so owner and assigned-rep email matching can resolve at migration time rather than leaving records orphaned.

  3. Import records in dependency order

    Twenty's import system requires parent records before children: Companies first, then People linked to Companies, then Opportunities linked to People and Companies. Containers and Invoices import after their parent records exist. FlitStack sequences the load so foreign-key references resolve correctly on the first pass. Any Road Runner record with a missing parent (e.g., a job with a deleted customer) is flagged, de-duplicated against existing records, and surfaced in a remediation report for your team to resolve before the full run.

  4. Run a sample migration with field-level diff

    A representative slice — typically 200–500 records covering a range of job statuses, container types, and customer types — migrates first. We generate a field-level diff showing exactly what landed in Twenty for each record compared to the source. You verify that job-status to stage mapping produced the expected Opportunity stages, that container links attached to the right Opportunities, and that owner matching resolved correctly. The diff is the gating artifact before the full production migration commits.

  5. Execute full migration with delta pickup window

    The full record set migrates into Twenty. A delta-pickup window of 24–48 hours after initial load captures any Road Runner records created or modified during the cutover. All operations are logged in an audit trail. If reconciliation reveals a data issue — a missing container link, an incorrect stage assignment — FlitStack provides a targeted re-migration of the affected records. One-click rollback is available if the full reconciliation check fails.

Platform deep dives

Context on both ends of the pair

Road Runner logo

Road Runner

Source

Strengths

  • Plugin-based architecture means FSM data lives in configurable storage backends, giving migration flexibility.
  • Native Temporal and Jobs support for background task queue migrations.
  • OpenTelemetry integration allows tracing data to be preserved during migration.
  • Distributed locks and health-check plugins give visibility into runtime state that helps us validate migration integrity.
  • Centrifuge websocket support enables real-time notification migration to destination platforms.

Weaknesses

  • No documented public REST API for standard CRM or FSM record types — all data lives in opaque plugin-specific storage.
  • FSM objects like Work Orders and Technicians have no native schema; they are custom KV namespaces that vary per installation.
  • No documented rate limit or bulk API — migration pacing must be negotiated per deployment.
  • RoadRunner v1-to-v2 migration has breaking changes across tuning, configuration, and API endpoints.
  • Road Runner Sports (roadrunnersports.com) usage suggests a heavily customised per-installation fork, making generic migration tooling unreliable.
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. 3 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 Road Runner and Twenty CRM.

  • Object compatibility

    B

    3 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

    Road Runner: Not applicable.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Migrations with under 10,000 records typically complete in 48–72 hours of clock time once the workspace is configured. Configurations exceeding 50,000 records or those involving multiple custom objects (Containers, Invoices, Driver records) extend to 5–10 days. The planning and workspace-setup phase — building custom objects and resolving owner email matches — typically adds another 3–5 business days before the migration run begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Road Runner.
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