CRM migration
Field-level mapping, validation, and rollback between Zinc and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Zinc
Source
Twenty CRM
Destination
Compatibility
10 of 10
objects map 1:1 between Zinc and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Zinc Work is an automated referencing toolkit built around candidate records, reference checks, and verification statuses — a data model optimized for HR background workflows rather than ongoing sales relationship tracking. Twenty CRM uses a relational schema centered on People, Companies, Opportunities, Notes, and Tasks, with a custom-object layer that supports arbitrary data structures. FlitStack AI migrates every contact and company record Zinc Work exports, maps reference-check and verification metadata into Twenty custom objects or custom fields, and resolves owner assignments by email match against Twenty workspace members. Activities logged in Zinc (check completion dates, reference submission events) transfer as Note or Task records linked to the corresponding Person. Workflows and automation logic in Zinc Work do not have a Twenty equivalent and must be rebuilt using Twenty's workflow builder or its REST & GraphQL API. The migration runs via CSV export from Zinc's API (available on paid plans) or manual download, followed by FlitStack's import pipeline into Twenty — sequencing Companies first, then People with foreign-key resolution to the companyId, then custom objects last to respect Twenty's import-order requirements.
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 Zinc 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.
Zinc
Candidate
Twenty CRM
Person
1:1Zinc Work candidates map directly to Twenty People records. Every candidate field (name, email, phone, job_title, company_name) transfers as a corresponding field on the Person object. The candidate's email is used as the unique identifier for de-duplication and as the relation key for resolving the companyId lookup.
Zinc
Company (from candidate's employer)
Twenty CRM
Company
1:1Zinc stores the candidate's employer as a text field on the candidate record. FlitStack extracts unique employer names, creates a Company record in Twenty for each distinct employer, then back-fills the companyId on each Person record. Employer size, industry, and domain are enriched from the candidate record where available.
Zinc
Reference Check
Twenty CRM
Custom Object: BackgroundCheck__c
1:1Zinc's reference_check records have no equivalent in Twenty's standard objects. FlitStack creates a BackgroundCheck__c custom object in Twenty with fields for check_type, status, referee_name, referee_email, completed_date, and report_url. Each BackgroundCheck__c record links to the corresponding Person record via a relation field, preserving the candidate-to-check relationship.
Zinc
Reference Check Status
Twenty CRM
BackgroundCheck__c.status (custom pick-list)
1:1Zinc statuses (pending, in_progress, completed, flagged) map to a custom pick-list field on BackgroundCheck__c. FlitStack creates the pick-list in Twenty's data model settings using Zinc's exact status values as pick-list options. This direct value mapping ensures no data is lost during translation and reporting filters remain consistent after migration, since the status labels match exactly what existed in Zinc.
Zinc
Check Completion Date
Twenty CRM
BackgroundCheck__c.completed_date
1:1Zinc stores completed_date as a timestamp on reference_check records. This transfers as a Date field on BackgroundCheck__c in Twenty. Original completed_date values are preserved in the BackgroundCheck__c.completed_date__c field for reporting continuity, even though Twenty's standard created_at timestamp will reflect the migration import date rather than the original check completion date.
Zinc
Reference Submission Event
Twenty CRM
Note or Task
1:1Zinc logs reference submission events as timeline entries. FlitStack converts these to either Note records (for narrative-style events) or Task records (for action items like 'reference follow-up needed'), linked to the Person record. Original event timestamps are stored in a custom datetime field on the Note or Task.
Zinc
Candidate Owner / Requester
Twenty CRM
Person.assigned_to (Workspace Member relation)
1:1Zinc assigns a hiring team member (the requester) to each candidate. FlitStack resolves the requester by email against Twenty workspace members. Unmatched requesters are flagged and can be assigned to a fallback workspace member or left as a text field on the Person record.
Zinc
Job Position / Role
Twenty CRM
Person.job_title (standard field)
1:1Zinc stores the job role being checked as role_title on the candidate record. This maps directly to Twenty's standard job_title field on the Person object without any transformation required. The role_title value transfers as-is to job_title, maintaining consistency between the source and destination systems for role-based reporting and filtering in Twenty.
Zinc
Zinc Source System ID
Twenty CRM
Person.source_id (custom text field)
1:1FlitStack stores Zinc's internal candidate ID as a custom text field (source_id__c) on each Person record in Twenty. This field enables delta-run de-duplication if the migration runs incrementally, preventing duplicate records when comparing against future Zinc exports. It also provides full traceability back to the source system for audit purposes and customer support inquiries.
Zinc
Custom Candidate Properties
Twenty CRM
Person.{custom_field_name} or BackgroundCheck__c.{custom_field_name}
1:1Any Zinc custom properties on the candidate object that don't match standard Twenty Person fields are created as custom fields on Person or on BackgroundCheck__c depending on whether they relate to the candidate's identity or the reference-check process. Custom field data types are matched to Twenty's supported types (text, number, date, select, multi-select, relation).
| Zinc | Twenty CRM | Compatibility | |
|---|---|---|---|
| Candidate | Person1:1 | Fully supported | |
| Company (from candidate's employer) | Company1:1 | Fully supported | |
| Reference Check | Custom Object: BackgroundCheck__c1:1 | Fully supported | |
| Reference Check Status | BackgroundCheck__c.status (custom pick-list)1:1 | Fully supported | |
| Check Completion Date | BackgroundCheck__c.completed_date1:1 | Fully supported | |
| Reference Submission Event | Note or Task1:1 | Fully supported | |
| Candidate Owner / Requester | Person.assigned_to (Workspace Member relation)1:1 | Fully supported | |
| Job Position / Role | Person.job_title (standard field)1:1 | Fully supported | |
| Zinc Source System ID | Person.source_id (custom text field)1:1 | Fully supported | |
| Custom Candidate Properties | Person.{custom_field_name} or BackgroundCheck__c.{custom_field_name}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.
Zinc gotchas
Integration settings do not migrate automatically
Custom check templates with bespoke rubrics require field-level mapping
Audit logs are not accessible for 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
Audit Zinc data export and assess API vs. CSV export path
FlitStack determines whether the Zinc account is on a paid plan with API access or requires manual CSV export from the UI. We verify record counts across candidates, companies, reference checks, and timeline events against what the export delivers. If the account is on Free or Starter tier, we coordinate with the team to download CSV files covering all relevant objects. Any records excluded from the export (archived, soft-deleted) are flagged as out-of-scope before migration planning proceeds.
Design Twenty schema: custom objects, fields, pick-lists, and relations
Before any data moves, FlitStack creates the BackgroundCheck__c custom object in Twenty with fields matching Zinc's reference_check schema: check_type__c (pick-list), status__c (pick-list), referee_name__c, referee_email__c, completed_date__c, and report_url__c. We also add source_id__c custom text fields on Person and Company for traceability, and original_created_at__c / original_updated_at__c datetime fields where preservation of source timestamps is required for reporting continuity. This schema preparation ensures all field types are correctly defined before import begins.
Resolve companies and create Company records in Twenty
FlitStack extracts unique employer names from Zinc candidate records, deduplicates them, and creates a Company record in Twenty for each distinct employer. If a company domain is present in Zinc, it populates the domain field on the Twenty Company record. This step runs first because Person records require a valid companyId foreign key — creating Companies before People ensures no Person records land as orphans.
Migrate People records with companyId resolution and owner matching
With Companies in place, FlitStack imports Person records from Zinc, resolving each person's companyId by matching the employer name to the newly created Twenty Company. The assigned_to field is resolved by email match against Twenty workspace members. Each Person record receives the source_id__c custom field containing Zinc's internal candidate ID for delta-run de-duplication. Records with unmapped companyId are flagged for manual review before the full migration commits.
Run sample migration with field-level diff and verification
A representative sample — typically 100–500 records spanning candidates across multiple employers, reference checks at various statuses, and timeline events — migrates first. FlitStack generates a field-level diff comparing source values against Twenty field values for every mapped column. The team reviews BackgroundCheck__c record linkage, status pick-list accuracy, completed_date preservation, and companyId resolution before the full run is authorized. Any discrepancies identified during sample validation are corrected in the migration scripts before the bulk import proceeds.
Execute full migration with delta-pickup and rollback plan
The full migration runs against Twenty, importing Companies, then People, then BackgroundCheck__c records with relation resolution to Person. A delta-pickup window (24–48 hours) captures any records created or updated in Zinc during the cutover window. FlitStack maintains an audit log of every imported record. If reconciliation fails, one-click rollback reverts Twenty to its pre-migration state so the team can re-run after correcting the root cause.
Platform deep dives
Zinc
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 Zinc 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
Zinc: Not publicly documented.
Data volume sensitivity
Zinc 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 Zinc to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Zinc 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 Zinc
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.