CRM migration
Field-level mapping, validation, and rollback between Listrak and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Listrak
Source
Twenty CRM
Destination
Compatibility
7 of 12
objects map 1:1 between Listrak and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Listrak to Twenty CRM is a cross-category migration: Listrak is a retail-focused marketing automation platform (email, SMS, MMS, push) with unified contact profiles and Journey Hub sequencing; Twenty CRM is an open-source, self-hostable CRM with People, Companies, and Opportunities as core objects, accessed via a GraphQL API at /graphql with custom objects managed through the /metadata endpoint. There is no direct object equivalence—Listrak Contacts with behavioral and channel-preference data map to Twenty People with custom fields carrying Listrak properties; Listrak Companies map to Twenty Companies; Listrak Deals map to Twenty Opportunities. Mobile Subscribers require explicit opt-in scrubbing before export per Listrak's compliance guide. We do not migrate Journey Hub automations, email templates, or analytics reports as code; we deliver a written inventory of each for your admin to 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 Listrak 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.
Listrak
Contact
Twenty CRM
Person
1:1Listrak Contacts map to Twenty People. We extract email address, full name, opt-in status, opt-in date, and lifecycle stage from Listrak's unified contact profile. Behavioral data (last click, last open, purchase history reference) migrates to custom fields on the Person record. We preserve the original opt-in timestamp in a custom field listrak_opt_in_date__c for compliance audit. The contact's email address is the dedupe key during import.
Listrak
Mobile Subscriber
Twenty CRM
Person (custom field: mobile_number__c)
1:1Listrak Mobile Subscribers map to Twenty People with a mobile_number__c custom field. Listrak requires explicit written confirmation that the export list has been scrubbed of opted-out contacts before mobile export—any opted-out contact in the file will import as active into Twenty. We validate this condition before processing mobile loads and surface any records with ambiguous opt-in status for manual review. Phone numbers must be stored as text (not numeric string) to avoid truncation of leading zeros and country codes.
Listrak
Company
Twenty CRM
Company
1:1Listrak Companies (if used) map directly to Twenty Company. We extract company name, domain, and address fields. Company name is the dedupe key; domain becomes the Website field. Listrak does not have a formal Company object for all accounts—some deployments store company data only within Contact records. We audit the Listrak account to determine whether Companies exist as separate records or as embedded contact properties and adjust the migration scope accordingly.
Listrak
Suppression List
Twenty CRM
Person (custom field: opt_out__c)
lossyListrak Suppression and Unsubscribe Lists export separately from active contacts. We load suppressions into Twenty first by setting a custom boolean field opt_out__c = true on the matching Person record, or by setting an email opt-out custom field if Twenty supports it at migration time. This prevents the platform from sending to opted-out addresses after cutover. Suppression loading must complete before any active contact import to guarantee compliance posture is intact at cutover.
Listrak
Segment (Audience)
Twenty CRM
Person (custom field: segment__c) + View
1:1Listrak Segments filter by email behavior, SMS engagement, and channel subscription status. We map these filter definitions to Twenty custom picklist fields on Person (segment_email_activity__c, segment_sms_status__c) and create corresponding Views in Twenty filtered to match each Listrak segment. Segment names migrate as picklist values; filter criteria are documented as a written mapping for the customer's admin to configure as Twenty Views post-migration.
Listrak
Custom Contact Property
Twenty CRM
Custom Field on Person or Company
1:1Listrak supports custom contact properties but not all are accessible via standard export—some fields exist only in the UI and require API enumeration to identify. We flag which custom fields appear in the Listrak API versus only in the UI and adjust the migration scope to include API-accessible fields. Fields that are UI-only are documented with a data request note for manual extraction or API script pre-migration. Custom fields in Twenty must be created in Settings → Data Model before the CSV import runs because the import creates records, not fields.
Listrak
Email Template
Twenty CRM
External (documentation only)
lossyListrak email templates export as raw HTML or must be manually rebuilt in the destination's editor. We do not import raw HTML templates into Twenty because Twenty does not have a native email template builder. We export the HTML and document the template structure (header, body, footer, CTA blocks, imagery) as a written handoff with recommendations for rebuilding in the customer's chosen email sending tool (e.g., Klaviyo, Postmark, SendGrid) that integrates with Twenty.
Listrak
Journey Automation
Twenty CRM
External (documentation only)
lossyListrak Journey Hub automations (cart abandonment, replenishment, browse recovery sequences) represent complex multi-step, multi-channel logic that does not export as a transferable object. We document the full automation tree—triggers, conditions, time delays, channel sequence (email → SMS → push), and exit criteria—for each active Journey. The customer's admin rebuilds these in their chosen automation tool post-migration. This documentation delivery is included in the migration scope; the rebuild itself is outside scope.
Listrak
Analytics Report (historical)
Twenty CRM
External (CSV archive)
lossyListrak's historical campaign performance data exports as flat CSV files on the nightly SFTP schedule. We capture the scheduled export configuration and extract all historical reports that exist before cutover. We deliver these as a named archive (campaign_history_[date].csv) rather than importing them into Twenty, which does not have a native campaign analytics object. The customer's BI team or data warehouse integrates these CSV files as needed.
Listrak
Opt-in Source (mobile attribution)
Twenty CRM
Person (custom field: acquisition_source__c)
lossyListrak tracks acquisition channel and keyword campaign sources for mobile subscribers. This attribution data may live in a separate export joined on mobile number. We extract acquisition_source__c (keyword, campaign, referrer) and preserve it as a custom field on the corresponding Person record during mobile subscriber migration. If the acquisition source export requires a separate join, we include it in the mobile migration phase and flag any unmatched records for reconciliation.
Listrak
Engagement (calls, emails, meetings, tasks)
Twenty CRM
Task or Note
1:1Listrak engagement records (calls, emails, meetings, tasks, notes) from the unified contact timeline can be mapped to Twenty Task and Note records. We link each activity to the corresponding Person record by email match. TaskSubtype = Call for call records; Task for task records; Note for freeform notes. Activity timestamps preserve the original Listrak timestamp for timeline ordering. Engagement data volume determines whether we use the Twenty GraphQL API batch endpoint or CSV import for this phase.
Listrak
Owner
Twenty CRM
WorkspaceMember
1:1Listrak Owner records (assigned contacts, campaigns, and journeys) map to Twenty WorkspaceMembers. We match by email address. Any Listrak Owner without a matching Twenty WorkspaceMember is held in a reconciliation queue—Twenty requires users to be invited and to accept their invitation before Owner lookups can be resolved during import. We flag this dependency and coordinate with the customer's admin to provision missing users before record import begins.
| Listrak | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Mobile Subscriber | Person (custom field: mobile_number__c)1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Suppression List | Person (custom field: opt_out__c)lossy | Fully supported | |
| Segment (Audience) | Person (custom field: segment__c) + View1:1 | Fully supported | |
| Custom Contact Property | Custom Field on Person or Company1:1 | Fully supported | |
| Email Template | External (documentation only)lossy | Fully supported | |
| Journey Automation | External (documentation only)lossy | Fully supported | |
| Analytics Report (historical) | External (CSV archive)lossy | Fully supported | |
| Opt-in Source (mobile attribution) | Person (custom field: acquisition_source__c)lossy | Fully supported | |
| Engagement (calls, emails, meetings, tasks) | Task or Note1:1 | Fully supported | |
| Owner | WorkspaceMember1: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.
Listrak gotchas
Auto-renewing contracts trap brands into unintended multi-year commitments
Opt-out scrubbing is mandatory before Listrak mobile export
Nightly SFTP exports use flat file format not real-time API
Email templates require rebuild rather than direct transfer
Journey automations are not portable objects in Listrak's export
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
Discovery and data audit
We audit the Listrak account across contacts (email and mobile), suppression lists, segments, active Journey automations, email template count, and historical analytics reports. We identify which custom contact properties appear in the API versus only in the UI and flag any fields requiring manual extraction. We also audit the Listrak account structure to determine whether Companies exist as separate records or are embedded in Contact properties. The discovery output is a written migration scope, a list of custom fields to pre-create in Twenty, and a Journey automation inventory form for the customer to complete.
Twenty workspace preparation
We create all custom fields in Twenty's Settings → Data Model via the /metadata API before any data import. This includes custom fields on Person (opt_in_date__c, mobile_number__c, segment__c, acquisition_source__c, opt_out__c), on Company, and any custom objects the customer requires. We also invite all WorkspaceMembers who will be referenced as Owners on migrating records and confirm their acceptance before proceeding. We configure the opt_out__c field to support suppression-first loading.
Suppression list pre-load
We load Listrak suppression and unsubscribe lists into Twenty first, setting opt_out__c = true on matching Person records or setting the email opt-out field equivalent. This phase must complete before any active contact import to guarantee that opted-out records are flagged before the system goes live. We validate that the export file has been properly scrubbed per Listrak's compliance requirements and surface any records with ambiguous opt-in status for manual customer review.
Core record migration (People and Companies)
We migrate Listrak Contacts to Twenty People and Companies in the correct dependency order. Companies load first (if they exist as separate records) so that Company lookups are resolved at Person insert. Contacts load with email as the dedupe key; existing Person records with matching emails are updated rather than duplicated. Custom field values from Listrak custom contact properties populate the pre-created custom fields on each Person record.
Mobile subscriber migration
We migrate Listrak Mobile Subscribers after core People records are loaded, joining on email address where available or on mobile number where email is not present. Phone numbers are stored as text data type to preserve country codes and leading zeros. We validate that the export file has been scrubbed of opted-out contacts before loading and flag any records with ambiguous opt-in status for manual review. Acquisition source attribution data joins on mobile number and populates the acquisition_source__c custom field.
Activity history and segment mapping
We migrate Listrak engagement records (calls, emails, meetings, tasks, notes) as Twenty Task and Note records linked to the corresponding Person by email match. Activity timestamps preserve the original Listrak timestamp. We also create Twenty Views corresponding to each Listrak segment, with filter logic documented from the Listrak segment definition. Segment membership is stored as a custom picklist field on Person.
Cutover, validation, and automation handoff
We freeze Listrak writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We deliver the Journey automation inventory document, the email template HTML export with rebuild notes, and the historical analytics CSV archive. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild Listrak Journey automations or email templates inside the migration scope; those are documented for manual rebuild in the customer's chosen automation and email tool.
Platform deep dives
Listrak
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 Listrak 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
Listrak: Not publicly documented in standard developer documentation.
Data volume sensitivity
Listrak exposes a bulk API — large-volume migrations stream efficiently.
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 Listrak to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Listrak 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 Listrak
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.