CRM migration
Field-level mapping, validation, and rollback between Successware and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Successware
Source
Twenty CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Successware and Twenty CRM.
Complexity
BStandard
Timeline
3–10 business days
Overview
Successware is a cloud-hosted business management system built for home-services companies (HVAC, plumbing, electrical, roofing). It combines CRM, job booking, field dispatch, and accounting in one platform. Its data lives in a proprietary database (BAK/MDB exports), organized around Customers, Relations, Jobs, Invoices, and PriceBook items. Successware has no public REST API for direct export — data extraction relies on backup files, A/R Aging Reports in XLSX, and Successware's own export utilities. Twenty CRM is a modern, open-source CRM (TypeScript/React/NestJS/PostgreSQL) with standard objects for People, Companies, Opportunities, Tasks, and Notes. It uses a REST and GraphQL API, CSV bulk import via the Command Menu, and supports unlimited custom objects at every pricing tier. Twenty's data model is relational: Companies must exist before People can reference them via companyId, and Opportunities link to both Companies and People. FlitStack AI extracts from Successware's backup and export files, normalizes proprietary formats (multi-line address parsing, technician email resolution), and loads into Twenty via the Twenty API or CSV import. We map Successware's Customers and Relations to Twenty People, Jobs to Opportunities with custom fields for service type and job status, and Invoices to a custom Invoice object. Workflows, automations, and accounting modules do not migrate — we export definitions for manual rebuild in Twenty's workflow builder.
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 Successware 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.
Successware
Customer / Relation
Twenty CRM
People
many:1Successware separates Customers (billing clients) from Relations (additional contacts at the same account). FlitStack AI merges both into Twenty People records, flagging the primary contact as the first record created and attaching subsequent contacts to the same companyId. Email address serves as the deduplication key.
Successware
Customer / Relation Address
Twenty CRM
People (address fields)
1:1Successware stores a single multi-line address string with no standardized format. FlitStack AI parses this into street, city, state, and postal code fields matching Twenty's address structure before import. The parsing logic handles common delimiters like commas and newlines, and flags anomalies. Parsing errors are flagged per record for manual correction before the full migration runs.
Successware
Company
Twenty CRM
Company
1:1Successware Company records map directly to Twenty Companies. Company name, domain/website, industry, and employee count translate 1:1. Successware's parent-company hierarchy maps to the Twenty company link field — the parent company must be migrated first to avoid orphaned child records.
Successware
Job
Twenty CRM
Opportunity
1:1Successware Jobs are the core operational record in the home-services context. They map to Twenty Opportunities, but Successware job fields (service type, job status, equipment, technician) have no native Twenty equivalents and are stored as custom Opportunity fields. The original job number is preserved as a custom reference ID for reconciliation.
Successware
Job Status (Open / Scheduled / In Progress / Completed / Invoiced)
Twenty CRM
Opportunity (custom pick-list field: SW_Job_Status__c)
1:1Successware job status values do not map to any standard CRM pipeline stage. Each value requires a custom pick-list option in Twenty's Opportunity object. FlitStack AI creates SW_Job_Status__c with Successware's exact status vocabulary preserved. Teams choose whether to align these with Twenty pipeline stages or keep them as a separate read-only reference field.
Successware
Service Type / Department / Skill
Twenty CRM
Opportunity (custom text/select field: SW_Service_Type__c)
1:1Successware records service type, department, and skill as structured pick-lists in the Job object. These map to a SW_Service_Type__c custom field on Twenty Opportunities. Field creation in Settings → Data Model must precede the CSV import, or the import will reject records referencing undefined pick-list values.
Successware
Employee / Technician (owner)
Twenty CRM
Workspace Member (via email match)
1:1Successware assigns jobs to Employees by internal ID. FlitStack AI resolves the assigned employee by matching their email address (extracted from Successware's employee records) to Twenty Workspace Members. All owners must be invited to Twenty and accept their invitations before the migration runs — otherwise records land under a fallback owner and are flagged for reassignment.
Successware
Invoice / A/R Aging
Twenty CRM
Custom object: SW_Invoice__c
1:1Successware invoices (Quick Entry and Cost Plus types) have no equivalent in Twenty's standard data model. FlitStack AI creates a custom SW_Invoice__c object with fields for invoice number, status, total amount, billing address, and the linked Opportunity ID. A/R aging data from Successware's XLSX export is appended as a separate dataset under the same custom object.
Successware
Job Notes / Call / Email / Meeting
Twenty CRM
Note / Task
1:1Successware's note records attached to jobs migrate as Twenty Notes linked to the corresponding Opportunity. Timestamps and author information are preserved during the migration. Plain-text conversion is applied to any rich-text formatting in Successware notes. Inline images are not preserved in the migration, but the text content transfers completely. Attachments are noted in the reconciliation report for manual follow-up.
Successware
Custom Modules (Successware extensions beyond standard CRM)
Twenty CRM
Custom Objects
1:1Successware allows modules beyond the core CRM (Industry-specific tools, custom property sets). FlitStack AI audits these during the data audit phase, creates matching custom objects in Twenty via Settings → Data Model, and maps each module's fields individually. N:N relationships in Successware may require junction objects in Twenty's relational model.
Successware
PriceBook Item
Twenty CRM
Custom Object: SW_PriceBook__c
1:1Successware's PriceBook stores labor rates, part prices, and service codes used in invoicing. These map to a SW_PriceBook__c custom object in Twenty. Since Twenty has no native pricebook, FlitStack AI creates a reference table that can be queried via the Twenty API or maintained manually.
Successware
Successware System ID
Twenty CRM
Custom field: SW_Source_ID__c (on all objects)
1:1Successware's internal record IDs are stored as SW_Source_ID__c on every migrated object. This field enables delta-run de-duplication (if the same record is exported twice), supports rollback identification, and allows users to cross-reference records back to the original Successware backup for audit purposes.
| Successware | Twenty CRM | Compatibility | |
|---|---|---|---|
| Customer / Relation | Peoplemany:1 | Fully supported | |
| Customer / Relation Address | People (address fields)1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Job | Opportunity1:1 | Fully supported | |
| Job Status (Open / Scheduled / In Progress / Completed / Invoiced) | Opportunity (custom pick-list field: SW_Job_Status__c)1:1 | Fully supported | |
| Service Type / Department / Skill | Opportunity (custom text/select field: SW_Service_Type__c)1:1 | Fully supported | |
| Employee / Technician (owner) | Workspace Member (via email match)1:1 | Fully supported | |
| Invoice / A/R Aging | Custom object: SW_Invoice__c1:1 | Fully supported | |
| Job Notes / Call / Email / Meeting | Note / Task1:1 | Fully supported | |
| Custom Modules (Successware extensions beyond standard CRM) | Custom Objects1:1 | Mapping required | |
| PriceBook Item | Custom Object: SW_PriceBook__c1:1 | Fully supported | |
| Successware System ID | Custom field: SW_Source_ID__c (on all objects)1: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.
Successware gotchas
No bulk job close — jobs must be closed one at a time
No public API — migration depends on vendor-assisted exports
A/R Aging data is a separate export from invoices
Legacy SuccessWare (photography) product shares the name
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
Extract and audit Successware data
FlitStack AI begins every Successware migration by requesting the data export through Successware Customer Support (for cloud-hosted instances) or by accessing backup files directly. We extract all Customers, Relations, Companies, Jobs, Invoices, Employees, and PriceBook records. We audit the data for completeness, identify multi-line address fields requiring parsing, inventory all custom pick-list values (especially job status and service type), and assess the volume of records per object. This phase produces a data inventory document that drives the migration plan and identifies any objects that require custom object creation in Twenty before import runs.
Prepare Twenty workspace: custom objects, fields, and workspace members
Before any data lands in Twenty, we create the target schema. This means creating custom objects (SW_Invoice__c, SW_PriceBook__c) in Settings → Data Model, adding custom fields to the Opportunity object (SW_Job_Status__c, SW_Service_Type__c, SW_Scheduled_Date__c, SW_Equipment_Type__c, SW_Technician_Email__c, SW_Problem_Description__c, SW_Resolution_Notes__c), and pre-populating pick-list values with Successware's exact vocabulary. Simultaneously, we provide a roster CSV of all Successware employee emails for the Twenty admin to invite as Workspace Members. All invites must be accepted before the owner resolution step — this is a hard dependency documented in Twenty's migration guide.
Transform and parse Successware data for Twenty import format
FlitStack AI transforms Successware's proprietary data into Twenty's import schema. The key transformation work includes: parsing multi-line address strings into addressStreet, addressCity, addressState, and addressPostcode components; resolving technician IDs to email addresses extracted from Successware employee records; mapping Successware's job status values to the SW_Job_Status__c pick-list created in Step 2; mapping invoice records into the SW_Invoice__c custom object and linking them to Opportunities by the original job ID; and preserving Successware system IDs as SW_Source_ID__c on every record. Records with transformation errors are flagged in a pre-migration error report for manual resolution before the import runs.
Run sample migration with field-level diff
FlitStack AI executes a sample migration using a representative slice of records — typically 100–500 covering a range of job statuses, service types, and technician assignments. We validate that address parsing is accurate across all address formats present in the dataset, confirm that SW_Job_Status__c pick-list values match Successware vocabulary exactly, verify owner resolution (technician email → Twenty Workspace Member), and check that SW_Invoice__c records link correctly to their parent Opportunities. A field-level diff report is delivered before the full migration commits, allowing the team to approve or adjust the mapping.
Execute full migration and delta pickup
After sample migration sign-off, FlitStack AI runs the full migration. For large datasets (over 20,000 records), we use the Twenty REST or GraphQL API directly rather than the CSV import UI to bypass the 20,000-record per-import limit and handle relationship linking programmatically. A delta-pickup window (24–48 hours) captures any records created or modified in Successware during the cutover. Audit logs are maintained throughout. One-click rollback is available if the reconciliation check reveals data integrity issues. We deliver a post-migration reconciliation report showing record counts per object, owner mapping success rate, and any records that landed under the fallback owner.
Deliver rebuild reference documentation for Successware automations and workflows
Successware workflows, job-scheduling rules, and automation sequences do not migrate — they must be rebuilt. FlitStack AI exports Successware's workflow definitions as a reference document that maps each automation's trigger, conditions, and actions to Twenty's workflow builder equivalents. The document covers: job status change triggers, technician assignment rules, notification actions, and any conditional routing logic. For job scheduling specifically, we document the Successware scheduling criteria so the team can re-implement routing in a third-party scheduling tool or via Twenty's API. This documentation is delivered alongside the migration report and is not included in the standard migration price.
Platform deep dives
Successware
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 Successware 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
Successware: Not publicly documented.
Data volume sensitivity
Successware 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 Successware to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Successware 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 Successware
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.