CRM migration
Field-level mapping, validation, and rollback between Zinc and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Zinc
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
13 of 14
objects map 1:1 between Zinc and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
48–72 hours
Overview
Migrating from Zinc to Dynamics 365 Sales requires solving a non-standard data model problem: Zinc stores candidate profiles and semi-structured reference check records that have no native equivalent in Dynamics 365's entity model. FlitStack AI designs a custom Dataverse table (Background_Check__c) with fields for check type, status, result, verifier name, verification date, and a notes field for unstructured comments. We map Zinc candidates to Dynamics 365 Contacts using email as the merge key, then link each check record to its Contact via a lookup relationship. Check status values (Pending, In Progress, Complete, Failed) migrate as picklist values on the custom entity. We preserve original completion timestamps as custom datetime fields since Dynamics 365's standard CreatedDate reflects migration time, not the original check completion date. For integrations with ATS platforms that Zinc maintained (Greenhouse, BambooHR), we document those connections for manual rebuild in Dynamics 365's Power Automate flows. FlitStack uses scoped read access on Zinc and Dynamics 365's Data Export Service for the migration run, with a 24–48 hour delta window capturing any records created or updated during cutover. The entire operation is scoped read-only on both systems — your team keeps working in Zinc throughout the migration.
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.
Source platform
Zinc platform overview
Scorecard, SWOT, gotchas, and pricing for Zinc.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Zinc
Candidate
Microsoft Dynamics 365 Sales
Contact
1:1Zinc's Candidate record maps to Dynamics 365 Contact. Email is the primary identity field used for merge-key resolution against existing Dynamics 365 contacts. If a matching email exists in Dynamics 365, the records merge; otherwise a new Contact is created with a custom field preserving the Zinc Candidate ID.
Zinc
Candidate
Microsoft Dynamics 365 Sales
Lead
1:manyIf the Zinc candidate has not yet advanced to a formal hiring stage, FlitStack creates a Lead record in Dynamics 365 rather than a Contact. The split logic uses a check_status field: candidates with zero completed checks route to Lead; one or more completed checks route to Contact.
Zinc
Check / Reference Check
Microsoft Dynamics 365 Sales
Background_Check__c (custom entity)
1:1This is the primary non-standard mapping. Zinc's Check record has no native Dynamics 365 equivalent — we create a custom Dataverse table called Background_Check__c with fields for check type, status, result, verifier name, verification date, and notes. The entity lives inside a managed solution for clean promotion across Dynamics 365 environments.
Zinc
Check
Microsoft Dynamics 365 Sales
Background_Check__c (lookup to Contact)
1:1Each Background_Check__c record carries a lookup field (ContactId__c) pointing to the Dynamics 365 Contact that corresponds to the Zinc candidate. The lookup resolves after the Contact is created or matched, enforcing referential integrity. Records without a resolvable candidate email are flagged for manual review.
Zinc
Check Status
Microsoft Dynamics 365 Sales
Background_Check__c.Status__c
1:1Zinc's status picklist (Pending, In Progress, Complete, Cancelled, Failed) maps value-by-value to a custom picklist on Background_Check__c.Status__c. Each value retains its original display label from Zinc to maintain reporting continuity. Probability weights for pipeline forecasting are assigned per status value within the Dynamics 365 picklist definition, allowing sales managers to view expected close rates based on verification status.
Zinc
Check Type
Microsoft Dynamics 365 Sales
Background_Check__c.CheckType__c
1:1Zinc supports multiple check types: Employment Verification, Education Verification, Criminal Background, Reference Check, Credit Check, etc. Each type maps to a corresponding picklist value on Background_Check__c.CheckType__c. If Zinc uses a custom check type not pre-defined in our mapping table, we add it as a new picklist value during schema setup.
Zinc
Check Result
Microsoft Dynamics 365 Sales
Background_Check__c.Result__c
1:1Check results (Clear, Consider, Discrepancy, Unable to Verify, etc.) map to a custom picklist on Background_Check__c.Result__c. The value mapping preserves the result label from Zinc exactly to maintain reporting continuity. Results are stored as custom picklist fields on the Background_Check__c record and can be used in Dynamics 365 views, reports, and Power BI dashboards without requiring any transformation or re-labeling.
Zinc
Verifier Info
Microsoft Dynamics 365 Sales
Background_Check__c (verifier custom fields)
1:1Zinc stores verifier name, title, company, phone, and email. We map these to individual custom fields on Background_Check__c: VerifierName__c, VerifierTitle__c, VerifierCompany__c, VerifierPhone__c, VerifierEmail__c. Optionally, if the verifier is a known Contact in Dynamics 365, we create a secondary lookup to that Contact record.
Zinc
Check Notes / Comments
Microsoft Dynamics 365 Sales
Background_Check__c.Notes__c
1:1Zinc's free-text notes and reference comments migrate as a large-text custom field (Notes__c) on Background_Check__c. This preserves the original text verbatim. We do not parse or normalize this field because the structure is non-uniform and normalization could lose context. The field is surfaced in the Dynamics 365 form for recruiter review.
Zinc
Requester
Microsoft Dynamics 365 Sales
Background_Check__c.RequesterName__c / RequesterEmail__c
1:1Zinc tracks the requester (recruiter or hiring manager) who initiated each check. This data has no native Dynamics 365 equivalent since OwnerId maps to the Dynamics 365 user who owns the record. We preserve the Zinc requester as custom fields on Background_Check__c for audit continuity. The actual Dynamics 365 record Owner is set during migration based on the requester's email match to a Dynamics 365 user.
Zinc
ATS / HRIS Integration
Microsoft Dynamics 365 Sales
Power Automate Flow (manual rebuild)
1:1Zinc maintains OAuth integrations with ATS platforms (Greenhouse, BambooHR, Lever) that push candidate data bidirectionally. Dynamics 365 has no native ATS connector. These integrations are documented by FlitStack with the OAuth endpoints and trigger logic, then rebuilt manually as Power Automate flows or Dataverse connector apps after the migration.
Zinc
Candidate Email
Microsoft Dynamics 365 Sales
Contact.EmailAddress
1:1Email is the merge key used to match Zinc candidates to existing Dynamics 365 contacts. FlitStack applies email normalization before matching: removing periods from Gmail addresses (john.smith @ gmail.com → johnsmith @ gmail.com) per RFC 5321 to reduce false-positive duplicates.
Zinc
Candidate First Name
Microsoft Dynamics 365 Sales
Contact.FirstName
1:1Direct name field mapping from Zinc's first_name to Dynamics 365 Contact.FirstName. FirstName in Dynamics 365 has a 120-character limit, which comfortably accommodates most candidate names. If a null first name is encountered in Zinc, FlitStack preserves it as an empty string in Dynamics 365 rather than skipping the field, ensuring data completeness.
Zinc
Candidate Last Name
Microsoft Dynamics 365 Sales
Contact.LastName
1:1Direct name field mapping from Zinc's last_name to Dynamics 365 Contact.LastName. LastName is a required field in Dynamics 365, so FlitStack validates this field during the extraction phase. If Zinc returns a null or empty last name, FlitStack sets a placeholder value ('Unknown') and flags the record for manual review before finalizing the migration, ensuring no records fail validation due to missing required fields.
| Zinc | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Candidate | Contact1:1 | Fully supported | |
| Candidate | Lead1:many | Fully supported | |
| Check / Reference Check | Background_Check__c (custom entity)1:1 | Fully supported | |
| Check | Background_Check__c (lookup to Contact)1:1 | Fully supported | |
| Check Status | Background_Check__c.Status__c1:1 | Fully supported | |
| Check Type | Background_Check__c.CheckType__c1:1 | Fully supported | |
| Check Result | Background_Check__c.Result__c1:1 | Fully supported | |
| Verifier Info | Background_Check__c (verifier custom fields)1:1 | Fully supported | |
| Check Notes / Comments | Background_Check__c.Notes__c1:1 | Fully supported | |
| Requester | Background_Check__c.RequesterName__c / RequesterEmail__c1:1 | Fully supported | |
| ATS / HRIS Integration | Power Automate Flow (manual rebuild)1:1 | Fully supported | |
| Candidate Email | Contact.EmailAddress1:1 | Fully supported | |
| Candidate First Name | Contact.FirstName1:1 | Fully supported | |
| Candidate Last Name | Contact.LastName1: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
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Audit Zinc data export and design Dynamics 365 schema
FlitStack initiates a scoped read export from Zinc's API to enumerate all candidate records, check records, check types, and picklist values. We generate a data audit report covering record counts per type, null-rate analysis for required fields (email, last name), and check status distribution. Simultaneously, we design the Background_Check__c custom Dataverse table inside a managed solution, defining all fields (Status__c picklist, CheckType__c picklist, Result__c picklist, verifier fields, timestamps), setting field-level security, and creating the ContactId__c lookup relationship. This schema plan is delivered as a shareable XML solution file that your Dynamics 365 admin imports before migration validation runs.
Resolve candidate-to-contact merge keys and clean data
FlitStack extracts all candidate email addresses from Zinc and runs them against Dynamics 365's Contact table to identify existing matches. We apply email normalization (Gmail period removal, case normalization) before matching to reduce false negatives. Candidates with no matching email in Dynamics 365 are flagged for new Contact creation. Candidates with null email are flagged for manual review — these records cannot be automatically resolved and require your team to supply an email or designate them as anonymous leads. We deliver a pre-migration merge report showing which candidates will merge vs. create new contacts so your team can correct false positives before the migration run.
Migrate Contacts first, then check records with lookup resolution
FlitStack sequences the migration in dependency order: Contacts (or Leads) first, then Background_Check__c records second. The Contact migration populates all standard fields plus the Zinc_Candidate_ID__c custom field. The Background_Check__c migration then uses Zinc_Candidate_ID__c (not email) to resolve the ContactId__c lookup, ensuring that foreign-key references are valid before the records commit. If a Background_Check__c record references a Contact that failed to migrate, the check record is held in a staging table and retried after the contact is corrected. This sequencing prevents orphaned check records in Dynamics 365.
Run sample migration with field-level diff
Before the full run, FlitStack migrates a representative sample of 50–100 records spanning multiple check types and status values. We generate a field-level diff comparing the Zinc source values against the Dynamics 365 destination values for every mapped field. The diff report surfaces picklist mismatches (values not yet added to the custom picklist), truncation events on long text fields, lookup resolution failures, and any records where the email normalization produced an unexpected merge. Your team reviews and approves the diff before the full migration run commits.
Cut over with delta-pickup for in-flight checks
FlitStack executes the full migration run against Dynamics 365 using the Data Export Service or Dataverse Web API depending on record volume. A delta-pickup window (typically 24–48 hours) runs after the primary migration to capture any check records created or completed in Zinc during the cutover. The delta window uses Zinc's updated_at timestamp to pull only changed records since the migration start time. An audit log records every operation (create, update, skip, error) for reconciliation. One-click rollback reverts all records created by the migration if reconciliation reveals critical gaps.
Platform deep dives
Zinc
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Zinc and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Zinc and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Zinc and Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Zinc to Microsoft Dynamics 365 Sales 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 Microsoft Dynamics 365 Sales
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.