HRMS migration
Field-level mapping, validation, and rollback between Candidate Manager and BambooHR. We move data and schema; workflows are rebuilt natively in BambooHR.
Candidate Manager
Source
BambooHR
Destination
Compatibility
4 of 10
objects map 1:1 between Candidate Manager and BambooHR.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Candidate Manager is an ATS optimized for mid-market staffing teams, while BambooHR is a core HRIS that includes a lightweight applicant tracking module. This migration crosses a category boundary: Candidate Manager tracks candidates through sourcing, application, and hiring stages; BambooHR tracks employees from hire date through their entire lifecycle. We extract data from Candidate Manager via structured CSV exports (the platform does not expose a documented public API), normalize stage labels and ranking scores, and load them into BambooHR employee records and job postings. Pipeline stage names that have no BambooHR equivalent become custom fields; pre-profiling scores land as numeric custom fields on the employee record. Hiring manager portal attribution and staffing agency submission records do not have a native home in BambooHR and are flagged for manual review after load. We do not migrate workflows, staffing portal configurations, or custom ATS reporting exports as rebuilt reports.
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 Candidate Manager 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.
Candidate Manager
Candidate
BambooHR
Applicant (BambooHR ATS sub-record) or Employee
1:manyHired candidates from Candidate Manager map to BambooHR Employee records with a corresponding Applicant record to preserve the pre-hire application history. Candidates who were not hired map to BambooHR Applicant records only. We map firstName, lastName, homeEmail, mobilePhone, and address fields using BambooHR's standard field names. The original application date from Candidate Manager becomes the hireDate only for candidates with a Hired stage; non-hired candidates retain the application date as a custom field since BambooHR's Applicant records do not expose a submittedDate in the standard schema.
Candidate Manager
Candidate Pipeline Stage
BambooHR
Application Status (custom field)
lossyCandidate Manager's fixed stage names (Applied, Under Consideration, Interviewing, Hired) do not have a direct BambooHR equivalent because BambooHR's ATS module uses a free-form application status field rather than a fixed pipeline model. We preserve the original stage label as a custom text field named original_ats_stage__c on the Applicant record. For hired candidates, we map the Hired stage to the BambooHR employmentStatus field and set the hireDate.
Candidate Manager
Ranking and Pre-Profiling Score
BambooHR
Custom numeric field (Employee or Applicant)
1:1Candidate Manager stores numeric ranking and screening scores as candidate properties. These transfer as-is into custom number fields in BambooHR, prefixed with original_ats_ (e.g., original_ats_ranking_score__c). BambooHR supports numeric custom fields on both Employee and Applicant records. We create these fields during schema setup and populate them for every candidate that carries a score. Note that BambooHR's custom field IDs must be fetched via GET /v1/meta/fields per customer account and cannot be hardcoded.
Candidate Manager
Job Order
BambooHR
Job (BambooHR ATS Job Posting)
1:1Candidate Manager job orders carry requisition metadata (department, location, open date, hiring manager). We map these to BambooHR Job records, with the job title becoming the position name, the department mapping to BambooHR's departmentId (pre-created during scoping), and the job open date mapped to the job posting date. Custom fields attached to job orders in Candidate Manager become custom fields on the BambooHR Job record, discovered and mapped individually during the scoping call.
Candidate Manager
Hiring Manager Self-Service Portal Record
BambooHR
Employee field (supervisor reference)
1:1Records created via Candidate Manager's hiring manager portal carry an owner attribution field. We preserve this as a supervisor reference on the corresponding BambooHR Employee record. The BambooHR API field for supervisor is supervisor, which takes an Employee ID. If the hiring manager does not have an Employee record in BambooHR (because they are not an employee), we store the name in a custom text field original_ats_hiring_manager__c and flag it for manual reconciliation.
Candidate Manager
Staffing Agency Submission
BambooHR
Custom text field on Applicant
lossyAgencies submitting candidates through Candidate Manager's staffing portal are tracked as submission sources with agency name and submission ID. BambooHR has no native staffing agency field. We create custom fields original_ats_agency_name__c and original_ats_submission_id__c on the Applicant record and populate them from Candidate Manager's submission source data. Agency-specific notes attached to submissions migrate to original_ats_agency_notes__c.
Candidate Manager
Onboarding Task Record
BambooHR
Employee Onboarding Task (BambooHR) or custom fields
1:1Candidate Manager extends into onboarding for hired candidates, storing task completion status and document references. BambooHR's onboarding module handles new hire tasks with its own task schema. We migrate onboarding task status as custom fields on the BambooHR Employee record (e.g., original_ats_onboarding_completed__c as a checkbox) and document references as notes or file attachments via BambooHR's employee file API. E-signature status does not transfer cleanly from Candidate Manager since that data is not exported in a structured format.
Candidate Manager
Reporting Data (Hiring Funnel)
BambooHR
Custom Report (BambooHR) or supplementary export
lossyCandidate Manager's reporting module generates aggregate hiring funnel exports. These do not map to a native BambooHR object because BambooHR's reporting module uses its own data model built on employee records. We deliver the historical hiring funnel data as a supplementary CSV that the customer can import into BambooHR as a custom report or store as an archived reference. BambooHR does not support aggregate ATS funnel reporting natively.
Candidate Manager
Candidate Custom Fields (candidate-level)
BambooHR
Custom fields (Employee or Applicant)
lossyCustom fields at the candidate level in Candidate Manager are not documented in a machine-readable schema and must be discovered during the scoping call. We map each to a BambooHR custom field with a matching data type (text, number, date, dropdown). BambooHR custom fields are fetched per account via GET /v1/meta/fields and are referenced by numeric field ID in API calls. Custom field creation happens in BambooHR before data load begins.
Candidate Manager
Job Order Custom Fields (requisition-level)
BambooHR
Custom fields (Job record)
lossyCustom fields at the job order level in Candidate Manager (e.g., approved salary range, headcount approved, employment type) map to custom fields on the BambooHR Job record. We create these during BambooHR schema setup, matching data types. BambooHR Job custom fields use the same custom field ID pattern as Employee custom fields and are discovered via the same /v1/meta/fields endpoint.
| Candidate Manager | BambooHR | Compatibility | |
|---|---|---|---|
| Candidate | Applicant (BambooHR ATS sub-record) or Employee1:many | Fully supported | |
| Candidate Pipeline Stage | Application Status (custom field)lossy | Fully supported | |
| Ranking and Pre-Profiling Score | Custom numeric field (Employee or Applicant)1:1 | Fully supported | |
| Job Order | Job (BambooHR ATS Job Posting)1:1 | Fully supported | |
| Hiring Manager Self-Service Portal Record | Employee field (supervisor reference)1:1 | Fully supported | |
| Staffing Agency Submission | Custom text field on Applicantlossy | Fully supported | |
| Onboarding Task Record | Employee Onboarding Task (BambooHR) or custom fields1:1 | Fully supported | |
| Reporting Data (Hiring Funnel) | Custom Report (BambooHR) or supplementary exportlossy | Fully supported | |
| Candidate Custom Fields (candidate-level) | Custom fields (Employee or Applicant)lossy | Fully supported | |
| Job Order Custom Fields (requisition-level) | Custom fields (Job record)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.
Candidate Manager gotchas
No public API for incremental sync or third-party integrations
Pipeline stages are fixed and not reconfigurable
Bespoke configurations vary tenant-to-tenant
EDI reporting fields are sensitive personal data with GDPR implications
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
File extraction and data audit
We coordinate with the customer's Candidate Manager account to run the platform's CSV and structured file exports for candidates, job orders, pipeline stages, hiring manager attribution, agency submissions, onboarding records, and reporting data. We validate record counts and field completeness against the customer's expected migration scope. Any fields not available in the standard export are escalated to Candidate Manager support. We also request a sample export run from the customer to validate encoding and delimiter format before the full extraction.
BambooHR API authentication and field discovery
We obtain a BambooHR API key from the customer's account (HTTP Basic Auth with the API key as the username). We call GET /v1/meta/fields to retrieve the complete list of standard and custom field IDs for the Employee, Applicant, and Job objects. Any custom fields the customer wants on the BambooHR side are created before data load begins. We validate that the migration user has sufficient BambooHR permissions (typically Full Admin or a dedicated service account with equivalent access) to create records and write custom fields.
Schema mapping design and custom field provisioning
We design the mapping between Candidate Manager's data model and BambooHR's schema. This includes mapping candidate fields to Employee and Applicant records, mapping job order fields to BambooHR Job records, defining custom fields for stage labels, ranking scores, agency attribution, hiring manager names, and onboarding status, and resolving the hired-candidate-to-employee mapping (which candidates get Employee records versus Applicant-only records). Custom fields are provisioned in BambooHR via API before any data load. The mapping design document is reviewed and signed off by the customer's admin before extraction begins.
Normalization, transform, and deduplication
We normalize the Candidate Manager CSV exports: standardize date formats to ISO 8601, resolve encoding issues (UTF-8 BOM markers, ANSI special characters), deduplicate candidate records (by email as the primary key), and split records into hired and non-hired populations for the Employee versus Applicant routing. We apply the stage-label custom field transformation, map numeric ranking and profiling scores to their target custom fields, and flag any records with missing required fields (first name, last name, email) for the customer's admin to resolve before load.
BambooHR load in dependency order
We load data into BambooHR in dependency order: Employee records (for hired candidates, with hireDate and employmentStatus set), Job records (for job orders), Applicant records (for all candidates with stage preserved as a custom field), custom field values on Employee and Applicant records, and file attachments for onboarding documents. We use BambooHR's employee creation endpoint (POST /v1/employees) for individual records and the custom report endpoint for batch population of custom fields. Rate limiting is handled with exponential backoff on 503 responses. Each phase emits a row-count reconciliation report.
Cutover, validation, and post-migration handoff
We run a delta migration to capture any records modified or added during the load window, then hand off BambooHR as the system of record. We deliver a reconciliation report comparing Candidate Manager source record counts against BambooHR destination record counts. We provide a written inventory of any records that could not be loaded with the reason (missing required field, rate-limit drop, missing BambooHR user for supervisor reference). We do not rebuild Candidate Manager workflows or staffing portal configurations in BambooHR; those are documented as a separate rebuild scope for the customer's admin team.
Platform deep dives
Candidate Manager
Source
Strengths
Weaknesses
BambooHR
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 Candidate Manager and BambooHR.
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
Candidate Manager: Not publicly documented.
Data volume sensitivity
Candidate Manager 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 Candidate Manager to BambooHR migration scoping. Not seeing yours? Book a call.
Walk through your Candidate Manager 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 Candidate Manager
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.