CRM migration

Migrate from MobiWork to Twenty CRM

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

MobiWork logo

MobiWork

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between MobiWork and Twenty CRM.

Complexity

BStandard

Timeline

3–5 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

MobiWork is a field service management platform centered on work orders, scheduling, dispatching, and invoicing — with customers, quotes, and payment processing built around job execution. Twenty CRM is an open-source CRM with standard People, Companies, Opportunities, Notes, and Tasks objects plus a fully customizable metadata layer for custom objects. The two platforms share a relational model, but Twenty has no native work order or invoicing constructs — those migrate as custom objects with custom fields capturing priority, status, scheduling dates, technician assignment, invoice totals, and payment data. We sequence the migration so Companies land before People (Twenty's required import order), People before Opportunities (for association), and custom objects last. MobiWork's integrations with QuickBooks, Sage, Stripe, and Clearent do not have direct Twenty equivalents — FlitStack flags each integration as a manual-rebuild item. Workflows and automations built in MobiWork are platform-bound and do not export; we deliver a structured definition export for reference. The migration runs against MobiWork's scoped read API and Twenty's REST/GraphQL bulk endpoints, with a 24–48h delta pickup window capturing any records created or modified during cutover.

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

MobiWork logo

MobiWork

What's pushing teams away

  • Integration costs are prohibitive — reviewers note that connecting to other software requires development involvement that quickly offsets the base subscription savings.
  • Routing and scheduling setup is over-complicated and not user-friendly, especially for seasonal businesses that need to reconfigure technician routes at the start of each season.
  • Screen load times degrade noticeably with large customer databases, particularly on the Composite routing view used by dispatchers.
  • The feature gap between Starter and Premier tiers forces companies to pay for Unlimited user pricing just to get offline mode and route optimization, creating tier claustrophobia.
  • Onboarding complexity requires buy-in from the whole company upfront — a piece-part implementation leads to a poorly configured system that underdelivers.

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

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

MobiWork

Customer / Prospect

maps to

Twenty CRM

People

1:1
Fully supported

Both MobiWork Customers and Prospects map to Twenty's People object. FlitStack AI tags the source record type (Customer vs. Prospect) as a custom pick-list field (MobiWork_Source_Type__c) on the Twenty People record. All standard contact fields — name, email, phone, address — migrate directly. Phone numbers, job titles, and company associations preserve original values.

MobiWork

Customer / Prospect (associated company)

maps to

Twenty CRM

Company

1:1
Fully supported

MobiWork stores company data alongside customers. We extract the company name and contact details into Twenty's Companies object first (required before People can associate via companyId). Industry, employee count, annual revenue, and address fields map directly. Parent-child company hierarchies in MobiWork map to Twenty's standard Company.parentId relationship.

MobiWork

Work Order

maps to

Twenty CRM

Opportunity + Custom Fields

1:1
Fully supported

MobiWork work orders don't have a direct Twenty CRM equivalent — Twenty has Opportunities but no native work order entity. We map Work Order to Opportunity with custom fields: Work_Order_Number__c (text), Work_Order_Status__c (select), Work_Order_Priority__c (select), Scheduled_Date__c (date), Completed_Date__c (date), Technician_ID__c (text), Estimated_Hours__c (number), Job_Address__c (text). The Opportunity Name becomes the Work Order number; Amount is set to zero or a labor estimate if provided.

MobiWork

Work Order associations (customer, company)

maps to

Twenty CRM

Opportunity (linked to People and Company)

1:1
Fully supported

MobiWork Work Orders are linked to the Customer and optionally the associated Company. In Twenty, the Opportunity is linked to the corresponding People record (the customer contact) and the Company record via standard Opportunity relationship fields. This preserves the full customer and account context for each job.

MobiWork

Quote

maps to

Twenty CRM

Opportunity

1:1
Fully supported

MobiWork Quotes map to Twenty Opportunities representing estimated or proposed deals. The Quote's estimated amount becomes the Opportunity amount. Quote status (Draft, Sent, Accepted, Lost) maps to a custom pick-list field Quote_Status__c on the Opportunity. Quote items are stored as a custom text field (Line_Items__c) since Twenty has no native quote-line structure.

MobiWork

Schedule / Dispatch

maps to

Twenty CRM

Task

1:1
Fully supported

MobiWork Schedules represent technician assignments and time windows for work orders. These map to Twenty Tasks. The Task title is set to the Work Order number or a descriptive string. The assigned technician resolves to a Twenty user by email match. Scheduled_Date__c and Time_Window__c from the schedule are stored as custom fields on the Task since Twenty Tasks use a single due date. Schedule status (Assigned, En Route, Completed) maps to Task status.

MobiWork

MobiWork custom object: Invoice

maps to

Twenty CRM

Custom Object: Invoice

1:1
Fully supported

MobiWork Invoices have no native equivalent in Twenty CRM. We create a custom Invoice object via Twenty's /metadata API before migration. Custom fields include: Invoice_Number__c (text), Total__c (currency), Status__c (select), Issue_Date__c (date), Due_Date__c (date), Tax_Amount__c (currency), Work_Order_ID__c (text, linking back to the related Opportunity custom field). The invoice is associated to the People record of the billed customer.

MobiWork

MobiWork custom object: Payment

maps to

Twenty CRM

Custom Object: Payment (linked to Invoice)

1:1
Fully supported

MobiWork Payment records capture transaction data for paid invoices. These migrate to a custom Payment object in Twenty. Custom fields include: Payment_ID__c (text), Amount__c (currency), Payment_Date__c (date), Payment_Method__c (select — maps values to Twenty select options), Transaction_Ref__c (text), Invoice_ID__c (text, linking to the related custom Invoice record). This preserves a complete financial trail in Twenty.

MobiWork

MobiWork custom objects (user-defined)

maps to

Twenty CRM

Custom Object (via Twenty metadata API)

1:1
Fully supported

MobiWork allows custom fields per entity. Twenty supports full custom objects created via its metadata API. FlitStack audits all MobiWork custom fields and creates matching custom fields (or custom objects for complex N:N relationships) in Twenty before importing data. Field type mapping is type-aware: text stays text, numbers stay numbers, pick-lists become select fields with value-by-value mapping.

MobiWork

MobiWork Owner / Technician

maps to

Twenty CRM

Twenty WorkspaceMember (user by email)

1:1
Fully supported

MobiWork stores Owner IDs and Technician IDs on records. These are internal identifiers without direct mapping to Twenty. FlitStack resolves each MobiWork owner/technician by email — if a matching user exists in Twenty, OwnerId maps to that user's ID; if not, the record is assigned to a fallback owner and a flag is raised. Users must be invited to Twenty before migration so this resolution can succeed.

MobiWork

MobiWork attachments (images, signatures, forms)

maps to

Twenty CRM

Twenty Files / Notes attachments

1:1
Fully supported

MobiWork electronic forms store images and signatures attached to work orders. FlitStack downloads all attachments from MobiWork, re-uploads them to Twenty Files, and attaches them to the corresponding migrated record (Work Order as Opportunity or custom object). Signature images attach to the People record of the customer who signed. File size limits from Twenty's storage configuration are applied.

MobiWork

MobiWork integrations (QuickBooks, Sage, Stripe, Clearent, MailChimp)

maps to

Twenty CRM

No equivalent — flagged for manual rebuild

1:1
Fully supported

MobiWork's built-in integrations with QuickBooks Desktop, Sage One, Stripe, Clearent, and MailChimp have no direct Twenty CRM equivalent. FlitStack documents each active integration and its purpose, delivers a rebuild plan referencing the integration's trigger events and data flows, and flags the integration as a manual-rebuild item in the migration report. This ensures nothing is lost in the data migration even though the integrations themselves cannot be transferred.

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.

MobiWork logo

MobiWork gotchas

High

No public API means migration is export-constrained

High

30-day post-cancellation export window

Medium

Tier-gated objects require plan upgrade to migrate

Medium

Integration attachments require separate handling

Low

Annual prepayment is mandatory across all tiers

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

  • Twenty API rate limits cap bulk import throughput on large MobiWork datasets

    Twenty Cloud's REST and GraphQL APIs enforce rate limits per tier — Pro Cloud allows 100 API calls per minute and Organization Cloud allows 200 per minute. MobiWork field service datasets with 10,000+ work orders and associated schedules can produce 50,000+ total records. FlitStack AI batches all writes to stay within the per-minute ceiling, introduces retry logic with exponential backoff on 429 responses, and self-hosting Twenty removes the rate limit constraint entirely — letting us migrate at maximum throughput.

  • MobiWork integrations with QuickBooks, Sage, Stripe, and Clearent have no Twenty equivalent

    MobiWork's built-in integrations with QuickBooks Desktop, Sage One, Stripe, and Clearent are platform-bound configurations that cannot be exported or transferred. FlitStack AI audits each active integration, documents its trigger events (e.g., an invoice paid in MobiWork syncs to QuickBooks), and delivers a rebuild reference — but the integrations themselves must be reconstructed in Twenty using webhooks, Zapier/Make, or a custom integration script. This is a known limitation disclosed upfront so teams can plan the rebuild effort.

  • Work orders and invoices require custom object creation before migration data can land

    Twenty does not have a native work order or invoice entity — those data types must be created as custom objects via Twenty's /metadata API before any migration data can reference them. If custom objects are not pre-created, the Opportunity records that reference work-order custom fields will land without those fields available, requiring a supplemental migration pass to backfill them. FlitStack AI creates all required custom objects and custom fields during the setup phase before the first record is written, so this scenario is avoided — but it is a real constraint that unmanaged CSV imports regularly hit.

  • Twenty's CSV import requires companies to exist before people can associate to them

    Twenty's import system enforces referential integrity: People records must reference a companyId that already exists in the Companies table. MobiWork stores company data alongside customers but does not require a separate Company record to exist before a Customer can be created. FlitStack AI sequences the migration to export and import Companies first, then People with resolved companyId values, then Opportunities, then custom objects — following Twenty's documented import order precisely. Any records with unresolved company references are flagged before the migration runs and resolved against a default 'Unassigned' company record.

  • MobiWork's activity history (call logs, form submissions) may not export in a portable format

    MobiWork stores activity history — call logs, electronic form submissions, customer sign-offs — in a format tied to its field service UI. FlitStack AI attempts to export this data as structured records, but certain activity types (especially photo annotations, GPS traces, and custom form field responses) may require transformation to fit Twenty's Notes or Task structure. Where the format is not portable, FlitStack preserves the raw data as an attachment on the relevant Work Order Opportunity record, alerting the team that manual review is required to interpret those artifacts in Twenty.

Migration approach

Six steps for a successful MobiWork to Twenty CRM data migration

  1. Audit and export MobiWork data model

    FlitStack AI connects to MobiWork via scoped read API and profiles your full schema: all Customer fields, Work Order fields, Quote fields, Invoice fields, Schedule records, and any custom fields. We export each entity to CSV and capture record counts, data types, and pick-list value sets. This audit determines how many custom objects and custom fields Twenty needs and confirms which MobiWork integrations are active and need rebuild documentation.

  2. Create Twenty custom objects and custom fields

    Before any data is written, FlitStack AI creates the custom objects (Invoice, Payment) and custom fields (Work_Order_Number__c, Work_Order_Status__c, Work_Order_Priority__c, Schedule_Status__c, etc.) via Twenty's /metadata API. We apply pick-list values, set field types, and configure field settings to match the MobiWork source exactly. This step also includes inviting all MobiWork owner and technician users to Twenty so owner resolution by email can succeed.

  3. Import Companies, then People, then Opportunities

    Twenty requires Companies to exist before People can associate to them. We run the migration in required sequence: Companies first (with parentId for hierarchies), then People with resolved companyId, then Work Orders mapped to Opportunities (with custom field values), then Quotes mapped to Opportunities. During this phase we apply owner resolution by email match and flag any records where a technician or owner cannot be matched to a Twenty user.

  4. Run a sample migration with field-level diff

    A representative slice — typically 200–500 records spanning Customers, Work Orders, Invoices, and Schedules — migrates first. FlitStack AI generates a field-level diff between the MobiWork source record and the Twenty destination record for every field, flagging any truncated text, missing pick-list values, or unresolved owner references. You verify the diff and confirm the mapping is correct before the full migration commits. Custom field creation is validated at this stage.

  5. Full migration with delta pickup and rollback

    The full dataset migrates against Twenty's REST and GraphQL bulk endpoints in batches within rate limits. A delta-pickup window (24–48 hours) captures any MobiWork records created or modified during cutover so Twenty reflects the final state at go-live. FlitStack AI maintains an audit log of every operation and provides a one-click rollback if reconciliation reveals data quality issues. MobiWork access is read-only during migration — your team keeps working in MobiWork throughout.

Platform deep dives

Context on both ends of the pair

MobiWork logo

MobiWork

Source

Strengths

  • Single platform covers work orders, invoicing, scheduling, routing, payments, and customer management.
  • Mobile app works offline on Premier tier, critical for field technicians in low-connectivity areas.
  • Good customer support responsiveness cited consistently across G2 and Capterra reviews.
  • Progressive billing and automated payment collection (Stripe, Clearent) improve cash flow.
  • Customizable electronic forms with signature capture replace paper-based work order processes.

Weaknesses

  • No public API documentation found — bulk data export is constrained to a 30-day post-cancellation window.
  • Annual prepayment required even at Starter tier; no monthly billing option.
  • Integrations with external CRM and accounting software (HubSpot, Salesforce, QuickBooks Desktop) gated to Advanced and above.
  • Screen performance degrades with large customer counts, especially on the dispatch board.
  • Learning curve is steep due to complexity across mobile and desktop interfaces.
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 MobiWork 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

    MobiWork: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most MobiWork-to-Twenty migrations complete in 3–5 days of clock time for under 50,000 records. The longest planning step is creating Twenty custom objects and custom fields for Work Orders and Invoices before data can land. Larger setups with 100,000+ records, multiple custom objects, or complex owner/technician resolution extend to 1–3 weeks. Self-hosting Twenty removes API rate limits and can accelerate large-batch writes significantly.

Adjacent paths

Related migrations to explore

Ready when you are

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