HRMS migration
Field-level mapping, validation, and rollback between OrangeHRM and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
OrangeHRM
Source
Bullhorn ATS & CRM
Destination
Compatibility
8 of 12
objects map 1:1 between OrangeHRM and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from OrangeHRM to Bullhorn is not a sidegrade — it is a platform-type change. OrangeHRM is a general HRMS built around the employee lifecycle: PIM, leave, attendance, performance, and recruitment modules all attach to a single employee record. Bullhorn is a recruitment ATS and CRM built around the candidate and job lifecycle: Candidate, JobOrder, Placement, and Opportunity objects are the primary entities, and HR-administration features like leave entitlements, attendance punch-in, and structured performance reviews do not have native equivalents. We extract OrangeHRM employee records, split them by employment status into Bullhorn Candidate and Contact objects, map open vacancies to JobOrder records, and reconstruct onboarding tasks as structured notes and custom fields on Placement. Leave balances, attendance snapshots, and performance review ratings migrate as supplemental data on the relevant record — not as native Bullhorn objects — so that the customer's admin team knows exactly what to rebuild post-migration. We do not migrate OrangeHRM's workflows, payroll configurations, or system admin roles; we deliver a written inventory of these for the customer's admin to rebuild in Bullhorn's workflow builder.
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 OrangeHRM 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.
OrangeHRM
Employee (PIM)
Bullhorn ATS & CRM
Candidate and Client Contact (split required)
1:manyOrangeHRM Employee records split into Bullhorn Candidate and Client Contact based on employment status. Active employees become Bullhorn Client Contact records attached to the agency's own organization as a Client Corporation. Former employees and job applicants from OrangeHRM Recruitment module become Bullhorn Candidate records. Employment dates, job titles, departments, and supervisor relationships migrate as custom fields on both record types for audit and reporting. We use OrangeHRM Advanced REST API v2 (available from version 6.5.11) for bulk export; Starter tier customers provide CSV exports which we parse, normalize, and chunk before Bullhorn API import.
OrangeHRM
Candidate (Recruitment module)
Bullhorn ATS & CRM
Candidate
1:1OrangeHRM Recruitment module candidate records migrate directly to Bullhorn Candidate. Application status history, vacancy associations, and application dates transfer to Bullhorn Candidate custom fields and activity timeline entries. OrangeHRM application status values (Applied, Interview Scheduled, Offer Extended, Hired, Rejected) map to Bullhorn Candidate status values. Any OrangeHRM candidate without an email address is flagged for the customer's admin to resolve before import because Bullhorn requires an email for candidate deduplication.
OrangeHRM
Job Vacancy
Bullhorn ATS & CRM
JobOrder
1:1OrangeHRM Job Vacancy records (title, description, hiring manager, status) map to Bullhorn JobOrder. We create JobOrder records in Bullhorn before importing any Candidate submissions so that the JobOrder ID reference is available for linking. OrangeHRM vacancy status (Opened, Closed, Cancelled) maps to Bullhorn JobOrder status. The hiring manager on the OrangeHRM vacancy resolves to a Bullhorn User by email match; unresolved managers go to a reconciliation queue.
OrangeHRM
Onboarding and Offboarding Tasks
Bullhorn ATS & CRM
Placement (custom fields and notes)
lossyOrangeHRM onboarding and offboarding task definitions and per-employee assignments reconstruct as Bullhorn Placement notes and custom fields. Bullhorn has no native onboarding task module; we attach a structured task inventory as a formatted note on the Placement record, listing each task type, assigned owner, due date, and completion status. For Advanced tier customers, we extract task data via ESB; Starter tier customers use CSV export. The customer's Bullhorn admin rebuilds any automated task triggers in Bullhorn's workflow builder post-migration.
OrangeHRM
Leave Entitlements and Requests
Bullhorn ATS & CRM
Candidate or Contact (supplemental data)
1:1OrangeHRM leave balances and historical leave request records do not have a native Bullhorn equivalent. We export leave entitlements per employee per leave type, normalize leave type names against Bullhorn's custom field schema, and attach the balance snapshot as a custom field block or formatted note on the relevant Bullhorn Candidate or Client Contact. Leave request status history (Approved, Rejected, Pending) migrates as a note on the record. Bullhorn does not handle leave management natively; this data serves as a reference record rather than a functional one.
OrangeHRM
Attendance Records
Bullhorn ATS & CRM
Candidate or Contact (supplemental data)
1:1OrangeHRM attendance punch-in and punch-out records, and attendance summaries per employee per period, migrate as supplemental data on the Bullhorn Candidate or Client Contact record. We extract the attendance snapshot as a formatted note capturing date, hours worked, and attendance status. Bullhorn does not have a native attendance module; if the customer needs time tracking in Bullhorn, they configure Bullhorn Middle Office or a third-party time-tracking integration post-migration.
OrangeHRM
Performance Reviews
Bullhorn ATS & CRM
Placement (custom fields and notes)
1:1OrangeHRM Performance module review cycles, reviewer assignments, ratings, and goal data map to Bullhorn Placement as custom fields and a structured note. We extract the review summary per employee including cycle name, reviewer, rating, and comments. Bullhorn does not have a native performance appraisal module; goal and competency data that OrangeHRM stores in the Performance module requires custom field creation in Bullhorn or documentation for the customer's admin to handle in a separate HRMS.
OrangeHRM
Organization Structure (Reporting Lines)
Bullhorn ATS & CRM
Corporate (internal hierarchy)
1:1OrangeHRM supervisor-employee relationships define the org chart; these map to Bullhorn Corporate records (for client organizations) and internal User-to-User relationships (for the agency's own staff hierarchy). We extract direct-report mappings from OrangeHRM's PIM supervisor field and reconstruct the hierarchy in Bullhorn's internal corporate structure. Sub-department and cost center assignments migrate as custom fields on the Client Contact record.
OrangeHRM
Work Schedules
Bullhorn ATS & CRM
Placement (custom fields)
1:1OrangeHRM version 7.13 structured work schedules (schedule assignments per employee per work week) map to Bullhorn Placement custom fields capturing the schedule type and shift pattern. Bullhorn does not store employee availability or work schedule definitions natively; we attach the schedule data as a reference note on the Placement or Candidate record. Shift pattern definitions require mapping to Bullhorn's scheduling model or documentation for the customer's admin to configure.
OrangeHRM
Custom Fields (Employee Level)
Bullhorn ATS & CRM
Custom Fields or Custom Objects
lossyOrangeHRM custom fields at the employee level migrate to Bullhorn custom fields on Candidate or Client Contact. Bullhorn supports free-text, drop-down, mini-picker, checkbox, and date field types. We match OrangeHRM field data types to Bullhorn field edit types during mapping. Custom Objects (available on Bullhorn Front Office Growth/Enterprise: up to 10 custom objects with 55 fields each; ATS: 2; ATS Growth: none) are pre-created in the destination before migration for any OrangeHRM custom fields that require a multi-field structured record.
OrangeHRM
Document Metadata
Bullhorn ATS & CRM
Candidate or Contact (document attachments)
1:1OrangeHRM employee document uploads (contracts, ID scans, certifications) store file metadata (filename, upload date, file type, classification). We export document metadata as a structured record set and provide a file copy package. Document content transfers as a separate file handoff outside the Bullhorn API migration scope; the customer's admin uploads files to the Bullhorn record post-migration. The metadata record links each file to its OrangeHRM employee ID and Bullhorn Candidate or Client Contact ID.
OrangeHRM
User Accounts and Admin Roles
Bullhorn ATS & CRM
User (manual provisioning)
lossyOrangeHRM user accounts and admin role assignments are system configuration, not HR data, and are not migrated. We deliver a written inventory of OrangeHRM user roles, role permissions, and admin assignments for the customer's Bullhorn admin to provision equivalent User roles and access levels in Bullhorn post-migration. OrangeHRM employee records that correspond to active Bullhorn Users are matched by email and linked to the provisioned User record.
| OrangeHRM | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee (PIM) | Candidate and Client Contact (split required)1:many | Fully supported | |
| Candidate (Recruitment module) | Candidate1:1 | Fully supported | |
| Job Vacancy | JobOrder1:1 | Fully supported | |
| Onboarding and Offboarding Tasks | Placement (custom fields and notes)lossy | Mapping required | |
| Leave Entitlements and Requests | Candidate or Contact (supplemental data)1:1 | Mapping required | |
| Attendance Records | Candidate or Contact (supplemental data)1:1 | Mapping required | |
| Performance Reviews | Placement (custom fields and notes)1:1 | Mapping required | |
| Organization Structure (Reporting Lines) | Corporate (internal hierarchy)1:1 | Mapping required | |
| Work Schedules | Placement (custom fields)1:1 | Mapping required | |
| Custom Fields (Employee Level) | Custom Fields or Custom Objectslossy | Mapping required | |
| Document Metadata | Candidate or Contact (document attachments)1:1 | Fully supported | |
| User Accounts and Admin Roles | User (manual provisioning)lossy | 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.
OrangeHRM gotchas
API access is Advanced-tier only
PHP max_execution_time blocks upgrades and imports on XAMPP
Timesheet module absent in Starter tier
Leave type normalization required across platforms
Onboarding task bulk upload requires Gold Support contact
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 edition verification
We audit the source OrangeHRM instance across edition (Starter or Advanced), version, active modules (PIM, Leave, Attendance, Performance, Recruitment, Onboarding), custom field count, employee record volume, vacancy count, and candidate pipeline volume. We verify the OrangeHRM edition and API availability with the customer's admin because this determines whether extraction is API-based (Advanced) or CSV-based (Starter). We pair this with a Bullhorn edition check: Starter ($99/user/mo) covers basic ATS needs; Core ($165/user/mo) adds custom fields and marketplace access; Pro (custom quote) adds AI, automation, and analytics. We deliver a written migration scope document with a record-count matrix and edition recommendation.
Schema design and Candidate-Contact split rule
We design the Bullhorn destination schema. For OrangeHRM Starter customers, we design the CSV export and parsing pipeline. For OrangeHRM Advanced customers, we configure the Bullhorn API integration credentials. We define the Candidate-Contact employment-status split rule based on the customer's OrangeHRM employee status field values (Active, Terminated, On Leave) and Recruitment module association, and document it in the mapping specification. We create any required Bullhorn Custom Objects via the Bullhorn Support setup spreadsheet for editions that support them. Bullhorn Field Mappings are configured for any dropdown value normalization required during import.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox using production-like data volume. The customer's recruiting operations lead reconciles record counts (Candidates in, Client Contacts in, JobOrders in, Placements in), spot-checks 25-50 records against OrangeHRM source, and validates that the Candidate-Contact split is correct. Any mapping corrections, data quality issues (missing emails, duplicate candidates), or Bullhorn Field Mapping adjustments happen in the sandbox before production migration begins. OrangeHRM Starter customers validate the CSV parsing pipeline and data completeness at this stage.
Leave, attendance, and performance supplemental data preparation
We extract OrangeHRM leave entitlement balances, attendance snapshots, and performance review summaries and normalize them against the destination Bullhorn schema. Leave type names are reconciled into a Bullhorn-compatible custom field label set. Attendance records are aggregated to a per-employee summary (total hours per period) rather than individual punch-in entries. Performance review data is formatted as a structured note block with reviewer, rating, and comments. These supplemental records are staged for import as Bullhorn custom field data on the relevant Candidate or Placement record after the primary object migration.
Production migration in dependency order
We run production migration in record-dependency order. OrangeHRM JobOrder records are created in Bullhorn first so that vacancy references are available for Candidate linking. OrangeHRM Employee records are split and imported as Client Contacts (active employees) and Candidates (former employees and recruitment module candidates) using the employment-status split rule. Recruitment module candidates with vacancy associations are linked to the corresponding Bullhorn JobOrder. Placement records are created from OrangeHRM onboarding data with onboarding task notes attached. Leave, attendance, and performance supplemental data import last, as custom field updates on the relevant record. Each phase emits a row-count reconciliation report.
Cutover, delta sync, and admin rebuild handoff
We freeze OrangeHRM writes during the cutover window, run a final delta migration of any records created or modified during the migration window, then enable Bullhorn as the system of record. We deliver the OrangeHRM Workflow and Automation Inventory (if Advanced tier with ESB workflows exists), the Leave-Attendance-Performance Rebuild Guide, and the Onboarding Task Reconstruction document to the customer's Bullhorn admin team. We support a one-week hypercare window where we resolve any data quality issues raised by the recruiting team. We do not rebuild OrangeHRM workflows or leave-management logic as Bullhorn automations inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
OrangeHRM
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between OrangeHRM and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across OrangeHRM and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between OrangeHRM and Bullhorn ATS & CRM.
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
OrangeHRM: Not publicly documented.
Data volume sensitivity
OrangeHRM 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 OrangeHRM to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your OrangeHRM 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 OrangeHRM
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.