HRMS migration

Migrate from ZenHR to Bullhorn ATS & CRM

Field-level mapping, validation, and rollback between ZenHR and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.

ZenHR logo

ZenHR

Source

Bullhorn ATS & CRM

Destination

Bullhorn ATS & CRM logo

Compatibility

54%

7 of 13

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

Complexity

BStandard

Timeline

3-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from ZenHR to Bullhorn is a cross-category migration from a full-lifecycle MENA HRMS to a staffing and recruitment ATS. ZenHR holds the complete Acquire-to-Retire employee record: personal information, employment contracts, payroll runs, timeoff balances, loans, overtime, organizational structure, and termination settlements. Bullhorn holds Candidates, Corporations, Jobs, Placements, and Activities with an ATS/CRM data model. There is no direct one-to-one object correspondence — Employees map to Candidates, ZenHR's organizational branches map to Bullhorn Corporations, and financial records (payroll, loans, overtime) have no native Bullhorn home and require custom fields, notes, or a parallel payroll system to receive them. We audit the ZenHR tenant's active custom fields before mapping, sequence the migration in dependency order starting with Corporation records, and deliver a written inventory of Bullhorn automations, workflows, and reporting requirements for the customer's admin to rebuild post-migration.

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

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

What's pulling them in

  • Agencies choose Bullhorn because it combines ATS and CRM in one platform, eliminating the need to switch between separate tools for candidate management and client relationship tracking.
  • The resume parser extracts contact details, work history, and skills into structured, searchable candidate profiles automatically without manual data entry, reportedly driving 24% more placements per recruiter.
  • Bullhorn's placement and split-billing model natively supports contract staffing workflows, handling start/end dates, overtime rules, and multi-party pay/charge rates in a single record.
  • The platform offers extensive third-party integrations through its Recruitment Cloud Marketplace, connecting with back-office, onboarding, and payroll systems used by staffing agencies.
  • 72% of Bullhorn customers are teams with fewer than 10 users, and Bullhorn's implementation team handles setup and data migration for small agencies going live within weeks.

Object mapping

How ZenHR objects map to Bullhorn ATS & CRM

Each row shows how a ZenHR object lands in Bullhorn ATS & CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

ZenHR

Employee

maps to

Bullhorn ATS & CRM

Candidate

1:1
Fully supported

ZenHR Employee records map to Bullhorn Candidate. The ZenHR Personal section (name, date of birth, nationality, address, contact details) maps to Bullhorn Candidate fields (firstName, lastName, email, phone, address). The Professional section (job title, department, employment type, start date) maps to Candidate custom fields or standard fields depending on the customer's field inventory. The Financial section (salary, bank details) has no native Bullhorn home and is migrated as Bullhorn custom fields on the Candidate record. We discover all active ZenHR custom fields during the pre-migration audit and pre-create the corresponding Bullhorn custom fields before import begins.

ZenHR

Employee Financial Information

maps to

Bullhorn ATS & CRM

Candidate Custom Fields or Note

lossy
Fully supported

ZenHR's Financial section (salary components, bank details, payment frequency) cannot map to a native Bullhorn object because Bullhorn has no payroll engine. We migrate salary bands, compensation type, and bank information as Bullhorn Candidate custom fields (up to 55 per custom object). If the customer requires full payroll history, we flag that Bullhorn Back Office is the correct destination and migrate payroll data as a written data dictionary alongside the migration rather than inside it.

ZenHR

Branch

maps to

Bullhorn ATS & CRM

Corporation

1:1
Fully supported

ZenHR Branches map to Bullhorn Corporations. Each Branch's name, location, and department structure map to Corporation name, address, and Corporate Departments. We preserve the cross-branch assignment logic by mapping each Employee's branch reference to the corresponding Bullhorn Corporation. Bullhorn Corporation records must be created before Candidate records so that the corpID lookup is satisfied at insert time.

ZenHR

Organization Level and Position

maps to

Bullhorn ATS & CRM

Corporate Department + Job Order Title

lossy
Fully supported

ZenHR Levels (seniority tiers) and Positions (job titles within levels) map to Bullhorn Corporate Departments and Job Order title fields. We reconstruct the ZenHR organizational hierarchy as Bullhorn Corporate Departments with parent-child relationships, and preserve the Position name as a custom field on the Candidate record to retain job title history.

ZenHR

Document

maps to

Bullhorn ATS & CRM

ContentDocument + ContentDocumentLink

1:1
Fully supported

