HRMS migration
Field-level mapping, validation, and rollback between HR-ON and BambooHR. We move data and schema; workflows are rebuilt natively in BambooHR.
HR-ON
Source
BambooHR
Destination
Compatibility
5 of 10
objects map 1:1 between HR-ON and BambooHR.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from HR-ON to BambooHR means stepping from a European-market HR platform with API extraction constraints into a globally-deployed HRIS that supports per-employee-per-month pricing, a documented REST API with bulk import capabilities, and a native ecosystem spanning hiring through performance. HR-ON holds Employees, Document Templates, and organizational metadata within systemFields; BambooHR separates these into distinct objects with a dedicated Department hierarchy and a custom field builder. We extract from HR-ON's per-record REST endpoints (JWT auth, no bulk endpoint), normalize date formats across four possible locales, map language-tagged document templates to BambooHR's single-template model with a relinking flag, and reconstruct HR-ON's flattened org metadata into BambooHR's Department and reporting-chain structure. Workflows, automations, and onboarding task sequences do not migrate; we deliver a written inventory for your admin to rebuild inside BambooHR.
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-ON 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.
HR-ON
Employee
BambooHR
Employee
1:1HR-ON Employee records map 1:1 to BambooHR Employee File records using the POST /v1/staff/employees endpoint on HR-ON and the BambooHR employees API. Standard fields (firstName, lastName, workEmail, workPhone, dateOfBirth, hireDate, employmentHistoryStatus) transfer directly. The HR-ON id field becomes the BambooHR employee number, preserving the original identifier for reconciliation. All fields are validated against BambooHR's required-field schema before insert.
HR-ON
Employee systemFields
BambooHR
Custom Fields
lossyHR-ON stores organizational metadata (cost center, employment type, approval chain, location code) within systemFields on each Employee record rather than in separate objects. We extract all non-standard systemFields during scoping, classify them by data type (text, date, picklist), and map them to BambooHR custom fields created via the Custom Field Builder before migration. Any systemFields with incompatible types (e.g., multi-select from HR-ON without a BambooHR multi-select equivalent) are flagged in the mapping document for customer decision.
HR-ON
Document Template
BambooHR
Document Template
1:1HR-ON document templates carry language variants (da_DK, en_US) as separate records, each with a documentType, dateFormat, and language tag. BambooHR supports document templates as a standard feature but does not natively differentiate templates by locale variant. We import the primary-language template and flag the language variant copies in the document mapping inventory, listing each with its source language code so the customer can reassign post-migration if bilingual documents are needed.
HR-ON
Organizational Structure (systemFields)
BambooHR
Department
lossyHR-ON does not expose a separate Department object; org metadata lives as systemFields on Employee (department name, division, location, reporting manager id). We parse these systemFields, deduplicate department names, create Department records in BambooHR, and resolve the reporting manager id against the migrated Employee records to build the correct manager-employee hierarchy. If HR-ON stores flat text manager names rather than IDs, we perform fuzzy name matching against the imported Employees.
HR-ON
User
BambooHR
User
1:1HR-ON user accounts map to BambooHR user accounts. We extract user email, display name, role, and status. HR-ON-specific permission structures (e.g., granular Danish-document-access roles) map to BambooHR's role model as the closest equivalent, with any permissions that have no BambooHR analog flagged in the user mapping inventory for the customer's admin to configure post-migration.
HR-ON
Document (generated)
BambooHR
Files
1:1HR-ON generates documents from templates and stores them with dateFormat and language metadata, either as binary blobs or as PDF links. We export the document content and metadata, then attach the files to the corresponding BambooHR Employee record under the Files tab. Document naming conventions from HR-ON are preserved in the file name. Any documents that cannot be linked because the source employee was not found in BambooHR are placed in an unassigned queue with a reference to the original HR-ON employee ID.
HR-ON
Date metadata
BambooHR
Date fields
lossyHR-ON stores dates in DD-MM-YYYY, DD/MM/YYYY, YYYY-MM-DD, or written form depending on the employee record's locale and template settings. We normalize all date values to ISO 8601 (YYYY-MM-DD) during extraction before loading into BambooHR. Date fields confirmed include dateOfBirth, hireDate, terminationDate, and any date custom fields carried from HR-ON systemFields.
HR-ON
Language Preferences
BambooHR
Language fields
1:1HR-ON explicitly stores language at da_DK (Danish) and en_US (English) per template and per employee. We carry the language preference through to BambooHR's language field on the Employee record, preserving the source locale code. BambooHR's interface localization respects this setting for the employee-facing portal.
HR-ON
Employment status (systemFields)
BambooHR
Employment Status
lossyHR-ON stores employment status (active, inactive, on leave, terminated) as systemFields on Employee. BambooHR has a standard employmentStatus field with account-specific options. We map HR-ON status values to BambooHR status options during scoping, with unmapped statuses flagged for the customer to configure as BambooHR employment status options before production migration.
HR-ON
Custom Fields (Employee)
BambooHR
Custom Fields
lossyHR-ON custom properties on Employees that are not systemFields are extracted as custom fields on the Employee record. We map the field name, data type, and current value to a BambooHR custom field of matching or nearest type (short answer, long answer, checkboxes to multi-select picklist). Fields with HR-ON-specific picklist values are mapped to BambooHR picklist options with unmapped options flagged for the admin to resolve.
| HR-ON | BambooHR | Compatibility | |
|---|---|---|---|
| Employee | Employee1:1 | Fully supported | |
| Employee systemFields | Custom Fieldslossy | Fully supported | |
| Document Template | Document Template1:1 | Fully supported | |
| Organizational Structure (systemFields) | Departmentlossy | Fully supported | |
| User | User1:1 | Fully supported | |
| Document (generated) | Files1:1 | Fully supported | |
| Date metadata | Date fieldslossy | Fully supported | |
| Language Preferences | Language fields1:1 | Fully supported | |
| Employment status (systemFields) | Employment Statuslossy | Fully supported | |
| Custom Fields (Employee) | Custom Fieldslossy | 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-ON gotchas
No bulk export endpoint forces sequential reads
Date format normalization required before import
Language-specific document types may not map directly
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 scoping
We audit the source HR-ON account: total employee records, active and inactive status distribution, document template count with language variants, systemFields inventory with data types and picklist values, custom field count, and user account list with role assignments. We review the destination BambooHR account structure: existing departments, configured employment status options, custom field setup, and whether payroll, time tracking, or performance add-ons are active or planned. The output is a written scoping document with record counts, field-level mapping table, and a migration schedule with a freeze-window recommendation.
Schema configuration in BambooHR
We configure the BambooHR destination before any data is loaded. This includes creating Department records from HR-ON's parsed systemFields, setting up custom fields via BambooHR's Custom Field Builder to receive HR-ON systemFields and non-standard properties, configuring employment status options to match HR-ON's status values, and establishing user roles that approximate HR-ON's permission model. Any employment status values in HR-ON without a BambooHR equivalent are flagged for the customer to add as BambooHR status options before production migration begins.
Sandbox migration and validation
We run a full migration into a BambooHR test account using production-equivalent data volume. The customer's HR lead spot-checks 25-50 randomly selected employee records against the HR-ON source, validates document attachments on five to ten records, confirms the manager hierarchy reflects the HR-ON reporting chain, and reviews custom field values for accuracy. Any field mapping corrections, missing picklist options, or department mapping errors are documented and corrected before the production migration phase begins.
Data extraction with sequential-API handling
We extract from HR-ON using per-record authenticated calls to the employee endpoints with JWT bearer tokens. Records are processed in batches of 50 with retry logic (exponential backoff up to three retries) on any 429 or 5xx responses. Date normalization to ISO 8601 runs as a transform step on each record before it enters the migration staging area. SystemFields are parsed separately and routed to the custom field mapping pipeline. Document blobs and PDF links are extracted and staged with their employee ID reference and language metadata.
Production migration in dependency order
We load data into BambooHR in dependency order: Departments first (for the department reference on Employee), then Employees with all standard and custom fields mapped, then Files (document attachments linked to Employee records), then Users. Each phase produces a row-count reconciliation report against the HR-ON source before the next phase begins. If the customer has an existing BambooHR account with live data, we run the migration in a freeze window where no new writes occur in HR-ON; if this is a new BambooHR account, we migrate directly and the customer runs HR-ON in read-only mode during the delta window.
Cutover, validation, and rebuild handoff
We freeze writes in HR-ON at cutover, extract any records modified during the migration window as a delta load, then enable BambooHR as the system of record. We deliver a full record reconciliation report (source count vs. destination count by object), a document relinking guide listing each language-variant template from HR-ON with its recommended BambooHR template assignment, a user-role mapping table noting any HR-ON-specific permissions without a BambooHR equivalent, and a custom field inventory with any fields that could not be type-matched. We do not rebuild HR-ON workflows or onboarding task sequences inside BambooHR; these are documented in a separate rebuild scope for the customer's admin team.
Platform deep dives
HR-ON
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 HR-ON 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
HR-ON: Not publicly documented..
Data volume sensitivity
HR-ON 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-ON to BambooHR migration scoping. Not seeing yours? Book a call.
Walk through your HR-ON 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 HR-ON
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.