HRMS migration
Field-level mapping, validation, and rollback between HR Director and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
HR Director
Source
Bullhorn ATS & CRM
Destination
Compatibility
5 of 12
objects map 1:1 between HR Director and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Migrating from HR Director to Bullhorn is a domain shift from a general HRMS to a recruitment-specific ATS and CRM. HR Director manages the employment lifecycle for internal staff: employee records, contracts, absence entitlements, and payroll. Bullhorn manages the candidate and client lifecycle for a staffing agency's placements: candidates, client companies, job orders, and placements against which timesheets and invoices run. There is no shared object model, so the migration is a purposeful reconstruction of relevant HR Director data (employee records as candidates, employer data as clients) into Bullhorn's schema, with absence history and compensation data preserved as custom fields or documented for manual re-entry. Bullhorn's automation capabilities (Bullhorn Automation, tearsheets, hotlists) do not migrate as code; we deliver a written inventory of any configured automations for the customer's Bullhorn admin to rebuild. Saved searches require manual recreation post-migration because Bullhorn's search migration requires either manual rebuild or Bullhorn Support intervention.
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 HR Director 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.
HR Director
Employee
Bullhorn ATS & CRM
Candidate
1:1HR Director Employee records map to Bullhorn Candidate records. The employee's personal name fields map to Candidate firstName and lastName; email maps to Candidate email; phone maps to Candidate phone; address maps to Candidate address. The employee's employment status (active, leaver) maps to Bullhorn Candidate status with a custom field original_employment_status__c preserving the original HR Director value. Employee records that represent internal staff (not external candidates) are flagged with a custom field candidate_type__c set to 'internal_transfer' so the Bullhorn admin can filter them separately from external candidates placed with clients.
HR Director
Employee
Bullhorn ATS & CRM
Client Corporation
1:1The HR Director employer entity (the company itself as the internal employer) maps to a Bullhorn Client Corporation record representing the staffing agency's own corporate entity. This is necessary if the agency places its own employees as contractors or if Bullhorn is used to track internal headcount alongside external candidate placements. The employer's registered address and company name populate the Client Corporation name and billing address fields.
HR Director
Organisation / Department
Bullhorn ATS & CRM
Client Corporation (client company)
1:1HR Director's internal departments and organisational hierarchy do not have a direct Bullhorn equivalent. Bullhorn uses Client Corporations for external client companies and does not model internal org structure. We map the HR Director employer to a single Client Corporation (the staffing agency's own firm) and map internal departments to a custom Bullhorn custom object InternalDepartment__c with a lookup to the Client Corporation. If the customer uses Bullhorn Connexys or Bullhorn One, department structure may map to Business Sector or Division fields on Client Corporation.
HR Director
Absence Record
Bullhorn ATS & CRM
Candidate Custom Field (absence_history__c)
lossyHR Director absence records (type, start date, end date, status) cannot map to native Bullhorn objects because Bullhorn has no standard absence management feature. We store absence history as a long-text custom field absence_history__c on the Candidate record in JSON-structured format: {'type': 'Sick', 'start': '2024-03-01', 'end': '2024-03-03', 'status': 'Approved'}. The customer decides during scoping whether to store this on every migrated Candidate or only on Candidates with significant absence history. Bullhorn Automation can be configured to surface this field in a Candidate's record layout.
HR Director
Compensation Record
Bullhorn ATS & CRM
Candidate Custom Field (compensation_history__c)
lossyHR Director compensation-effective-date records (salary, bonus, pay frequency, effective date) cannot map to Bullhorn standard fields because Bullhorn does not have an employee payroll engine. We store compensation history as a structured custom field compensation_history__c on the Candidate record in JSON format: {'salary': 45000, 'currency': 'GBP', 'effective_date': '2023-04-01', 'pay_frequency': 'Annual'}. If the agency uses Bullhorn Time & Expense for contractor timesheets, the placement's bill rate and pay rate are configured on the Placement record post-migration, not migrated from HR Director compensation records.
HR Director
Employment Contract / Document
Bullhorn ATS & CRM
Candidate Document (ContentDocument)
1:1HR Director documents (employment contracts, ID copies, right-to-work checks) migrate as Bullhorn ContentDocument records attached via ContentDocumentLink to the Candidate. The document type (contract, ID, DBS check) is stored in a custom picklist field document_type__c on the ContentDocument. The original filename is preserved. If HR Director stores documents in a proprietary or encrypted format, we extract text content where possible and store it as a Note attachment on the Candidate as a fallback.
HR Director
Emergency Contact
Bullhorn ATS & CRM
Candidate Custom Field (emergency_contact__c)
lossyHR Director emergency contacts (name, relationship, phone) store as a structured custom field emergency_contact__c on the Candidate record in JSON: {'name': 'Jane Smith', 'relationship': 'Spouse', 'phone': '+44-7700-900123'}. Bullhorn does not have a native emergency contact object. The customer may alternatively choose to store emergency contacts in the Candidate's primary address or notes field if GDPR considerations require them to be accessible to Bullhorn users.
HR Director
Employee Status
Bullhorn ATS & CRM
Candidate Status + custom field
lossyHR Director employment status values (active, suspended, on leave, leaver, retired) map to Bullhorn Candidate status values (Active, Inactive, Placed) with a custom field original_status__c preserving the source HR Director status for audit. Placements in Bullhorn represent the active employment or assignment of a Candidate with a Client; internal staff who remain on the agency's payroll are entered as Candidate records with a placement record reflecting their internal assignment.
HR Director
Holiday / Leave Entitlement
Bullhorn ATS & CRM
Candidate Custom Field or Leave Entitlement custom object
lossyHR Director leave entitlement balances (annual leave remaining, sick leave entitlement) cannot map to Bullhorn standard fields. We store current-year entitlement as a custom field leave_entitlement__c on the Candidate record. If the agency requires leave tracking for placed contractors (for example, umbrella company contractors entitled to statutory leave), this is reconfigured in Bullhorn Time & Expense or in a post-migration leave management integration rather than stored as migrated data.
HR Director
Job Role / Position
Bullhorn ATS & CRM
Job Order (Assignment)
lossyHR Director job roles and positions (title, job family, grade) map to Bullhorn Job Order records if the migration includes a client-specific job structure, or to custom fields on the Candidate record (candidate_title__c, candidate_job_family__c) if the agency is migrating internal headcount without client job orders. Bullhorn Job Orders are the staffing-specific equivalent of job requisitions and carry client, location, requirements, and bill-rate information.
HR Director
Manager / Reporting Line
Bullhorn ATS & CRM
Candidate Custom Field or User lookup
lossyHR Director reporting-line data (manager-employee relationships) stores as custom fields manager_name__c and manager_email__c on the Candidate record. If the manager is also a migrated Candidate or an active Bullhorn User, we resolve the lookup at migration time and store the manager's Candidate ID or User ID. Bullhorn's User object is not directly equivalent to HR Director's manager hierarchy; Bullhorn Users represent recruiters, not line managers.
HR Director
Employee Start Date
Bullhorn ATS & CRM
Candidate dateCreated or custom field
1:1HR Director employee start date migrates to Bullhorn Candidate dateCreated as the employment start date, and to a custom field original_start_date__c preserving the exact source value. Bullhorn's native dateCreated represents the record creation timestamp in Bullhorn, not the employment commencement date; we use the custom field to preserve the HR Director start date for compliance records and tenure calculations.
| HR Director | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate1:1 | Fully supported | |
| Employee | Client Corporation1:1 | Fully supported | |
| Organisation / Department | Client Corporation (client company)1:1 | Fully supported | |
| Absence Record | Candidate Custom Field (absence_history__c)lossy | Fully supported | |
| Compensation Record | Candidate Custom Field (compensation_history__c)lossy | Fully supported | |
| Employment Contract / Document | Candidate Document (ContentDocument)1:1 | Fully supported | |
| Emergency Contact | Candidate Custom Field (emergency_contact__c)lossy | Fully supported | |
| Employee Status | Candidate Status + custom fieldlossy | Fully supported | |
| Holiday / Leave Entitlement | Candidate Custom Field or Leave Entitlement custom objectlossy | Fully supported | |
| Job Role / Position | Job Order (Assignment)lossy | Fully supported | |
| Manager / Reporting Line | Candidate Custom Field or User lookuplossy | Fully supported | |
| Employee Start Date | Candidate dateCreated or custom field1:1 | 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.
HR Director gotchas
Catalog ambiguity — 'HR Director' brand maps to multiple regional offerings
Sparse public reviewer data
No public developer API
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 data audit
We audit HR Director across employee record count, custom fields, absence history volume, compensation records, document types and storage format, and any configured automations or absence entitlement rules. We pair this with a Bullhorn readiness review: which Bullhorn edition (Entry, Growth, Enterprise), which Bullhorn products (ATS only, ATS + CRM, Bullhorn One), and whether Bullhorn Time & Expense and Bullhorn Onboarding are in scope. The discovery output is a written migration scope document listing every HR Director object, its migration path (migrate as standard Bullhorn field, migrate as custom field, document as manual re-entry, or out of scope), and the Bullhorn edition recommendation.
Schema design and custom field provisioning
We design the Bullhorn destination schema. This includes creating custom fields on Candidate (absence_history__c, compensation_history__c, emergency_contact__c, original_employment_status__c, original_start_date__c, candidate_type__c), provisioning a custom object for leave entitlement if required, and creating the Client Corporation record representing the staffing agency's own employer entity. Bullhorn's API supports custom field creation via the Bullhorn REST API. We deploy to a Bullhorn sandbox or staging environment first for validation before production schema provisioning.
Data extraction and transformation
We extract HR Director data in the dependency order that preserves referential integrity: employer entity (for Client Corporation), then employee records (for Candidate with manager lookup resolved), then absence history (appended as structured JSON to each Candidate), then compensation history (as structured JSON on Candidate), then documents (extracted and attached as ContentDocument to the parent Candidate). We flag records with missing required fields (no email address on Candidate, no name) in a reconciliation report before attempting Bullhorn import. Any HR Director fields with no Bullhorn destination are written to a manual-re-entry spreadsheet delivered alongside the migration.
Sandbox migration and reconciliation
We run a full migration into the customer's Bullhorn staging or sandbox environment. The customer's Bullhorn admin reconciles record counts (Candidates in, Client Corporations in), spot-checks 25-50 migrated Candidate records against the HR Director source, reviews custom field content (absence history JSON, compensation history JSON), and validates that documents attached correctly. Sign-off on the sandbox migration precedes the production cutover date. Any field-mapping corrections happen in the sandbox, not in production.
Production migration and cutover
We run the production migration following the same dependency order used in sandbox: employer entity as Client Corporation, then employee records as Candidates with custom fields populated, then document attachments via Bullhorn's ContentDocument API. We freeze HR Director writes during the cutover window and run a final delta migration of any records modified during the migration window. Bullhorn becomes the system of record once the delta migration is confirmed clean. We deliver the automation inventory document and the manual-re-entry spreadsheet at cutover.
Post-migration handoff and rebuild scope
We support a one-week hypercare window following cutover, resolving any data quality issues raised by the Bullhorn admin. We do not rebuild HR Director automations, absence entitlement rules, or payroll configurations as Bullhorn Automation, Bullhorn workflows, or Bullhorn Time & Expense rules within the migration scope; these are separate configuration engagements. The automation inventory document is the handoff artifact for the customer's Bullhorn admin or a Bullhorn-certified implementation partner.
Platform deep dives
HR Director
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 2 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 HR Director and Bullhorn ATS & CRM.
Object compatibility
2 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
HR Director: Not publicly documented..
Data volume sensitivity
HR Director 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 HR Director to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your HR Director 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 HR Director
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.