ZenHR Documents (contracts, certifications, IDs, offer letters) migrate as Bullhorn ContentDocument records attached via ContentDocumentLink to the corresponding Candidate. We transfer document type, expiry date, upload date, and e-signature audit trail metadata. Binary files are re-uploaded via Bullhorn's REST API using multipart form encoding. Expiry alerts do not migrate; Bullhorn's document expiry reminder feature requires manual reconfiguration post-migration.

ZenHR

Timeoff

maps to

Bullhorn ATS & CRM

Note or Candidate Custom Field

lossy
Fully supported

ZenHR Timeoff records (leave balance, accrual transactions, request history) have no native Bullhorn equivalent. We migrate the current leave balance as Bullhorn Candidate custom fields (e.g., annual_leave_balance__c, sick_leave_balance__c) and the transaction history as a Note attached to the Candidate with a structured text body listing accrual dates, deductions, and balances. Pending leave requests are flagged during scoping for the customer to handle manually post-migration.

ZenHR

Loan

maps to

Bullhorn ATS & CRM

Note or Candidate Custom Field

lossy
Fully supported

ZenHR Employee Loans with principal, remaining balance, and repayment schedule have no native Bullhorn object. We migrate active loan status, outstanding principal, and monthly repayment amount as Bullhorn Candidate custom fields. Full loan history (past repayments, interest calculations) migrates as a structured Note on the Candidate record. If Bullhorn Back Office is in scope, loan deductions can be modeled as payroll items in that module separately.

ZenHR

Overtime

maps to

Bullhorn ATS & CRM

Note or Candidate Custom Field

lossy
Fully supported

ZenHR Overtime records (type, hours, rate, date range) migrate as Bullhorn Candidate custom fields for current-period overtime totals, with historical overtime entries captured as Notes on the Candidate record. ZenHR's configurable Overtime Types map to custom picklist values on the overtime custom field. Bullhorn's native overtime tracking is not available as a standard ATS feature.

ZenHR

Termination and Final Settlement

maps to

Bullhorn ATS & CRM

Placement (historical) + Note

1:1
Fully supported

ZenHR Termination records with effective date, termination reason, and EOSB (End-of-Service Benefit) or gratuity settlement amount migrate as Bullhorn Placement records in a closed status (placement type = Direct Hire, status = Stopped Working) with a Note containing the EOSB amount, gratuity calculation basis, and final settlement details. The termination effective_date is preserved as the Placement endDate rather than the migration timestamp to maintain audit integrity under MENA labor law.

ZenHR

ZenATS Candidate

maps to

Bullhorn ATS & CRM

Bullhorn Candidate

1:1
Fully supported

ZenATS Candidates and Vacancies are a distinct ATS module within ZenHR. Candidate records, pipeline stages, and interview data map to Bullhorn Candidate with the ZenATS vacancy stage preserved as a custom field on the Candidate record. However, ZenATS SMS and email communication bodies are not exposed via the ZenHR standard API — only metadata (timestamps, template names) is available. We flag this gap during scoping and recommend a manual ZenATS export of communication history before migration begins. The communication metadata migrates with the Candidate; the bodies do not.

ZenHR

ZenATS Vacancy

maps to

Bullhorn ATS & CRM

Job Order

1:1
Fully supported

ZenATS Vacancies map to Bullhorn Job Orders. The vacancy title, description, required skills, and location map directly. The ZenATS pipeline stage history (applied, screening, interviewing, offer, hired, rejected) is preserved as Bullhorn Job Submission status values on the Candidate record's associated Job Submission. We reconstruct the pipeline as Bullhorn Job Order Record Type and Sales Process with stage values aligned to the customer's ZenATS workflow.

ZenHR

User and Role

maps to

Bullhorn ATS & CRM

Bullhorn User

1:1
Fully supported

ZenHR Users (system login records distinct from the Employee profile) map to Bullhorn Users. We match by email address. Any ZenHR User without a matching Bullhorn User goes to a reconciliation queue for the customer's Bullhorn admin to provision. Role-based permissions in ZenHR do not map directly to Bullhorn user type and permission sets — we document the ZenHR role assignments as a written access matrix for the admin to rebuild in Bullhorn Admin settings.

ZenHR

Work Shift and Attendance Details

maps to

Bullhorn ATS & CRM

Note or Custom Field

lossy
Fully supported

