HRMS migration
Field-level mapping, validation, and rollback between Bullhorn ATS & CRM and BambooHR. We move data and schema; workflows are rebuilt natively in BambooHR.
Bullhorn ATS & CRM
Source
BambooHR
Destination
Compatibility
7 of 11
objects map 1:1 between Bullhorn ATS & CRM and BambooHR.
Complexity
BStandard
Timeline
2-4 weeks
Try the reverse
Overview
Moving from Bullhorn ATS & CRM to BambooHR is a category-crossing migration from a staffing-agency ATS+CRM to a people-centered HCM platform. Bullhorn's data model is built around Candidates, JobOrders, Clients, Opportunities, and Placements serving a recruitment-sales workflow. BambooHR's model centers on Employees, Applicants, Jobs (internal postings), Time Off, and Benefits. We extract the subset of Bullhorn records that map to BambooHR objects—primarily Candidate profiles that become Employees or Applicants, historical placement records that become employment history entries, and User records that become BambooHR system accounts—and flag every object that cannot migrate because it has no BambooHR equivalent (Client corporations, Opportunities, Placements for contract billing, JobOrders as external job postings). We deliver a written inventory of unmigratable Bullhorn records for the customer's records-retention policy. Bullhorn ATS Growth edition's lack of API access and the attachment-export limitation from CSV bulk exports are primary migration risk factors we identify during scoping.
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.
Source platform
Bullhorn ATS & CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Bullhorn ATS & CRM.
Destination platform
BambooHR platform overview
Scorecard, SWOT, gotchas, and pricing for BambooHR.
Data migration guide
The complete BambooHR migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Bullhorn migration guide
Understand the data you're exporting from Bullhorn ATS & CRM before mapping it.
Destination checklist
BambooHR migration checklist
Pre- and post-cutover tasks for moving onto BambooHR.
Source checklist
Bullhorn migration checklist
Exit checklist for unwinding your Bullhorn ATS & CRM setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Bullhorn ATS & CRM object lands in BambooHR, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Bullhorn ATS & CRM
Candidate
BambooHR
Employee or Applicant
1:manyBullhorn Candidate records split into two BambooHR destinations. Candidates with a Placement record (hired through the staffing agency) become BambooHR Employees with start dates from the Placement record. Candidates without a Placement but with job submission history become BambooHR Applicants in the BambooHR ATS module. The candidate name, email, phone, address, resume file reference, parsed skills, work history (education, employment), and custom fields migrate to the corresponding BambooHR Employee or Applicant field. Historical salary information from Placement payRate fields maps to BambooHR custom pay-rate fields on Employee.
Bullhorn ATS & CRM
Candidate (work history)
BambooHR
Employee: Employment History
1:1Bullhorn Candidate employment history (from resume parse) maps to BambooHR Employee employment history entries. Each Bullhorn employment record (company name, title, start date, end date, description) becomes a separate BambooHR Employment History item. Date precision from Bullhorn may exceed BambooHR's field granularity; we normalize to month-year format where BambooHR does not support exact dates.
Bullhorn ATS & CRM
Placement
BambooHR
Employee (custom fields)
lossyBullhorn Placement records carry the pay rate (candidate pay), charge rate (client bill rate), start date, end date, and overtime eligibility flag. These do not map to a native BambooHR object because BambooHR has no staffing-billing model. We map Placement fields to custom Employee-level fields: payRate__c, chargeRate__c, contractStartDate__c, contractEndDate__c, overtimeEligible__c. If the customer no longer manages contractors this way, we recommend archiving Placement records to a CSV inventory rather than populating custom fields.
Bullhorn ATS & CRM
User (Recruiter/Owner)
BambooHR
User
1:1Bullhorn User records (recruiters, sales staff, administrators) map to BambooHR User accounts for the HR administrators who will manage the BambooHR system. We resolve by email match. Bullhorn Users who were external recruiters or contract staffing consultants have no equivalent in BambooHR and are excluded from the user migration scope. Active/inactive status migrates from Bullhorn isDeleted flag.
Bullhorn ATS & CRM
JobOrder
BambooHR
No equivalent
1:1Bullhorn JobOrder records (external job postings for staffing assignments) have no direct BambooHR equivalent. BambooHR Jobs represent internal company positions open for hire, not external job postings for client-funded staffing assignments. We do not migrate JobOrders. We deliver a written inventory of all Bullhorn JobOrders with their status, requirements, and location as a CSV for the customer's records-retention file. If the customer is transitioning from external staffing to internal hiring, internal open positions should be created manually in BambooHR after migration.
Bullhorn ATS & CRM
Client (ClientCorporation)
BambooHR
No equivalent
1:1Bullhorn Client records represent the staffing agency's customer companies—business entities with primary contacts, industry classification, and address. BambooHR has no Client or company-account concept; it manages people (employees), not business relationships. Client records cannot migrate. We deliver a written inventory of all Bullhorn Clients with contact name, company, email, and phone as a CSV for the customer's CRM migration if they adopt a separate CRM post-Bullhorn.
Bullhorn ATS & CRM
Contact
BambooHR
Employee or Emergency Contact
1:manyBullhorn Contact records serve two roles: client-side business contacts (associated with Client records) and candidate references. Business contacts do not map to BambooHR. Candidate reference contacts (professional references listed on a Candidate profile) map to the corresponding BambooHR Employee as Emergency Contact or Reference records with name, relationship, phone, and email.
Bullhorn ATS & CRM
Opportunity
BambooHR
No equivalent
1:1Bullhorn Opportunities represent recruiting pipeline deals tied to Clients—sales CRM stages like Qualified, Interview, Offer, Placed. BambooHR has no pipeline, deal, or sales-stage concept. Opportunity records cannot migrate. We deliver a written inventory of all Bullhorn Opportunities with their status, stage, value, and associated Client as a CSV. If the customer maintains a separate CRM post-Bullhorn, this CSV serves as the seed data for re-entering pipeline history.
Bullhorn ATS & CRM
Task
BambooHR
Note (Employee)
1:1Bullhorn Tasks (to-dos with type, due date, status, and owner assignment) map to BambooHR Note records attached to the corresponding Employee. Task type maps to a Note category field; due date and status become note body content. Open tasks (Status = Open) migrate as active notes for the employee's BambooHR record; completed tasks migrate as historical notes. Bullhorn task ownership resolves via the User-to-Employee mapping before note creation.
Bullhorn ATS & CRM
CandidateList (Job Submission)
BambooHR
Applicant: Application History
1:1Bullhorn CandidateList records represent a Candidate's submission to a specific JobOrder with a status in the recruitment pipeline (Submitted, Interview, Offer, etc.). When the candidate maps to a BambooHR Applicant, the CandidateList submission history migrates as Application History notes on the Applicant record, preserving the original submission date, job title, and stage status.
Bullhorn ATS & CRM
Custom Object
BambooHR
Custom Field
lossyBullhorn custom objects (up to 2 on ATS editions, 10 on Front Office) extend core entities with up to 55 fields each. BambooHR supports custom fields on Employee and Applicant records but does not support standalone custom objects. We audit every Bullhorn custom object used on Candidate records during scoping. Fields that map to existing BambooHR Employee fields are redirected; overflow fields are mapped to BambooHR custom fields. If the count of custom fields per entity exceeds BambooHR's practical limit (roughly 20 custom fields per object), we recommend rationalizing or archiving the overflow before migration.
| Bullhorn ATS & CRM | BambooHR | Compatibility | |
|---|---|---|---|
| Candidate | Employee or Applicant1:many | Fully supported | |
| Candidate (work history) | Employee: Employment History1:1 | Fully supported | |
| Placement | Employee (custom fields)lossy | Fully supported | |
| User (Recruiter/Owner) | User1:1 | Fully supported | |
| JobOrder | No equivalent1:1 | Fully supported | |
| Client (ClientCorporation) | No equivalent1:1 | Fully supported | |
| Contact | Employee or Emergency Contact1:many | Fully supported | |
| Opportunity | No equivalent1:1 | Fully supported | |
| Task | Note (Employee)1:1 | Fully supported | |
| CandidateList (Job Submission) | Applicant: Application History1:1 | Fully supported | |
| Custom Object | 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.
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
BambooHR gotchas
Undocumented API rate limits can trigger 503 errors
Per-employee pricing model requires active record count verification
API credentials must be sent on every request to avoid extra round trips
Custom field schema varies per account and requires manual inventory
Document and attachment exports are not covered by standard report exports
Pair-specific challenges
Migration approach
Discovery and edition identification
We audit the source Bullhorn instance across edition tier (Growth/ATS/Corporate/Front Office), API availability, record counts by object (Candidates, Placements, Users, Contacts, JobOrders, Opportunities, Custom Objects), custom object field inventory, and engagement volume. We identify whether the Bullhorn REST API is accessible and whether any third-party integrations (Bullhorn Back Office, Bullhorn Onboarding) are active and must be decommissioned before migration. The discovery output is a written migration scope that explicitly lists migratable objects, unmigratable objects, and the inventory plan for each category.
Schema mapping and custom field design
We design the destination BambooHR schema. This includes mapping Bullhorn Candidate fields to BambooHR Employee and Applicant fields, designing the BambooHR custom fields to receive Placement billing data (payRate__c, chargeRate__c, contractStartDate__c, contractEndDate__c) and any Bullhorn custom object fields that cannot map to standard BambooHR fields, and identifying which Bullhorn custom object fields have direct BambooHR equivalents to avoid unnecessary custom field proliferation. We coordinate with the customer's BambooHR admin to confirm custom field creation permissions and naming conventions before deployment.
Bullhorn data export
We export Bullhorn data in dependency order: Users first (to resolve the user-to-employee mapping), then Candidates with their associated CandidateLists, then Placements with their linked pay/charge rates, then Tasks and Attachments. On ATS Growth editions where API access is unavailable, we assemble CSV exports by object and manually join them by record ID. We retrieve file attachments via Bullhorn's file reference API endpoints or via batch UI download. We flag any records where Bullhorn's parsed resume data is incomplete (due to non-standard resume formatting or missing parse fields) and restore from the original file reference where parse data is missing.
Employee and Applicant import
We import into BambooHR in record-dependency order: Employees first (from Bullhorn Candidates with Placement records, using the Placement start date and custom billing fields), then Applicants (from Bullhorn Candidates without Placement records or with CandidateList submission history). Bullhorn User records map to BambooHR User accounts for the HR system administrators. Each phase emits a row-count reconciliation report. We validate that the BambooHR Employee ID generated for each migrated record is captured for use in any downstream note and attachment linking.
Attachment migration and note linking
We migrate Bullhorn resume attachments and parsed documents as BambooHR Employee or Applicant documents. We resolve the target BambooHR record by matching the Bullhorn Candidate email to the newly created Employee or Applicant. Resume files are uploaded as BambooHR document attachments with the document type set to Resume. Any Bullhorn Task records are imported as BambooHR Note records linked to the corresponding Employee. We validate that every document attachment has a matching BambooHR record before marking the phase complete.
Cutover, validation, and unmigratable inventory delivery
We freeze Bullhorn write access during cutover, run a final delta migration of any records modified during the migration window, then enable BambooHR as the system of record. We validate record counts, spot-check 20-30 random employee records against the Bullhorn source data, and confirm attachment coverage. We deliver the written inventory of unmigratable Bullhorn records (JobOrders, Clients, Opportunities, Placements without billing context) as structured CSVs with field-level documentation for the customer's records-retention policy. We support a one-week hypercare window for reconciliation issues. We do not rebuild Bullhorn workflows or automations in BambooHR; those are documented separately as a BambooHR automation rebuild plan for the customer's admin.
Platform deep dives
Bullhorn ATS & CRM
Source
Strengths
Weaknesses
BambooHR
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Bullhorn ATS & CRM and BambooHR.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Bullhorn ATS & CRM and BambooHR.
Object compatibility
All 7 core objects map 1:1 between Bullhorn ATS & CRM and BambooHR.
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
Bullhorn ATS & CRM: 1,500 req/min, 100,000 calls/month, 50 concurrent sessions, 50 subscriptions; ATS Growth edition has NO API access.
Data volume sensitivity
Bullhorn ATS & CRM 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 Bullhorn ATS & CRM to BambooHR migration scoping. Not seeing yours? Book a call.
Walk through your Bullhorn ATS & CRM to BambooHR migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Bullhorn ATS & CRM
Other ways to arrive at BambooHR
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.