HRMS migration
Field-level mapping, validation, and rollback between BambooHR and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
BambooHR
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 12
objects map 1:1 between BambooHR and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-8 weeks
Try the reverse
Overview
Migrating from BambooHR to Bullhorn is a platform-category transition from an HRIS to a staffing-focused ATS and CRM. The two systems share a Contact-like entity, but BambooHR organizes around Employees (current staff, employment history, compensation, PTO), while Bullhorn organizes around Candidates, ClientCorporations, JobOrders, and Placements. We migrate the overlapping record types — BambooHR Applicants to Bullhorn Candidates, BambooHR Employee contact fields to Bullhorn Contact records, and any applicant-stage candidates — and flag what cannot map because Bullhorn's data model is purpose-built for the staffing placement lifecycle, not HR record-keeping. Bullhorn's custom import tool limits to 1,000 records per batch for Candidates, Contacts, and Leads; larger migrations require our API pipeline with Bullhorn REST API batch handling and rate-limit backoff. Workflows, BambooHR onboarding checklists, and payroll data do not migrate; we deliver a written inventory for admin 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.
Source platform
BambooHR platform overview
Scorecard, SWOT, gotchas, and pricing for BambooHR.
Destination platform
Bullhorn ATS & CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Bullhorn ATS & CRM.
Data migration guide
The complete Bullhorn migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
BambooHR migration guide
Understand the data you're exporting from BambooHR before mapping it.
Destination checklist
Bullhorn migration checklist
Pre- and post-cutover tasks for moving onto Bullhorn ATS & CRM.
Source checklist
BambooHR migration checklist
Exit checklist for unwinding your BambooHR 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 BambooHR 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.
BambooHR
Employee
Bullhorn ATS & CRM
Contact or Candidate (split required)
1:manyBambooHR Employee records split into two Bullhorn targets depending on employment lifecycle stage. Employees who are currently active candidates for new roles (internal mobility, secondments, or sourcing candidates) map to Bullhorn Candidate records. Employees being recorded as placed staff from a prior agency engagement map to Bullhorn Contact records attached to a ClientCorporation. The split rule is defined during scoping based on the customer's use case — internal mobility cases go to Candidate; agency placement records go to Contact. Basic name, email, phone, address, and emergency contact fields migrate directly; BambooHR employment status, termination date, and hire date are stored as custom fields on the Bullhorn record because Bullhorn's standard fields are recruitment-focused.
BambooHR
Applicant
Bullhorn ATS & CRM
Candidate
1:1BambooHR ATS Applicant records map directly to Bullhorn Candidate. Pipeline stage names (Applied, Phone Screen, Interview, Offer, Hired, Rejected) from BambooHR map to Bullhorn Candidate status and leadStatus fields, with manual mapping per customer because BambooHR pipeline stages are customer-defined. Resume files attached to BambooHR applicants migrate as Bullhorn Candidate resumes (file upload via Bullhorn REST API or document management). Custom application fields from BambooHR (any field beyond name, email, phone, resume, and stage) migrate as Bullhorn custom fields on the Candidate entity, with field type validation against Bullhorn's supported types (text, number, date, dropdown, multi-select, checkbox).
BambooHR
Job Information
Bullhorn ATS & CRM
JobOrder
1:1BambooHR job postings in the ATS layer map to Bullhorn JobOrder records. BambooHR job title, job description, employment type (full-time, part-time, contract), and location map to Bullhorn JobOrder title, description, employmentType, and addressCity/addressState fields. The BambooHR job status (Open, Filled, Closed) maps to Bullhorn JobOrder status (Open, Interviewing, Offer, Closed, Cancelled). Any BambooHR custom job fields migrate as custom fields on Bullhorn JobOrder.
BambooHR
Job Application
Bullhorn ATS & CRM
CandidateSubmission or Placement (conditional)
lossyBambooHR applications (Applicant-to-Job associations with application date, source, and custom fields) map to Bullhorn CandidateSubmission when the candidate is submitted to a job but not yet placed, and to Bullhorn Placement when the candidate is hired into the role. The mapping type is conditional based on BambooHR application status. Placements carry startDate, endDate, payRate, billRate, and client assignment — these map from BambooHR offer details and employment terms fields.
BambooHR
Employee
Bullhorn ATS & CRM
User (owner resolution)
1:1BambooHR Employee records that have an email address matching an existing Bullhorn User account resolve to that User record for OwnerId assignment on Candidate, JobOrder, and Placement records. BambooHR employees without a Bullhorn User account go into a reconciliation queue; the customer's Bullhorn admin provisions User accounts for those employees before record import resumes. This is a prerequisite step before Candidate import can proceed because Bullhorn requires a non-null OwnerId on record creation.
BambooHR
Time-Off
Bullhorn ATS & CRM
Custom Field or Task
1:1BambooHR time-off balances (accrued PTO, sick leave, personal days) and request history have no native Bullhorn equivalent because Bullhorn is an ATS, not an HRIS. We map time-off balances as Bullhorn custom fields on the Candidate or Contact record (if the customer uses Bullhorn for internal staffing and wants to track candidate availability). Time-off request history migrates as Task records with a custom type field for audit purposes, but Bullhorn does not enforce or process these as active policies.
BambooHR
Benefits Administration
Bullhorn ATS & CRM
Custom Field
1:1BambooHR benefits enrollment data (health plan, dental, vision, 401k, HSA, FSA) is stored per Employee with customer-specific schema variation. We map benefits data as Bullhorn custom fields on the Candidate or Contact record if the customer wants to carry benefit election history. Benefits carrier names, plan tiers, and coverage effective dates migrate as text and date fields. This is flag scope — many BambooHR benefit exports contain carrier-specific plan codes that do not map to Bullhorn standard fields and require a manual review step during scoping.
BambooHR
Compensation
Bullhorn ATS & CRM
Custom Field
1:1BambooHR pay rate, pay type (salary, hourly, exempt), pay frequency, and currency map to Bullhorn custom fields on the Candidate record (for current/past pay) and Placement record (for bill rate and pay rate on placed candidates). BambooHR compensation grades and bands are customer-specific data that we map to Bullhorn custom fields or custom objects as appropriate. Bullhorn's standard compensation fields are placement-focused (billRate, payRate) rather than employment-focused, so we use Bullhorn's custom field infrastructure for pay history.
BambooHR
Custom Employee Fields
Bullhorn ATS & CRM
Custom Fields
lossyBambooHR's per-account custom fields (any field not in the standard employee schema) require a Bullhorn custom field to be created before migration data can land. Bullhorn requires a Support ticket to create a new custom object, but custom fields on existing entities (Candidate, JobOrder, ClientCorporation, Placement) can be created by Bullhorn admins via Admin > Field Mappings. We create the Bullhorn custom field definitions during the pre-migration schema phase, validate field types against Bullhorn's supported types (text, number, date, dropdown, multi-select, checkbox, currency), and then map BambooHR values during data transform. Bullhorn has a per-entity limit on custom field count that we verify during scoping.
BambooHR
Performance Management
Bullhorn ATS & CRM
Custom Field or Note
1:1BambooHR performance review cycles, review scores, and goals are not fully exposed in the standard employee export. We map review completion status and overall scores as Bullhorn custom fields on the Candidate or Contact record. Review text, feedback comments, and manager notes migrate as Bullhorn Note records linked to the Contact record. Detailed performance workflow history (multi-round review cycles, 360 feedback, goal trees) does not map to any Bullhorn standard object and is flagged as scope requiring admin rebuild or a third-party performance management integration.
BambooHR
Onboarding
Bullhorn ATS & CRM
Bullhorn Onboarding (Able)
1:1BambooHR onboarding tasks, checklists, and document requests tied to new hires have no equivalent in Bullhorn ATS. Bullhorn Onboarding (the Able product, formerly a separate acquisition) handles candidate-facing onboarding after placement, not HR onboarding. We inventory BambooHR onboarding task names, checklist states, and document requests during scoping and deliver a written handoff document listing each task and its recommended Bullhorn Onboarding equivalent. The customer's Bullhorn admin or implementation partner rebuilds the onboarding workflow configuration post-migration.
BambooHR
Documents
Bullhorn ATS & CRM
ContentDocument
1:1Documents attached to BambooHR employee records (offer letters, signed contracts, certifications, tax forms) migrate as Bullhorn ContentDocument records linked via ContentDocumentLink to the corresponding Candidate or Contact record. BambooHR document binary storage is accessed via the BambooHR API file endpoint; we retrieve each document by employee ID and upload to Bullhorn using the Bullhorn REST API. Document type classification (offer letter, contract, certification) maps to a custom ContentDocument Description field. Bullhorn's Custom Import tool does not handle documents — this is an API-level migration step.
| BambooHR | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Contact or Candidate (split required)1:many | Fully supported | |
| Applicant | Candidate1:1 | Fully supported | |
| Job Information | JobOrder1:1 | Fully supported | |
| Job Application | CandidateSubmission or Placement (conditional)lossy | Fully supported | |
| Employee | User (owner resolution)1:1 | Fully supported | |
| Time-Off | Custom Field or Task1:1 | Fully supported | |
| Benefits Administration | Custom Field1:1 | Mapping required | |
| Compensation | Custom Field1:1 | Fully supported | |
| Custom Employee Fields | Custom Fieldslossy | Mapping required | |
| Performance Management | Custom Field or Note1:1 | Mapping required | |
| Onboarding | Bullhorn Onboarding (Able)1:1 | Mapping required | |
| Documents | ContentDocument1:1 | Mapping required |
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.
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
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
Scoping and platform classification
We audit the BambooHR account across installed modules (HRIS, ATS, Payroll, Performance), record counts per object type (Employees, Applicants, Job Postings, Custom Fields, Benefits enrollments, PTO balances), and active onboarding workflows. We identify which records are candidate-like (Applicants in the BambooHR ATS layer, job-stage employees for internal mobility) versus HR-only (payroll, PTO, benefits, performance reviews). We pair this with a Bullhorn edition review (Starter at $99/user for 1-2 users, Core at $165/user for small growing teams, Pro tier-based for AI and automation features) to determine which Bullhorn features are available for the target schema. The scoping output is a written migration object inventory and Bullhorn edition recommendation.
Schema provisioning and field mapping design
We design the Bullhorn destination schema during this step. This includes creating Bullhorn custom fields on Candidate, JobOrder, ClientCorporation, and Placement entities via Admin > Field Mappings (for custom fields) and via Bullhorn Support ticket (for custom objects). We map BambooHR pipeline stage names to Bullhorn Candidate status values per customer configuration. We define the Employee-to-Candidate or Employee-to-Contact split rule based on the customer's use case. Bullhorn admin credentials and Field Mappings write access are required before this step proceeds.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox environment (or a named subset of the production database if no sandbox is available) using representative data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, Contacts in, JobOrders in, Placements in), spot-checks 25-50 random records against the BambooHR source for field accuracy, and validates custom field data. Any mapping corrections — wrong field types, missed custom fields, stage name mismatches — happen here before production migration begins. This step also validates that Bullhorn's field-level security and validation rules do not block the import batch.
Owner and User reconciliation
We extract every distinct BambooHR employee with an email address who is referenced as an owner or hiring manager on a BambooHR Applicant, Job Posting, or Employee record. We match these by email against Bullhorn's User table in the destination org. BambooHR employees without a matching Bullhorn User go to a reconciliation queue. The customer's Bullhorn admin provisions any missing User accounts before production migration proceeds. Bullhorn requires a non-null OwnerId on Candidate, JobOrder, and Placement records — migration cannot proceed past this step without owner resolution.
Production migration in dependency order
We run production migration in record-dependency order: Bullhorn Users (manual, validated in step 4), ClientCorporations (from any employer/agency client data in BambooHR), JobOrders (from BambooHR job postings), Candidates (from BambooHR Applicants and split Employee records), Placements (for hired applicants with employment terms), then custom fields and documents. Bullhorn's Custom Import tool (up to 1,000 records per batch for Candidates, Contacts, Leads) handles records within the limit; records exceeding the batch cap migrate via Bullhorn REST API with rate-limit handling. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and onboarding rebuild handoff
We freeze BambooHR write access during the cutover window, run a final delta migration for any records modified during the migration window, then enable Bullhorn as the system of record for recruiting operations. We deliver the onboarding task inventory document to the customer's Bullhorn admin. We support a one-week hypercare window where we resolve any reconciliation issues raised by the recruiting team. We do not configure Bullhorn Onboarding (Able) workflows, Bullhorn Automation (Herefish) sequences, or Bullhorn payroll integrations inside the migration scope; those are separate product activations or implementation engagements.
Platform deep dives
BambooHR
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between BambooHR and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across BambooHR and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between BambooHR 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
BambooHR: Not publicly documented; BambooHR reserves the right to throttle with 503 responses.
Data volume sensitivity
BambooHR 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 BambooHR to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your BambooHR 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 BambooHR
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.