ZenHR Branch Employee Shifts and Attendance Details (clock-in/clock-out events) generate a high volume of granular records for large workforces. ZenHR's API does not expose a documented bulk attendance endpoint. We paginate using cursor-based pagination and scope aggregated attendance summaries (e.g., monthly attendance rate per employee) as Bullhorn Candidate custom fields rather than individual punch events. This reduces API load and migration time by orders of magnitude while preserving the attendance data needed for payroll recalculation in the destination system.

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

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM gotchas

High

ATS Growth edition has no API access

High

Attachments excluded from CSV bulk exports

Medium

Custom Object limits vary sharply by edition

Medium

Opportunity pipeline stages are recruitment-specific

Low

Resume parse quality varies by document format

Pair-specific challenges

  • Bullhorn has no native MENA labor law or compliance features

    ZenHR is purpose-built for GCC and Levant labor law compliance including end-of-service benefits, social insurance contributions, and localized tax deductions. Bullhorn is a global staffing ATS with no MENA-specific compliance engine. Companies migrating employee data to Bullhorn must handle EOSB/gratuity calculations, social insurance deductions, and tax localization outside Bullhorn — either through Bullhorn Back Office with significant custom configuration, or through a parallel MENA-compliant payroll system. We flag this gap during scoping and document every financial field that requires a destination. If the customer's legal entity remains in a MENA jurisdiction post-migration, Bullhorn alone is not sufficient for payroll compliance.

  • ZenHR custom fields are tenant-specific and require pre-migration field audit

    ZenHR allows every organization to define custom fields for employee profiles, requests, loans, overtime, and workflows. There is no fixed schema across tenants — one company's Employee object looks different from another's. We run a field discovery phase against the source ZenHR tenant before mapping begins, enumerating every active standard and custom field with their mandatory/optional flags and data types. Bullhorn's custom field limits (55 fields per custom object, 2-10 custom objects depending on edition) constrain how many ZenHR custom fields can be migrated as typed fields. Fields exceeding Bullhorn's limit are migrated as structured Notes or excluded from the standard scope with a written gap inventory.

  • ZenATS communication log bodies do not export via the standard ZenHR API

    ZenATS is a separate ATS module integrated with ZenHR. Candidate records, vacancy pipeline stages, and interview data are migratable, but SMS and email communication bodies sent to candidates are not exposed via the standard ZenHR API. Only metadata (timestamps, template names, recipient IDs) is available. We flag this gap during scoping: if the customer requires full candidate communication history, we recommend a manual export from ZenATS before migration begins and advise that only communication metadata transfers automatically. This is a silent data gap in most outbound ZenHR migrations that requires advance customer action.

  • Bullhorn's API rate limits require cursor-based pagination for large datasets

    ZenHR's API does not publish bulk endpoint specifications or public rate limits, requiring direct inquiry to ZenHR support for safe pagination and request pacing. Bullhorn enforces per-entity rate limits on its REST API (documented limits vary by entity type and API version). For large migrations with thousands of Employee, Document, and attendance records, we implement cursor-based pagination on the ZenHR source side and Bullhorn Bulk API with batch chunking and exponential backoff on the destination side. Migrations that bypass rate-limit handling risk API throttling, silent record drops, or 429 responses mid-migration, requiring restart and reconciliation.

  • Terminations require effective-date sequencing to preserve EOSB audit trails

    End-of-Service Benefit (EOSB) calculations under MENA labor law depend on termination date, years of service, and final leave balance. If we migrate termination records out of date order or without preserving the effective_date as a primary sort key, the destination Bullhorn Placement endDate may not reflect the legal termination date, breaking the EOSB audit trail. We sequence all Terminations as the terminal phase of migration, after all active Employee records are settled, and we preserve the original ZenHR termination effective_date as the Bullhorn Placement endDate rather than defaulting to migration timestamp.

