HRMS migration

Migrate from ZenHR to Recruit CRM & ATS

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 logo

ZenHR

Source

Recruit CRM & ATS

Destination

Recruit CRM & ATS logo

Compatibility

82%

9 of 11

objects map 1:1 between ZenHR and Recruit CRM & ATS.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

ZenHR logo

ZenHR

What's pushing teams away

  • Banking information errors during onboarding prevent payroll setup from completing — some users report a month-long struggle to enter correct bank details due to validation bugs.
  • Integration depth with third-party ERP and accounting systems is shallower than advertised, requiring manual workarounds for data reconciliation between ZenHR and financial platforms.
  • The employee org-tree and vacation request modules have usability issues — reviewers describe the leave management UX as far from perfect and the hierarchy visualization as confusing.
  • Occasional technical stability issues and bugs in the platform create friction during critical payroll periods, with support response times varying widely.
  • Organizations expanding outside the MENA region find ZenHR's deep localization to specific GCC and Levant regulations becomes a limitation rather than a feature.

Choosing

Recruit CRM & ATS logo

Recruit CRM & ATS

What's pulling them in

  • Agencies choose Recruit CRM for its full customizability — pipelines, stages, and fields can be tailored to any recruitment workflow without developer involvement.
  • Small teams value the built-in CRM and ATS combined in one subscription, eliminating the need to purchase and sync separate systems.
  • The Chrome extension for one-click LinkedIn profile collection streamlines candidate sourcing and reduces manual data entry for recruiters.
  • Responsive customer support with fast issue resolution is consistently cited as a reason teams stick with the platform long-term.
  • Automation options including email sequences and workflow triggers allow recruitment agencies to reduce repetitive manual outreach tasks.

Object mapping

How ZenHR objects map to Recruit CRM & ATS

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

maps to

Recruit CRM & ATS

Candidate

1:1
Fully supported

ZenATS 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

maps to

Recruit CRM & ATS

Job

1:1
Fully supported

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

maps to

Recruit CRM & ATS

Client or Contact

1:many
Fully supported

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

maps to

Recruit CRM & ATS

Candidate (if sourced via ZenATS)

1:1
Fully supported

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

maps to

Recruit CRM & ATS

Custom Fields (per-organization)

lossy
Fully supported

ZenHR 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

maps to

Recruit CRM & ATS

Attachments

1:1
Fully supported

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

maps to

Recruit CRM & ATS

Out of scope

1:1
Fully supported

ZenHR 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

maps to

Recruit CRM & ATS

Out of scope

1:1
Mapping required

ZenHR 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

maps to

Recruit CRM & ATS

Out of scope

1:1
Fully supported

Employee 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

maps to

Recruit CRM & ATS

Out of scope

1:1
Mapping required

Branch 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

maps to

Recruit CRM & ATS

Users (manual provisioning)

1:1
Mapping required

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

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.

ZenHR logo

ZenHR gotchas

High

ZenATS candidates and SMS/email communication logs are not fully exportable via API

Medium

Custom fields are tenant-specific and require a pre-migration field audit

Medium

Attendance raw data volume can overwhelm bulk exports without pagination controls

Medium

Terminations require effective-date sequencing to preserve EOSB and leave balance calculations

Recruit CRM & ATS logo

Recruit CRM & ATS gotchas

High

API rate limits are license-scaled and can throttle bulk migration

Medium

Custom field schemas vary per organization and require field-level mapping

Medium

Files and email attachments require separate extraction and re-upload

Low

Email sequences and automation logic do not transfer between platforms

Pair-specific challenges

  • ZenATS communication bodies are not accessible via API

    ZenATS does not expose SMS and email communication body content through its standard API. Only metadata — timestamps, template names, send status — is available for migration. If the customer's recruitment process depends on candidate conversation history (e.g., for compliance audit trails, engagement reporting, or regulatory review), we recommend a manual export from ZenATS before migration. We flag this gap during scoping and migrate only communication metadata automatically. This is a silent data gap that catches many ZenHR-to-Recruit CRM migrations if not caught in discovery.

  • ZenHR custom fields require pre-migration discovery and Recruit CRM field ID resolution

    ZenHR custom fields are tenant-specific with no fixed cross-tenant schema — one organization's Employee and Candidate objects look structurally different from another's. We run a field discovery phase enumerating every active standard and custom field and their types before mapping begins. Recruit CRM's associated-fields API uses numeric field IDs rather than named field keys, which must be resolved against the specific Recruit CRM tenant before import scripts can be written. Skipping this discovery step results in null values for fields the customer expects to be populated and a failed mapping reconciliation at cutover.

  • ZenHR HCM objects have no Recruit CRM destination — dual-system strategy required

    The ZenHR to Recruit CRM migration is an ATS extraction, not a full HRMS replacement. Employees, Payroll, Timeoffs, Loans, Overtime, Attendance, Business Trips, HR Letters, and Terminations have no equivalent objects or fields in Recruit CRM. Customers exiting ZenHR entirely must select a destination HRMS in parallel. We document the ZenHR schema for HCM objects as a written inventory and advise on dual-system architecture (Recruit CRM for recruitment, a separate HRMS for HRMS data) before migration begins. Failing to make this architectural decision before cutover leaves the customer without a system of record for payroll and HR processing.

  • ZenHR term settlements and EOSB data do not map to Recruit CRM

    End-of-Service Benefit (EOSB) calculations under MENA labor law depend on termination date, years of service, and final leave balance. Terminations and Final Settlements are distinct ZenHR record types with effective-date logic. Recruit CRM has no termination record, no EOSB calculation, and no leave balance module. We migrate termination records as historical notes on the Candidate record (if the candidate was a ZenATS applicant who was offered and then terminated during onboarding) but we do not migrate EOSB calculations. We flag terminations as requiring a separate HRMS for full legal compliance under MENA labor law.

  • ZenHR banking validation errors from source data will block payroll setup in any successor system

    ZenHR users consistently report banking information validation bugs during employee onboarding — specifically, difficulty entering correct bank details due to validation issues that persist for weeks. Banking data migrated from ZenHR may carry these errors into the destination system if not cleaned during migration. We add a banking field validation step during data preparation: we check IBAN and account number formats against country-specific rules (particularly KSA SAMIR/SADAD, UAE IBAN, and Egypt NBE formats) and flag any records with invalid banking information for HR admin correction before migration. This step is not included in standard scope unless explicitly requested.

