HRMS migration
Field-level mapping, validation, and rollback between OpenCATS and BambooHR. We move data and schema; workflows are rebuilt natively in BambooHR.
OpenCATS
Source
BambooHR
Destination
Compatibility
6 of 10
objects map 1:1 between OpenCATS and BambooHR.
Complexity
BStandard
Timeline
3-5 weeks
Overview
OpenCATS is a self-hosted ATS built for recruiting firms and HR teams that need full data ownership without a vendor relationship. BambooHR is a cloud HRIS with an ATS module — its data model is an HR-centric employee record rather than a recruiting-centric candidate record, which is the core schema difference to resolve during this migration. OpenCATS has no REST API; we connect directly to the customer's MariaDB instance to extract Candidates, Job Orders, Companies, Contacts, Activities, and Saved Lists. We map Skills as tags, preserve Activity timestamps, and flag resume file paths for separate SFTP transfer. BambooHR's 409 Conflict on duplicate employee emails and its per-employee pricing model are the two biggest operational gotchas for teams migrating from OpenCATS's zero-cost infrastructure. We do not migrate OpenCATS Report definitions, Workflow automations, or the OpenCATS Cold Call List structure as records — these require manual rebuild in 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 OpenCATS 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.
OpenCATS
Candidate
BambooHR
Employee or Applicant
1:manyOpenCATS Candidates are the primary ATS record and include resume file paths, Skills tags, and source information. In BambooHR's ATS module, a candidate becomes an Applicant tied to a specific Job posting; in the HRIS module, the same person becomes an Employee record. We preserve the OpenCATS candidate_name, email, phone, address, source, and date_added fields and map Skills to BambooHR tags on the Applicant record. If the customer uses BambooHR's ATS module only, candidates map to Applicants; if HRIS is in scope, we create both Applicant and Employee records and link them post-hire using the shared email address as the dedupe key.
OpenCATS
Job Order
BambooHR
Job
1:1OpenCATS Job Orders map directly to BambooHR Job postings within the ATS module. The job_order_title maps to jobTitle, job_order_description maps to jobDescription, and status maps to BambooHR's open/closed Job status. The OpenCATS assigned Recruiter field maps to the BambooHR Hiring Manager field on the Job. We preserve the OpenCATS job_order_id as an external reference field for reconciliation. If BambooHR's ATS module is not in the customer's subscription, Job Orders do not have a direct native object and require the customer to decide whether to recreate them manually or use BambooHR's HRIS with a custom field workaround.
OpenCATS
Company
BambooHR
External Editor (Organization name on Job)
1:1OpenCATS Companies are client organizations tracked independently from Job Orders, with multiple Contacts per Company record. BambooHR does not have a native Company or client-organization object in the HRIS core; hiring company names are stored as a plain-text field on the Job record only. We flag this schema difference during scoping. Options include: (1) using the BambooHR Company Directory add-on if available, (2) storing client company data in a custom Employee field or a custom ATS field, or (3) accepting that the hierarchical Company-Contact relationship flattens to individual Employee records. The customer chooses the strategy before migration begins.
OpenCATS
Contact
BambooHR
Employee
1:1OpenCATS Contacts (hiring managers and client representatives) map to BambooHR Employee records with a role designation. The contact_first_name, contact_last_name, contact_email, contact_phone, and contact_title fields map to the corresponding BambooHR Employee fields. We set the Employee status to Active for hiring managers and flag the record type in a custom field so the customer can distinguish them from actual employees post-migration.
OpenCATS
Skill
BambooHR
Tag
lossyOpenCATS Skill tags are stored as a comma-separated field on the Candidate record. We extract each distinct Skill value, create a corresponding BambooHR Tag, and associate the Tag with the mapped Applicant record. BambooHR's tag system uses a flat list rather than a hierarchy, so multi-level skill taxonomies from OpenCATS are flattened. Tags created during migration are prefixed with opencats_ to distinguish them from any manually created BambooHR tags.
OpenCATS
Activity
BambooHR
Employee File (Note)
1:1OpenCATS Activity records (calls, emails, notes, status changes) attached to Candidates and Job Orders map to BambooHR Employee File entries on the corresponding Applicant record. The activity_type, activity_date, and activity_notes fields migrate as a BambooHR Note entry. The full activity timeline is preserved in date order, though OpenCATS activity subtypes (cold call, interview, offer) are stored as plain-text tags in BambooHR rather than structured fields. If the candidate is also an Employee record in BambooHR HRIS, Activity records attach to the Employee File for that record.
OpenCATS
Saved List
BambooHR
Tag (group)
lossyOpenCATS Saved Lists are user-curated Candidate collections used for pipeline segmentation and outreach. BambooHR has no Saved List equivalent. We extract the list membership (Candidate ID plus list name) and recreate the grouping as a Tag on each Applicant record, prefixed with the list name. List ordering and ranking within a list do not transfer — BambooHR tags are unordered sets. If the customer relies heavily on Saved Lists for workflow segmentation, we document the list names and member counts during scoping and recommend a BambooHR tag-based alternative.
OpenCATS
User / Recruiter
BambooHR
User
1:1OpenCATS Users and Recruiters map to BambooHR Users by email match. The opencats user_first_name, user_last_name, and user_email fields map to the BambooHR user name and email. OpenCATS role assignments (Admin, Recruiter, Limited) are preserved in a custom field opencats_role__c on the BambooHR User for reference. Owner assignments on OpenCATS Candidate and Job Order records resolve to the matching BambooHR User by email lookup. Users without a match enter a reconciliation queue for the customer's admin to provision in BambooHR before record import continues.
OpenCATS
Resume File
BambooHR
Employee File Attachment
lossyOpenCATS stores resume files as file paths on the server filesystem (PDF, DOC, RTF), not as BLOBs in the database. We flag the file path for each Candidate record and provide a separate SFTP or file-share transfer step to move resume files to BambooHR. Post-transfer, we relink each resume file to the corresponding Applicant record in BambooHR using the Employee Files feature. The customer must ensure the file path structure is preserved when copying and that BambooHR's file size limits (typically 20 MB per attachment) are not exceeded.
OpenCATS
Calendar Event
BambooHR
Time Off Request or Employee Note
1:1OpenCATS Calendar Events (interview schedules, internal meetings) map partially to BambooHR. If the event is an interview linked to a Candidate and a Job Order, we create a Note on the Applicant record with the event title, date, and location. If the event is an internal company event (all-hands, HR deadline), it maps to a BambooHR Time Off Request with a custom note. Recurrence patterns and meeting attendee lists from OpenCATS do not transfer — these require manual recreation in BambooHR's calendar or scheduling tool.
| OpenCATS | BambooHR | Compatibility | |
|---|---|---|---|
| Candidate | Employee or Applicant1:many | Fully supported | |
| Job Order | Job1:1 | Fully supported | |
| Company | External Editor (Organization name on Job)1:1 | Fully supported | |
| Contact | Employee1:1 | Fully supported | |
| Skill | Taglossy | Fully supported | |
| Activity | Employee File (Note)1:1 | Fully supported | |
| Saved List | Tag (group)lossy | Fully supported | |
| User / Recruiter | User1:1 | Fully supported | |
| Resume File | Employee File Attachmentlossy | Fully supported | |
| Calendar Event | Time Off Request or Employee Note1:1 | 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.
OpenCATS gotchas
No REST API forces database-direct migration
Resume files are filesystem references, not embedded blobs
One-week import review delay in OpenCATS native imports
MySQL is unsupported — MariaDB is required
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 database accessibility check
We audit the OpenCATS MariaDB instance for table counts, record volumes per object (Candidates, Job Orders, Companies, Contacts, Activities, Saved Lists), and any custom fields added via OpenCATS community modules. We confirm database engine version (MariaDB 10.6+ required), test read connectivity from our migration environment, and collect the file system paths for all resume attachments. The customer provides a read-only database user and confirms SFTP access to the OpenCATS server. We also review the target BambooHR account for current plan tier, ATS module inclusion, existing employee records, and any active BambooHR tags that may conflict with our migration prefixes.
Schema design and mapping specification
We produce a written mapping specification covering all source objects and their destination equivalents. This includes the Company-to-organization workaround decision, the Skill-to-tag naming convention (opencats_ prefix), the Activity-to-Employee File mapping, the Saved List-to-tag conversion, and the User/Recruiter-to-BambooHR-User email matching rule. For any OpenCATS custom fields not represented in the standard mapping, we document them as custom fields to create in BambooHR before migration begins. The specification also includes the duplicate email reconciliation queue process and the resume file transfer checklist.
Sandbox migration and reconciliation
We run a full migration into a BambooHR sandbox or the production account using representative data volume. The customer's HR admin reconciles record counts against the OpenCATS source (Candidates in, Applicants in; Job Orders in, Jobs in; Activities in, Notes in). We spot-check 25-50 random Applicant records against the source data for field-level accuracy, verify that Skill tags appear correctly, and confirm that resume file paths are flagged for each record. Any mapping corrections — particularly the Company/Contact schema workaround decision — are resolved here, not in production. The customer signs off the mapping specification before the production migration date is set.
User provisioning and email dedupe resolution
We extract every distinct OpenCATS User and Recruiter and match by email against the BambooHR destination User list. Any OpenCATS Owner referenced on a Candidate or Job Order without a matching BambooHR User enters the reconciliation queue. The customer's BambooHR admin provisions missing Users (active or inactive based on whether the original OpenCATS user is still active). We also run the email dedupe scan against the full BambooHR employee and applicant directory to identify any records that exist in both systems under the same email address. The admin resolves each conflict before the production migration batch runs.
Production migration in dependency order
We run production migration in the following dependency order: BambooHR Users first (manually provisioned, verified), then Companies (if the custom organization workaround is active), then Contacts (as Employee records), then Candidates (as Applicant records with Skills as tags), then Job Orders (as Jobs), then Activity histories (as Employee File notes via API), then Saved Lists (as Tags). Each phase emits a row-count reconciliation report before the next phase begins. After all data records complete, we run the resume file transfer via SFTP and relink each file to the corresponding Applicant record in BambooHR.
Cutover, validation, and handoff
We freeze OpenCATS writes during the final cutover window, run a delta migration of any records modified during the migration window, then enable BambooHR as the system of record. We deliver the Workflow and automation rebuild inventory (if the customer was using any OpenCATS community automation modules) and the Saved List rebuild reference document. We support a one-week post-migration window to resolve any data quality issues raised by the HR or recruiting team. We do not configure BambooHR onboarding workflows, ATS pipeline stages, or payroll setup as part of the standard migration scope — these are separate configuration engagements.
Platform deep dives
OpenCATS
Source
Strengths
Weaknesses
BambooHR
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between OpenCATS and BambooHR.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across OpenCATS and BambooHR.
Object compatibility
All 7 core objects map 1:1 between OpenCATS 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
OpenCATS: Not applicable — no public API.
Data volume sensitivity
OpenCATS 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 OpenCATS to BambooHR migration scoping. Not seeing yours? Book a call.
Walk through your OpenCATS 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 OpenCATS
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.