CRM migration

Migrate from Zinc to Twenty CRM

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

Zinc logo

Zinc

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between Zinc and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Zinc logo

Zinc

What's pushing teams away

  • Lack of live chat support forces users to rely on a chatbot or email, which some find inadequate for time-sensitive hiring queries.
  • Admin visibility into usage volumes — how many checks remain or have been used — is limited in the standard UI, frustrating finance and HR operations teams.
  • Custom check builder lacks an accessible backend view for some administrators, making it hard to audit or manage check usage at scale.

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

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

maps to

Twenty CRM

Person

1:1
Fully supported

Zinc 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)

maps to

Twenty CRM

Company

1:1
Fully supported

Zinc 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

maps to

Twenty CRM

Custom Object: BackgroundCheck__c

1:1
Fully supported

Zinc'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

maps to

Twenty CRM

BackgroundCheck__c.status (custom pick-list)

1:1
Fully supported

Zinc 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

maps to

Twenty CRM

BackgroundCheck__c.completed_date

1:1
Fully supported

Zinc 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

maps to

Twenty CRM

Note or Task

1:1
Fully supported

Zinc 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

maps to

Twenty CRM

Person.assigned_to (Workspace Member relation)

1:1
Fully supported

Zinc 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

maps to

Twenty CRM

Person.job_title (standard field)

1:1
Fully supported

Zinc 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

maps to

Twenty CRM

Person.source_id (custom text field)

1:1
Fully supported

FlitStack 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

maps to

Twenty CRM

Person.{custom_field_name} or BackgroundCheck__c.{custom_field_name}

1:1
Fully supported

Any 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).

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.

Zinc logo

Zinc gotchas

High

Integration settings do not migrate automatically

Medium

Custom check templates with bespoke rubrics require field-level mapping

Low

Audit logs are not accessible for export

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

  • Background-check metadata has no native Twenty object — custom object creation is required

    Zinc Work's reference_check records, check statuses, and verification outcomes are platform-specific constructs with no direct analogue in Twenty's standard People, Companies, and Opportunities schema. FlitStack creates a BackgroundCheck__c custom object in Twenty, but this requires workspace admin permissions and must be created before data import begins. Teams on Twenty's Free plan are limited to 10 custom objects; if the migration includes additional custom objects (e.g., ReferenceCheck__c, OnboardingTask__c), an upgrade to Twenty Pro or Organization may be needed before migration can proceed.

  • Zinc Free and Starter tiers block API access — CSV export is the only migration path

    Zinc's API access is gated behind paid plans. On Free and Starter tiers, the only export mechanism is manual CSV download from the Zinc UI. This limits the migration to records visible in the UI export view, typically caps exports at 10,000 rows per file, and may not include soft-deleted or archived records. FlitStack can work with manually exported CSVs, but teams should verify record counts match their expected volumes before migration planning — hidden or archived records may require separate export handling or a temporary plan upgrade to access the API.

  • Import order violations in Twenty create orphaned Person records without companyId

    Twenty's documentation explicitly requires importing Companies before People, because each Person record requires a valid companyId foreign key. If People are imported before their corresponding Company records exist in Twenty, the Person records are created with a null or empty companyId and appear unlinked in the Twenty UI. FlitStack sequences the migration as Companies → People → BackgroundCheck__c to respect Twenty's foreign-key requirements. Teams running self-serve CSV imports should follow this order manually or risk requiring a re-import to correct orphaned relationships.

  • Verification report URLs in Zinc may point to Zinc-hosted assets with no export mechanism

    Zinc Work stores completed reference check reports as hosted assets with URLs returned in the API response. These URLs are session-based or token-authenticated and may expire or become inaccessible after the candidate record is archived or the Zinc account is downgraded. FlitStack captures the report_url field during export, but teams should download or screenshot critical reports before the migration window if long-term access to the original hosted documents is required — Twenty's file storage (up to 20,000 records per export limit on Twenty's native export) does not automatically replicate external report URLs.

  • Zinc workflows and automation rules do not transfer — manual rebuild required in Twenty

    Zinc Work's automation model — triggers based on reference-check status changes, automated reminder emails to referees, and hiring-manager notification workflows — has no equivalent in Twenty CRM. Twenty's workflow builder handles date-based and field-change triggers, but the logic must be authored from scratch. FlitStack provides a structured export of Zinc workflow definitions as a reference document for the Twenty admin, but the automations themselves are not migrated data and must be rebuilt in Twenty's workflow editor.

Migration approach

Six steps for a successful Zinc to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Zinc logo

Zinc

Source

Strengths

  • Structured digital reference reports replace unstructured phone calls, producing consistent, comparable data across hires.
  • Fast turnaround from request to completed reference — multiple reviews cite 48-hour or next-day completion timelines.
  • Integration ecosystem connects to major ATS and HRIS platforms, automating request dispatch and result ingestion.
  • Configurable check templates let companies tailor questions to role level and department without rebuilding from scratch.
  • High customer satisfaction — 4.7/5 on G2 with 83% five-star ratings across 174 reviews.

Weaknesses

  • No live chat or real-time support channel — users are directed to a chatbot or email for assistance.
  • Admin and finance users have limited self-service visibility into check consumption, volume usage, and remaining quota.
  • Integration settings and webhook configurations must be manually re-established after any migration, with no automated export of these settings.
  • Custom check templates with non-standard scoring rubrics may not map cleanly to alternative reference-checking platforms.
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 Zinc 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

    Zinc: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most Zinc-to-Twenty migrations complete within 48–72 hours for teams with fewer than 25,000 candidate and company records. The longest phase is schema setup — creating the BackgroundCheck__c custom object and its pick-list fields in Twenty — which typically takes 1–2 days of planning. Record migration itself runs in hours; the delta-pickup window extends the window by 24–48 hours to capture late-arriving completed checks. Larger teams with 25,000+ records or multiple custom object types should plan for 5–10 days including validation and testing.

Adjacent paths

Related migrations to explore

Ready when you are

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