Migration approach

Six steps for a successful ZenHR to Recruit CRM & ATS data migration

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

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

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

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

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

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

Context on both ends of the pair

ZenHR logo

ZenHR

Source

Strengths

  • Purpose-built for MENA compliance with country-specific labor law, social insurance, and tax rule sets baked into payroll and employee management.
  • Bilingual platform with full English and Arabic interface, eliminating language barriers for regional HR teams and employees.
  • Cloud-native with iOS and Android mobile apps, allowing attendance clocking and leave requests from anywhere across the GCC and Levant operations.
  • Modular architecture — companies can start with Core HR and add Payroll, ATS, Performance, or Time & Attendance as they grow within the same platform.
  • Strong community and customer base in Jordan, KSA, UAE, Egypt, Lebanon, Iraq, and Kuwait with references across pharmaceuticals, logistics, government, and NGO sectors.

Weaknesses

  • Deep localization to MENA regulations makes the platform poorly suited for organizations with significant headcount outside the GCC and Levant — exporting data to global HR systems requires significant field remapping.
  • Publicly available API documentation lacks published rate limits and bulk endpoint specifications, requiring direct inquiry to ZenHR support to determine safe pagination and request pacing.
  • Pricing is opaque — no public tier breakdown; quotes are issued per-organization, making it difficult to compare migration costs without a sales conversation.
  • Limited third-party ecosystem compared to global HR platforms; integrations with NetSuite ERP and QuickBooks are available but reported as shallow by some users.
  • Banking and payroll validation errors reported in reviews suggest backend data integrity issues that can complicate automated migration of financial data.
Recruit CRM & ATS logo

Recruit CRM & ATS

Destination

Strengths

  • Fully customizable pipelines, stages, and fields without requiring developer involvement
  • Combines recruitment CRM and ATS in one subscription for staffing agencies and small teams
  • Built-in email sequences and automation reduce manual outreach work
  • Chrome extension enables one-click LinkedIn profile collection directly into the CRM
  • Responsive customer support cited across multiple reviews with fast resolution times

Weaknesses

  • Several features are gated as paid add-ons rather than included in the base subscription
  • Email functionality has been reported as unreliable by multiple users
  • Interface occasionally lags during high-activity periods in large pipelines
  • Pricing is considered higher than comparable recruitment CRMs by some customers
  • Limited native reporting — users request pre-made report exports rather than manual data pulls

Complexity grading

How hard is this migration?

Standard HRMS migration. 1 of 7 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 ZenHR and Recruit CRM & ATS.

  • Object compatibility

    B

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

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    ZenHR: Not publicly documented — requires direct inquiry to ZenHR support to determine safe request-pacing thresholds.

  • Data volume sensitivity

    B

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

Estimator

Estimate your ZenHR to Recruit CRM & ATS 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 ZenHR to Recruit CRM & ATS data migrations

Answers to the questions buyers ask most during ZenHR to Recruit CRM & ATS migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

The migratable data from ZenHR to Recruit CRM is ZenATS module data: Candidates, Vacancies (Jobs), pipeline stage history, candidate-job associations, client or company records stored in ZenHR's organizational structure, and user inventory for role mapping. Document metadata migrates alongside owning records. Communication metadata (timestamps, template names) migrates automatically; communication body content does not because ZenATS does not expose it via API. All other ZenHR HCM objects — Employees, Payroll, Timeoffs, Loans, Overtime, Attendance, Business Trips, HR Letters, Terminations — have no equivalent in Recruit CRM's schema and are out of scope for this migration.

Adjacent paths

Related migrations to explore

Ready when you are

Move from ZenHR.
Land in Recruit CRM & ATS, 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