HRMS migration
Field-level mapping, validation, and rollback between CIPHR and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
CIPHR
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 14
objects map 1:1 between CIPHR and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from CIPHR to Bullhorn is a cross-category migration from a mid-market HRMS into a dedicated recruitment-agency ATS and CRM. CIPHR stores recruitment data as part of a broader HR suite (employee records, payroll, onboarding, learning), while Bullhorn is purpose-built for staffing agencies with Candidate, ClientCorporation, ClientContact, JobOrder, and Placement as first-class entities. We extract the recruitment subset from CIPHR — applicants, job postings, onboarding completions, and candidate documents — and map it to Bullhorn's relational ATS schema, using Bullhorn's REST API with its 1,500-request-per-minute rate limit. The CIPHR payroll module and absence histories do not map to Bullhorn (Bullhorn's back-office payroll products are separate); we flag these for the customer's admin to configure post-migration. Bullhorn automations, workflows, and sales engagement cadences do not migrate as code; we deliver a written inventory for the admin to rebuild.
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 CIPHR 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.
CIPHR
Recruitment / Applicants (CIPHR)
Bullhorn ATS & CRM
Candidate (Bullhorn)
1:1CIPHR applicant records map to Bullhorn Candidate. We extract candidate name, contact details, source, application date, status, and any candidate custom properties. CIPHR application stage maps to a Bullhorn custom field application_status__c since Bullhorn stage is managed via JobSubmission records tied to JobOrder. Candidate documents (CVs, resumes) migrate as ContentDocument records linked via ContentDocumentLink.
CIPHR
Recruitment / Job Postings (CIPHR)
Bullhorn ATS & CRM
JobOrder (Bullhorn)
1:1CIPHR vacancy records map to Bullhorn JobOrder. The CIPHR job title, job description, location, employment type, and vacancy status map to corresponding Bullhorn JobOrder fields (title, description, address, employmentType, status). We resolve the owning recruiter in CIPHR to a Bullhorn User by email match. Custom vacancy fields in CIPHR map to Bullhorn custom fields on JobOrder.
CIPHR
Job Submission (CIPHR application-to-vacancy link)
Bullhorn ATS & CRM
JobSubmission (Bullhorn)
1:1CIPHR application-to-vacancy associations map to Bullhorn JobSubmission records that link Candidate to JobOrder. The submission date, current stage, rejection reason, and submission notes migrate. Bullhorn's Application V2 entity (with its history records) is the target; we preserve submission stage history as JobSubmission custom fields where the Bullhorn edition supports it.
CIPHR
Employees (CIPHR)
Bullhorn ATS & CRM
Candidate (Bullhorn, for placed candidates)
1:1CIPHR employee records that originated as recruitment applicants and have been hired map to Bullhorn Candidate records with a placement record attached. We use the employee identifier in CIPHR to link back to the original applicant Candidate in Bullhorn, preserving the source application history. Manager relationships from CIPHR map to Bullhorn custom fields or User lookups.
CIPHR
Employment Details (CIPHR)
Bullhorn ATS & CRM
Placement (Bullhorn) + Custom Fields on Candidate
1:manyCIPHR employment details (start date, job title, department, cost centre, employment type, contract terms) attach to hired candidates as Bullhorn Placement records. The Placement holds start date, end date (for contract workers), pay rate, and bill rate. Employment type (permanent, contract, temp) maps to Bullhorn's employmentType field. Contract terms and cost centre data map to custom fields on the Placement or Candidate.
CIPHR
Onboarding (CIPHR)
Bullhorn ATS & CRM
Bullhorn Onboarding (formerly Able) + Candidate Custom Fields
lossyCIPHR onboarding task checklists and document acceptance records do not have a direct Bullhorn ATS equivalent. We export onboarding completion status and document acceptance flags, then map them to Bullhorn Onboarding task records or Candidate custom fields (onboarding_complete__c, documents_signed__c). Bullhorn Onboarding is a separate product; configuration of onboarding workflows requires the customer's admin to set up in Bullhorn Onboarding post-migration.
CIPHR
Documents (CIPHR)
Bullhorn ATS & CRM
ContentDocument + ContentDocumentLink (Bullhorn)
1:1CIPHR employee and applicant documents (contracts, signed policies, ID records, CVs) migrate as Bullhorn ContentDocument records linked to the parent Candidate or ClientContact via ContentDocumentLink. Document type in CIPHR maps to a custom field doc_type__c on ContentDocument. We extract document metadata and binary content where accessible via CIPHR export; filenames and type labels are preserved for identification in Bullhorn.
CIPHR
Custom Properties (CIPHR)
Bullhorn ATS & CRM
Custom Fields or Custom Objects (Bullhorn)
lossyCIPHR custom fields on applicant and employee records map to Bullhorn custom fields on Candidate, JobOrder, or JobSubmission. Bullhorn editions limit custom fields by entity: Candidate supports up to 55 custom fields depending on field type mix. If the CIPHR schema exceeds Bullhorn's per-entity field limit, we propose Custom Objects (Front Office Growth/Enterprise: up to 10 Custom Objects with 55 fields each; Bullhorn ATS: 2; ATS Growth: none) and configure them during schema design.
CIPHR
Payroll Records (CIPHR)
Bullhorn ATS & CRM
Not migrated to Bullhorn ATS
1:1CIPHR payroll histories (historical pay data, deductions, tax codes, pension contributions, year-to-date figures) do not map to Bullhorn ATS. Bullhorn Time and Expense handles timesheet and expense tracking for placed contractors, not historical payroll. We export the payroll record set from CIPHR as a separate data package for the customer's payroll team to load into their preferred payroll system or Bullhorn Time and Expense post-migration.
CIPHR
Absence and Leave (CIPHR)
Bullhorn ATS & CRM
Not migrated to Bullhorn ATS
1:1CIPHR leave balances (sickness, holiday, accrual history) have no Bullhorn ATS equivalent. Bullhorn Onboarding tracks onboarding task completions but not absence management. We export current leave balances and leave history from CIPHR as a separate data package. If the customer manages contractor absence in Bullhorn Time and Expense, we provide a custom field mapping for absence records to be configured post-migration.
CIPHR
Learning / Training Records (CIPHR)
Bullhorn ATS & CRM
Not migrated to Bullhorn ATS
1:1CIPHR learning completions, course assignments, and quiz results map to Bullhorn only if the customer licenses Bullhorn Learning separately. Standard Bullhorn ATS does not include an LMS. We export training history as a separate data package and flag Bullhorn Learning or a third-party LMS as the destination if the customer requires training record continuity.
CIPHR
Users and System Access (CIPHR)
Bullhorn ATS & CRM
User (Bullhorn) — reconciliation required
1:1CIPHR user accounts, roles, and permission sets do not map directly to Bullhorn User records. Bullhorn Users must be provisioned within Bullhorn's admin interface, not imported. We extract the CIPHR user list (names, emails, roles) as a provisioning reference for the customer's Bullhorn admin. We resolve CIPHR recruiter assignments on job orders and candidates by email match against Bullhorn User records after provisioning.
CIPHR
Organisations / Departments (CIPHR)
Bullhorn ATS & CRM
ClientCorporation (Bullhorn) or custom fields
lossyCIPHR org hierarchy (departments, locations, cost centres) does not have a direct Bullhorn ATS equivalent. Bullhorn ClientCorporation stores client company records, not internal org structure. We map CIPHR departments and locations to Bullhorn custom fields on Candidate and JobOrder (dept__c, location__c). If the customer manages temporary or contract workers in Bullhorn, we use Bullhorn's corporate structure for client-side org tracking rather than the internal HR org tree.
CIPHR
Performance Appraisals (CIPHR)
Bullhorn ATS & CRM
Custom Object (Bullhorn) or notes
lossyCIPHR appraisal records, ratings, and 360 feedback do not have a standard Bullhorn ATS equivalent. If the customer licenses Bullhorn Front Office Growth or Enterprise, we configure a Custom Object (appraisal_history__c) with fields for appraisal date, rating, reviewer, and comments linked to the Candidate record. Custom appraisal templates in CIPHR require manual mapping or recreation in Bullhorn.
| CIPHR | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Recruitment / Applicants (CIPHR) | Candidate (Bullhorn)1:1 | Fully supported | |
| Recruitment / Job Postings (CIPHR) | JobOrder (Bullhorn)1:1 | Fully supported | |
| Job Submission (CIPHR application-to-vacancy link) | JobSubmission (Bullhorn)1:1 | Fully supported | |
| Employees (CIPHR) | Candidate (Bullhorn, for placed candidates)1:1 | Fully supported | |
| Employment Details (CIPHR) | Placement (Bullhorn) + Custom Fields on Candidate1:many | Fully supported | |
| Onboarding (CIPHR) | Bullhorn Onboarding (formerly Able) + Candidate Custom Fieldslossy | Fully supported | |
| Documents (CIPHR) | ContentDocument + ContentDocumentLink (Bullhorn)1:1 | Fully supported | |
| Custom Properties (CIPHR) | Custom Fields or Custom Objects (Bullhorn)lossy | Fully supported | |
| Payroll Records (CIPHR) | Not migrated to Bullhorn ATS1:1 | Fully supported | |
| Absence and Leave (CIPHR) | Not migrated to Bullhorn ATS1:1 | Fully supported | |
| Learning / Training Records (CIPHR) | Not migrated to Bullhorn ATS1:1 | Fully supported | |
| Users and System Access (CIPHR) | User (Bullhorn) — reconciliation required1:1 | Fully supported | |
| Organisations / Departments (CIPHR) | ClientCorporation (Bullhorn) or custom fieldslossy | Fully supported | |
| Performance Appraisals (CIPHR) | Custom Object (Bullhorn) or noteslossy | 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.
CIPHR gotchas
No public pricing means migration budget estimates are harder to pin down
Payroll bureau clients face higher migration complexity
Absence balance recalculation at the destination can cause accrual discrepancies
Custom onboarding templates require manual pre-mapping
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 recruitment data audit
We audit the CIPHR recruitment module scope: applicant records, vacancy counts, application stage distributions, document attachment volumes, custom properties on applicant and employee records, and onboarding task structures. We run a record count against each CIPHR object and flag the payroll bureau and absence modules as separate export packages. We also confirm the customer's Bullhorn edition (Team, Corporate, or Enterprise) to determine Custom Object limits before finalising the schema design.
Bullhorn schema design and custom field provisioning
We design the destination Bullhorn schema based on the audit output. This includes configuring JobOrder record types (one per CIPHR vacancy pipeline), setting up custom fields on Candidate and JobOrder for CIPHR custom properties, designing JobSubmission field mappings for application stages, and provisioning Custom Objects if the CIPHR custom property count exceeds per-entity limits. Bullhorn edition is confirmed and any upgrade requirements are surfaced before schema is deployed to the customer's Sandbox.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn Sandbox using production-equivalent data volumes. The customer's Bullhorn admin reconciles record counts (Candidates in, JobOrders in, JobSubmissions in, Placements in), spot-checks 25-50 records against CIPHR source data, and reviews document attachments. Any mapping corrections, field limit issues, or custom object scope adjustments happen in Sandbox before production migration begins.
User provisioning and recruiter reconciliation
We extract the list of CIPHR users assigned as recruiters, hiring managers, or system administrators on recruitment records and match them by email against Bullhorn User accounts. Any CIPHR user without a Bullhorn User is added to a reconciliation queue for the customer's Bullhorn admin to provision before record import resumes. Owner lookups on JobOrder and Candidate are resolved at this stage.
Production migration in dependency order
We run production migration in Bullhorn in record-dependency order: JobOrders first (no dependencies), then ClientCorporations (for client-side org tracking), ClientContacts, Candidates (with User owner resolved), JobSubmissions (with Candidate-to-JobOrder lookups resolved), Placements (with Candidate and JobOrder lookups resolved), ContentDocument records for documents, and Custom Objects last. Bullhorn API rate limits are enforced via batch chunking and exponential backoff. Each phase emits a row-count reconciliation report.
Cutover, validation, and non-migrated data handoff
We freeze CIPHR writes during cutover, run a final delta migration for any records modified during the migration window, then enable Bullhorn as the system of record for recruitment operations. We deliver a separate data package for payroll records, leave balances, and training histories with a note on the recommended destination (Bullhorn Time and Expense, Bullhorn Onboarding, or a separate payroll/LMS system). We deliver the Bullhorn automation inventory for the admin to rebuild. We support a one-week hypercare window for reconciliation issues.
Platform deep dives
CIPHR
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 CIPHR 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
CIPHR: Not publicly documented by CIPHR directly.
Data volume sensitivity
CIPHR 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 CIPHR to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your CIPHR 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 CIPHR
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.