HRMS migration
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
Source
Bullhorn ATS & CRM
Destination
Compatibility
7 of 13
objects map 1:1 between ZenHR and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-6 weeks
Overview
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.
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 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
Bullhorn ATS & CRM
Candidate
1:1ZenHR 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
Bullhorn ATS & CRM
Candidate Custom Fields or Note
lossyZenHR'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
Bullhorn ATS & CRM
Corporation
1:1ZenHR 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
Bullhorn ATS & CRM
Corporate Department + Job Order Title
lossyZenHR 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
Bullhorn ATS & CRM
ContentDocument + ContentDocumentLink
1:1ZenHR 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
Bullhorn ATS & CRM
Note or Candidate Custom Field
lossyZenHR 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
Bullhorn ATS & CRM
Note or Candidate Custom Field
lossyZenHR 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
Bullhorn ATS & CRM
Note or Candidate Custom Field
lossyZenHR 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
Bullhorn ATS & CRM
Placement (historical) + Note
1:1ZenHR 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
Bullhorn ATS & CRM
Bullhorn Candidate
1:1ZenATS 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
Bullhorn ATS & CRM
Job Order
1:1ZenATS 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
Bullhorn ATS & CRM
Bullhorn User
1:1ZenHR 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
Bullhorn ATS & CRM
Note or Custom Field
lossyZenHR 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.
| ZenHR | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate1:1 | Fully supported | |
| Employee Financial Information | Candidate Custom Fields or Notelossy | Fully supported | |
| Branch | Corporation1:1 | Fully supported | |
| Organization Level and Position | Corporate Department + Job Order Titlelossy | Fully supported | |
| Document | ContentDocument + ContentDocumentLink1:1 | Fully supported | |
| Timeoff | Note or Candidate Custom Fieldlossy | Fully supported | |
| Loan | Note or Candidate Custom Fieldlossy | Fully supported | |
| Overtime | Note or Candidate Custom Fieldlossy | Fully supported | |
| Termination and Final Settlement | Placement (historical) + Note1:1 | Fully supported | |
| ZenATS Candidate | Bullhorn Candidate1:1 | Fully supported | |
| ZenATS Vacancy | Job Order1:1 | Fully supported | |
| User and Role | Bullhorn User1:1 | Fully supported | |
| Work Shift and Attendance Details | Note or Custom Fieldlossy | 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.
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
Bullhorn ATS & CRM gotchas
ATS Growth edition has no API access
Attachments excluded from CSV bulk exports
Custom Object limits vary sharply by edition
Opportunity pipeline stages are recruitment-specific
Resume parse quality varies by document format
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
ZenHR
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
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 Bullhorn ATS & CRM.
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 Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave ZenHR
Other ways to arrive at Bullhorn ATS & CRM
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.