Migration approach

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

  1. Discovery and ZenHR tenant audit

    We audit the source ZenHR tenant across active modules (Core HR, Payroll, ATS, Performance, Time & Attendance), enumerate all standard and custom fields on Employee, Document, Timeoff, Loan, Overtime, and Termination records, assess document binary storage volume, and identify any ZenATS candidate and vacancy records. We also extract the organizational hierarchy (Branches, Levels, Positions) and map it to the ZenHR user-role matrix. The discovery output is a written migration scope, a field inventory spreadsheet, and a Bullhorn edition recommendation (Starter for 1-2 users, Core for small growing teams, or Pro for full ATS/CRM with automation) based on the data complexity.

  2. Schema design and custom field pre-creation

    We design the destination Bullhorn schema based on the ZenHR field inventory. This includes provisioning Bullhorn custom fields on the Candidate record (up to 55 fields per custom object, 2-10 custom objects depending on Bullhorn edition), creating Corporate Departments to mirror ZenHR Branches, and defining Job Order Record Types and Sales Processes to reproduce ZenATS vacancy pipeline stages. We also configure the Bullhorn Corporation record structure to receive the ZenHR Branch hierarchy. Schema is deployed into a Bullhorn Sandbox org first for validation before production migration begins.

  3. Sandbox migration and reconciliation

    We run a full migration into a Bullhorn Sandbox using production-like data volume. The customer's Bullhorn admin and HR lead reconcile record counts (Candidates in, Corporations in, Documents attached, Placements in), spot-check 25-50 random Candidate records against ZenHR source records, and verify that organizational hierarchy maps correctly to Bullhorn Corporations and Corporate Departments. Any field mapping corrections, custom field additions, or Bullhorn edition upgrades happen in the Sandbox before production migration begins. Active Bullhorn workflows and automations are documented during this phase for the post-migration rebuild handoff.

  4. Parent record migration and lookup resolution

    Bullhorn requires parent records to exist before child records can reference them. We migrate in dependency order: Bullhorn Users (matched by email from ZenHR Users), then Corporations (from ZenHR Branches), then Corporate Departments (from ZenHR Levels and Positions), then Candidates (from ZenHR Employees with Financial data in custom fields). Each phase emits a row-count reconciliation report before the next phase begins. Any ZenHR User without a matching Bullhorn User is held in a reconciliation queue for the admin to provision before the next phase starts.

  5. Document, termination, and ATS record migration

    After core Candidate records are settled, we migrate Document binaries as Bullhorn ContentDocument records attached via ContentDocumentLink to the owning Candidate. We then migrate ZenHR Termination records as Bullhorn Placement records with Notes containing EOSB/gratuity details and the original effective_date preserved. For ZenATS Candidates and Vacancies, we run a parallel migration into Bullhorn Candidate and Job Order records, mapping ZenATS pipeline stages to Bullhorn Job Submission status values. ZenATS communication bodies are flagged as a manual pre-migration export step for the customer to handle.

  6. Cutover, validation, and automation rebuild handoff

    We freeze ZenHR writes during cutover, run a final delta migration of any records modified during the migration window, then enable Bullhorn as the system of record. We deliver a written inventory of every active ZenHR workflow, ATS automation, and reporting requirement, mapping each to its nearest Bullhorn Automation or Field Mapping equivalent. Bullhorn Automations do not migrate as code from ZenHR — the customer's Bullhorn admin or a Bullhorn implementation partner rebuilds them post-migration. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team during the first live week.

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.
Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

Destination

Strengths

  • Unified ATS and CRM on one platform purpose-built for staffing agencies, eliminating separate tools for candidates and clients.
  • Automated resume parsing extracts structured candidate data—contact details, work history, skills—into searchable profiles instantly.
  • Native placement and split-billing model handles contract staffing workflows including start/end dates and overtime rules.
  • Bullhorn Recruitment Cloud Marketplace offers 100+ pre-validated third-party integrations spanning the full recruiting lifecycle.
  • 24/7 global support coverage from 350+ support staff with dedicated account management included at all tiers.

Weaknesses

  • Widely regarded as old and bloated with an unintuitive interface and steep learning curve for new recruiters.
  • Slow page loads and performance lag cited in over 200 verified G2 reviews during high-volume recruiting periods.
  • Pricing is opaque—custom-negotiated per organization with significant upfront implementation fees that vary by deal.
  • ATS Growth edition excludes API access entirely, preventing automated data export without upgrading first.

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 Bullhorn ATS & CRM.

  • 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 Bullhorn ATS & 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 ZenHR to Bullhorn ATS & CRM data migrations

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

Can't find your answer?

Walk through your ZenHR to Bullhorn ATS & CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and six weeks for organizations under 2,000 employees with core profiles, org structure, and documents. Migrations with high-volume attendance data, loan and overtime records, multiple ZenHR custom fields, or a parallel ZenATS candidate migration (ZenATS Candidates into Bullhorn Candidates) move to eight to sixteen weeks because of cursor-based API pagination for ZenHR, document binary transfer via Bullhorn's REST API, and the termination effective-date sequencing required for MENA labor law compliance.

Adjacent paths

Related migrations to explore

Ready when you are

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