HRMS migration
Field-level mapping, validation, and rollback between ZenHR and Recruit CRM & ATS. We move data and schema; workflows are rebuilt natively in Recruit CRM & ATS.
ZenHR
Source
Recruit CRM & ATS
Destination
Compatibility
9 of 11
objects map 1:1 between ZenHR and Recruit CRM & ATS.
Complexity
BStandard
Timeline
2-4 weeks
Overview
ZenHR is an acquire-to-retire HRMS built for MENA compliance; Recruit CRM is a recruitment-agency ATS and candidate-relationship platform. The migration overlap is the ZenATS module — Candidates, Vacancies, and stage history — plus any client or company records stored in ZenHR's organizational structure. The core challenge is that ZenHR's HCM objects (Employees, Payroll runs, Timeoff balances, Loans, Overtime, Attendance, Business Trips, HR Letters, Terminations) have no equivalent data model in Recruit CRM, which is scoped to the recruitment pipeline. We scope this migration as an ATS extraction with a dual-system recommendation for customers who still need payroll and HR processing. We preserve ZenATS communication metadata (timestamps, template names) and flag the silent gap where email and SMS bodies are not exposed via ZenHR's API. Workflows, sequences, and automations do not migrate; we deliver a written inventory for the customer's admin to rebuild in Recruit CRM.
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 ZenHR object lands in Recruit CRM & ATS, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
ZenHR
ZenATS Candidate
Recruit CRM & ATS
Candidate
1:1ZenATS Candidate records map to Recruit CRM Candidate records preserving full name, email, phone, LinkedIn URL, source channel, and pipeline stage history. The original vacancy assignment migrates as a candidate-job association via Recruit CRM's associated-fields API. A critical gap: ZenATS does not expose SMS and email communication body content via its standard API — only metadata (timestamps, template names) is available. We flag this during scoping and recommend a manual ZenATS export of communication logs if full candidate conversation history is required. Candidate status (active, hired, rejected, withdrawn) maps to Recruit CRM's candidate stage or custom status field.
ZenHR
ZenATS Vacancy
Recruit CRM & ATS
Job
1:1ZenATS Vacancy records map to Recruit CRM Job records. Job title, description, requirements, employment type, salary range (min/max), and location migrate as standard Job fields. Vacancy status (open, paused, closed) maps to Job status. Any vacancy-specific custom fields configured in ZenHR require pre-configuration of matching custom fields in Recruit CRM using their associated-fields API (POST /v1/candidates/associated-field/{candidate}/{job}) and then population via field ID and value pairs. Vacancy stage history (pipeline progression) migrates as a written stage-log or as notes on the Job record if the customer's recruiting process depends on historical stage attribution.
ZenHR
Company (ZenATS organizational unit)
Recruit CRM & ATS
Client or Contact
1:manyZenHR's organizational structure — branches and company-level records — does not map directly to a single Recruit CRM object. We assess whether the ZenHR company records represent recruitment clients (external organizations the agency places into) or internal organizational units. For client records, we map to Recruit CRM Client with company name, website, industry, and address. For internal branches or divisions, we assess whether to create a Recruit CRM Company record or a Client record, depending on the customer's business model. This decision is made during scoping based on data inventory.
ZenHR
Employee
Recruit CRM & ATS
Candidate (if sourced via ZenATS)
1:1ZenHR Employees who were sourced through ZenATS can be migrated as Recruit CRM Candidate records, carrying their name, email, phone, and any hiring-stage data from the original ZenATS pipeline. However, the full ZenHR Employee record — personal details, financial information, payroll data, bank account, organizational assignment, emergency contacts — has no equivalent in Recruit CRM's schema. For customers exiting ZenHR entirely (not just extracting ZenATS data), we recommend a parallel engagement to select and migrate to a destination HRMS (e.g., BambooHR, Personio, Workday) that holds the HCM scope. We flag this scope gap in the initial discovery call and do not attempt to map payroll, banking, or HR-sensitive fields to Recruit CRM.
ZenHR
Custom Fields (per-tenant)
Recruit CRM & ATS
Custom Fields (per-organization)
lossyZenHR custom fields are tenant-specific and vary across every install — there is no fixed schema. We run a field discovery phase against the source ZenHR tenant before mapping begins, enumerating every active standard and custom field, their data types, and mandatory/optional flags. We then design the Recruit CRM equivalent: standard fields take priority, and remaining custom fields are mapped to Recruit CRM's associated-fields structure using field IDs and typed values. ZenHR multi-select or checkbox custom fields map to Recruit CRM multi-value associated fields. This configuration phase happens before any production migration and is validated in a test import before full cutover.
ZenHR
Documents
Recruit CRM & ATS
Attachments
1:1ZenHR Document records attach to Employee objects (contracts, IDs, certifications, offer letters) and carry metadata including document type, expiry date, upload timestamp, and e-signature status. We migrate document metadata alongside the owning Employee record. Binary file transfer is scoped separately — we can transfer files via ZenHR's document storage API where accessible and map them as attachments to the corresponding Recruit CRM Candidate or Client record. Documents without a migratable owning record (e.g., HR letter templates with no associated candidate) are noted as requiring manual re-upload post-migration.
ZenHR
Timeoff (Leave Requests and Balances)
Recruit CRM & ATS
Out of scope
1:1ZenHR Timeoff records — including leave balances, accrual transactions, request history, and pending requests — have no equivalent data model in Recruit CRM. Recruit CRM has no leave management, absence tracking, or balance-calculation module. We flag this as an out-of-scope object and advise that customers migrating away from ZenHR entirely should select a dedicated HRMS as the destination for timeoff data. If the customer is running ZenHR alongside a separate HRMS, we document the timeoff field mapping as a separate migration scope. Pending leave requests at cutover are flagged for manual resolution by the customer's HR admin before migration freeze.
ZenHR
Payroll / Financial Transactions
Recruit CRM & ATS
Out of scope
1:1ZenHR Payroll runs and off-cycle financial transactions (salary payments, deductions, social insurance contributions, tax withholdings) are out of scope for Recruit CRM migration. Recruit CRM is an ATS and candidate CRM with no payroll module and no financial transaction data model. We document the payroll field structure during discovery as a written schema map for the customer's finance and HR team to use when selecting a payroll destination platform. Customers exiting ZenHR for payroll replacement should evaluate platforms such as Deel, Remote, Rippling, or a region-appropriate payroll provider.
ZenHR
Loans and Overtime
Recruit CRM & ATS
Out of scope
1:1Employee Loans (principal, remaining balance, repayment schedules tied to payroll deductions) and Overtime records (hours, types, rates) are ZenHR HCM objects with no Recruit CRM equivalent. These migrate as written schema inventories for the customer's HR admin to reconstruct in a destination payroll or HRMS. The loan and overtime data is flagged as historical financial records requiring separate payroll system migration scope.
ZenHR
Work Shifts and Attendance Details
Recruit CRM & ATS
Out of scope
1:1Branch Employee Shifts and Attendance Details (clock-in/clock-out events) generate high-volume granular records that ZenHR's API paginates via cursor-based iteration. Recruit CRM has no attendance tracking module. We scope attendance data as out of scope and recommend migrating only active shift assignment metadata (current branch, current shift schedule) as reference notes on the Employee record if a separate HRMS is the destination. Historical attendance summaries migrate as a written report rather than transactional records if the customer's replacement payroll system recalculates attendance from scratch.
ZenHR
Users and Roles
Recruit CRM & ATS
Users (manual provisioning)
1:1ZenHR Users are distinct from Employees — a person can have system login access without being a full Employee record. We extract all ZenHR User accounts with their assigned roles and email addresses. Recruit CRM User provisioning is separate from Candidate records; we provide a written user-role matrix mapping ZenHR roles to Recruit CRM role configurations (Teams and Custom Roles are available on the Business tier). The customer's Recruit CRM admin provisions users directly using the provided matrix. We do not create Recruit CRM user accounts via API without explicit admin credentials and permission.
| ZenHR | Recruit CRM & ATS | Compatibility | |
|---|---|---|---|
| ZenATS Candidate | Candidate1:1 | Fully supported | |
| ZenATS Vacancy | Job1:1 | Fully supported | |
| Company (ZenATS organizational unit) | Client or Contact1:many | Fully supported | |
| Employee | Candidate (if sourced via ZenATS)1:1 | Fully supported | |
| Custom Fields (per-tenant) | Custom Fields (per-organization)lossy | Fully supported | |
| Documents | Attachments1:1 | Fully supported | |
| Timeoff (Leave Requests and Balances) | Out of scope1:1 | Fully supported | |
| Payroll / Financial Transactions | Out of scope1:1 | Mapping required | |
| Loans and Overtime | Out of scope1:1 | Fully supported | |
| Work Shifts and Attendance Details | Out of scope1:1 | Mapping required | |
| Users and Roles | Users (manual provisioning)1:1 | Mapping required |
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.
ZenHR gotchas
ZenATS candidates and SMS/email communication logs are not fully exportable via API
Custom fields are tenant-specific and require a pre-migration field audit
Attendance raw data volume can overwhelm bulk exports without pagination controls
Terminations require effective-date sequencing to preserve EOSB and leave balance calculations
Recruit CRM & ATS gotchas
API rate limits are license-scaled and can throttle bulk migration
Custom field schemas vary per organization and require field-level mapping
Files and email attachments require separate extraction and re-upload
Email sequences and automation logic do not transfer between platforms
Pair-specific challenges
Migration approach
Discovery and scope definition
We audit the source ZenHR tenant with a specific focus on ZenATS module usage: active and historical Candidates, Vacancies, pipeline stages, client and company records, and communication log metadata. We enumerate ZenHR custom fields via API field discovery, assess the volume of binary document attachments, and inventory the ZenHR HCM objects (Employees, Payroll, Timeoffs, Loans, Attendance) that will have no Recruit CRM destination. We deliver a written scoping document distinguishing ATS migratable data from HCM data requiring a separate destination system, with a dual-system architecture recommendation for customers who need both platforms post-migration.
Recruit CRM tenant setup and field pre-configuration
We configure the destination Recruit CRM tenant before any data moves: we create any required custom fields for Candidates and Jobs using the Recruit CRM associated-fields API, resolve numeric field IDs for the migration scripts, configure job categories and status values, and assess whether ZenHR company records map to Recruit CRM Client or Contact objects based on the customer's business model. We validate that the migration user's Recruit CRM account has sufficient permissions (API access requires Business or Enterprise tier) for bulk write operations.
Data preparation and cleaning
We run data cleaning across the ZenHR export: deduplication of candidate records by email, normalization of phone number formats, validation of email addresses, and resolution of ZenHR branch and department IDs to human-readable values. We validate banking information against country-specific IBAN and account number formats (particularly KSA, UAE, and Egypt) and flag any records with validation errors for the customer's HR admin to correct before migration. Communication metadata is extracted as a structured JSON object separate from the main record import. Any ZenATS communication body export performed manually by the customer is ingested at this stage.
Sandbox test migration and mapping validation
We run a full test migration into a Recruit CRM sandbox or staging environment using production data volume. We validate record counts at each object level (Vacancies/Jobs in, Candidates in, Clients/Companies in), spot-check 25-50 candidate records against the ZenHR source for field-level accuracy, and confirm that associated-fields custom values populate correctly on candidate-job relationships. The customer's recruitment operations lead reviews the sandbox and signs off on mapping accuracy before production migration begins. Any field mapping corrections happen here, not in production.
Production migration in dependency order
We freeze ZenHR for writes during the cutover window and run the production migration in record dependency order: Job/Vacancy records first (as they are referenced by candidate associations), then Candidate records with their associated-field values, then Client and Company records, then user provisioning inventory. Document metadata migrates alongside candidate records where the owning record exists in Recruit CRM. We use Recruit CRM's REST API with batched writes and exponential backoff on rate-limit responses. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We perform a final delta migration of any records modified during the cutover window, then enable Recruit CRM as the system of record for recruitment operations. We validate candidate count, job count, and stage distribution against the ZenHR source. We deliver a written ZenHR Automation and Workflow inventory documenting any ZenATS workflows, hiring pipelines, or automated candidate routing that requires rebuild in Recruit CRM's email sequencing or workflow tools. We do not rebuild ZenHR workflows as Recruit CRM sequences inside the migration scope; that is a separate engagement or an internal admin task. We support a five-business-day hypercare window for reconciliation issues raised by the customer's recruiting team.
Platform deep dives
ZenHR
Source
Strengths
Weaknesses
Recruit CRM & ATS
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 1 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across ZenHR and Recruit CRM & ATS.
Object compatibility
1 of 7 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
7-object category — typical timelines run 2–7 days end-to-end.
API constraints
ZenHR: Not publicly documented — requires direct inquiry to ZenHR support to determine safe request-pacing thresholds.
Data volume sensitivity
ZenHR 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 ZenHR to Recruit CRM & ATS migration scoping. Not seeing yours? Book a call.
Walk through your ZenHR to Recruit CRM & ATS migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave ZenHR
Other ways to arrive at Recruit CRM & ATS
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.