CRM migration
Field-level mapping, validation, and rollback between MobiWork and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
MobiWork
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between MobiWork and Twenty CRM.
Complexity
BStandard
Timeline
3–5 days
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
Twenty CRM
People
1:1Both 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)
Twenty CRM
Company
1:1MobiWork 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
Twenty CRM
Opportunity + Custom Fields
1:1MobiWork 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)
Twenty CRM
Opportunity (linked to People and Company)
1:1MobiWork 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
Twenty CRM
Opportunity
1:1MobiWork 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
Twenty CRM
Task
1:1MobiWork 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
Twenty CRM
Custom Object: Invoice
1:1MobiWork 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
Twenty CRM
Custom Object: Payment (linked to Invoice)
1:1MobiWork 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)
Twenty CRM
Custom Object (via Twenty metadata API)
1:1MobiWork 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
Twenty CRM
Twenty WorkspaceMember (user by email)
1:1MobiWork 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)
Twenty CRM
Twenty Files / Notes attachments
1:1MobiWork 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)
Twenty CRM
No equivalent — flagged for manual rebuild
1:1MobiWork'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.
| MobiWork | Twenty CRM | Compatibility | |
|---|---|---|---|
| Customer / Prospect | People1:1 | Fully supported | |
| Customer / Prospect (associated company) | Company1:1 | Fully supported | |
| Work Order | Opportunity + Custom Fields1:1 | Fully supported | |
| Work Order associations (customer, company) | Opportunity (linked to People and Company)1:1 | Fully supported | |
| Quote | Opportunity1:1 | Fully supported | |
| Schedule / Dispatch | Task1:1 | Fully supported | |
| MobiWork custom object: Invoice | Custom Object: Invoice1:1 | Fully supported | |
| MobiWork custom object: Payment | Custom Object: Payment (linked to Invoice)1:1 | Fully supported | |
| MobiWork custom objects (user-defined) | Custom Object (via Twenty metadata API)1:1 | Fully supported | |
| MobiWork Owner / Technician | Twenty WorkspaceMember (user by email)1:1 | Fully supported | |
| MobiWork attachments (images, signatures, forms) | Twenty Files / Notes attachments1:1 | Fully supported | |
| MobiWork integrations (QuickBooks, Sage, Stripe, Clearent, MailChimp) | No equivalent — flagged for manual rebuild1:1 | Fully supported |
Gotchas + challenges
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 gotchas
No public API means migration is export-constrained
30-day post-cancellation export window
Tier-gated objects require plan upgrade to migrate
Integration attachments require separate handling
Annual prepayment is mandatory across all tiers
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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
MobiWork
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across MobiWork and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
MobiWork: Not publicly documented.
Data volume sensitivity
MobiWork doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during MobiWork to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave MobiWork
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.