HRMS migration
Field-level mapping, validation, and rollback between ChartHop and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
ChartHop
Source
Bullhorn ATS & CRM
Destination
Compatibility
6 of 14
objects map 1:1 between ChartHop and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from ChartHop to Bullhorn is a platform-type transition: ChartHop is a people-operations HRMS centered on employee records, org charts, and headcount planning; Bullhorn is a staffing ATS and CRM built around candidates, client companies, job orders, and placements. The migration maps ChartHop's People to Bullhorn Candidate, Jobs to JobOrder, and Departments to a combination of JobOrder corporate references and Custom Objects for org hierarchy. Compensation bands, performance review responses, and engagement survey aggregates migrate into Bullhorn Custom Objects only if the customer's Bullhorn edition supports them. Headcount planning scenarios cannot migrate because ChartHop does not expose them via public API. We deliver an itemized schema document for Bullhorn Support to create Custom Objects before migration begins, and we flag each data type that has no Bullhorn analog for manual re-entry post-migration.
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 ChartHop 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.
ChartHop
Person (Employee)
Bullhorn ATS & CRM
Candidate
1:1ChartHop People records map to Bullhorn Candidate. All standard profile fields (firstName, lastName, email, phone with country code, jobTitle, startDate, employmentType) map directly. Custom fields migrate into Bullhorn custom fields on the Candidate entity. Active candidates in Bullhorn are distinguished from inactive by the candidate's employmentStatus mapped to the Candidate isDeleted flag. We resolve manager relationships during migration by cross-referencing manager email against the Bullhorn User table.
ChartHop
Person Custom Fields
Bullhorn ATS & CRM
Candidate Custom Fields (customField1-customField20)
lossyChartHop unlimited custom fields on People must map into Bullhorn's Candidate entity custom fields. Bullhorn ATS Growth edition has no Candidate custom fields; Bullhorn ATS has 2 Custom Objects; Front Office Growth and Enterprise editions support up to 10 Custom Objects with 55 fields each. We audit every ChartHop custom field during scoping, deduplicate near-duplicates (e.g., 'Comp Band' vs 'Compensation Band'), and generate a Custom Object Setup Sheet for Bullhorn Support to create before migration. Custom field types (text, date, multiple choice, yes/no) map to equivalent Bullhorn field edit types.
ChartHop
Job (Position)
Bullhorn ATS & CRM
JobOrder
1:1ChartHop Job records — title, department, employmentType, compensationBand, jobLevel — map to Bullhorn JobOrder. jobTitle in ChartHop becomes title in Bullhorn JobOrder. The ChartHop Job status (active, closed, on-hold) maps to JobOrder status (Open, Closed, Canceled). compensationBand data from ChartHop migrates to JobOrder custom fields; Bullhorn's standard JobOrder does not have a native compensation band structure. jobLevel maps to a Bullhorn custom field if the customer requires level classification at the JobOrder level.
ChartHop
Department
Bullhorn ATS & CRM
CorporateDepartment (via ClientCorporation or JobOrder reference)
lossyChartHop Department records represent internal organizational units. Bullhorn does not have a native internal-department object. We map ChartHop Departments to Bullhorn CorporateDepartment if the customer's Bullhorn edition includes this object, or to a custom field on JobOrder (department__c) and Candidate (primaryDepartment__c) for filtering and reporting. The department tree's parent-child hierarchy is preserved as a custom text field (departmentPath__c) since Bullhorn's CorporateDepartment does not natively support recursive parent-child trees.
ChartHop
Reporting Relationship (Manager)
Bullhorn ATS & CRM
User lookup on Candidate
1:1ChartHop's manager field on each Person record stores a reference to another Person record. We resolve this at migration time by extracting the manager's email from ChartHop and matching it against Bullhorn User records. If the manager is not a Bullhorn User, we assign the record to the nearest available Bullhorn User and flag the orphan for admin review. Bullhorn does not have a native reporting-structure object, so manager relationships are stored as a custom lookup field on the Candidate record pointing to the Bullhorn User who is the hiring manager.
ChartHop
Matrix Team
Bullhorn ATS & CRM
Custom Object (customObject1s-matrixTeam)
lossyChartHop Matrix Teams model cross-functional reporting where one employee has multiple managers. Bullhorn has no native multi-manager structure. We export matrix assignments (person email, team name, role, primary manager, secondary manager) and load them into a Bullhorn Custom Object. The custom object links to Bullhorn Candidate records via a custom lookup field. Access controls on the custom object restrict visibility to relevant departments. Bullhorn Support must create this Custom Object before migration; the setup sheet is included in the pre-migration handoff package.
ChartHop
Compensation (base, cash, variable, equity, total)
Bullhorn ATS & CRM
Custom Object or Candidate custom fields
lossyChartHop compensation fields (baseCompensation, cashCompensation, variableCompensation, equityCompensation, totalCompensation, payFrequency) map to Bullhorn Candidate custom fields or a Custom Object linked to Candidate. We determine the target based on the customer's Bullhorn edition and Custom Object budget. Compensation band data from ChartHop's Compensation module migrates as a separate export pass with company, bandMin, bandMid, bandMax, and jobLevel fields loaded into a compensation-bands Custom Object if available. Historical compensation cycles are not migrated as structured records unless a Custom Object is allocated for them.
ChartHop
Time Off and PTO Balances
Bullhorn ATS & CRM
Bullhorn Time & Expense or Candidate custom fields
lossyChartHop PTO balances (current balance, accrual rate, policy type) are exported as a snapshot. Bullhorn has no native PTO tracking object. The migration maps current PTO balances to Bullhorn Candidate custom fields (ptoBalance__c, ptoAccrualRate__c, ptoPolicyType__c) if the customer does not license Bullhorn Time & Expense. Historical accrual logs require a separate export pass and are delivered as a CSV reference document for the customer's HR admin to reconcile against their payroll system. PTO data does not map into Bullhorn's standard ATS or CRM objects.
ChartHop
Performance Review (cycles, forms, responses)
Bullhorn ATS & CRM
Custom Object or Candidate attachments
lossyChartHop Performance review cycles, review forms, and submitted responses are exported as structured records. Bullhorn has no native performance review object. We map completed review data (reviewer name, reviewee email, reviewPeriod, overallRating, responseText) into a Bullhorn Custom Object linked to the Candidate record, provided the Bullhorn edition supports Custom Objects. Review templates with custom question types require manual re-creation in Bullhorn Forms or as Bullhorn custom fields. We deliver a written inventory of each review cycle with its field mapping so the customer's admin can confirm completeness before migration.
ChartHop
Goals (company, team, individual objectives and progress)
Bullhorn ATS & CRM
Custom Object linked to Candidate or Opportunity
lossyChartHop Goals store company, team, and individual objectives with progress values linked to live people data. Bullhorn has no native goal-tracking object. We export goal hierarchies (goalName, goalType, ownerEmail, parentGoal, progressPercent, status) and load them into a Bullhorn Custom Object linked to the relevant Candidate record via a lookup. Cascading goal dependencies are preserved as a text field listing the parent goal ID since Bullhorn Custom Objects do not support native parent-child relationship fields without Salesforce Object creation. Goal rebuild in Bullhorn depends on whether the customer licenses Bullhorn Automation (Herefish) for task-based goal tracking.
ChartHop
Engagement Survey (responses, aggregates, benchmarks)
Bullhorn ATS & CRM
Custom Object (if edition supports) or reference document
lossyChartHop Engagement survey responses and aggregate results are exported with anonymization where required. Bullhorn has no native engagement survey object. Survey metadata (question text, participation rate, benchmark data) is preserved in a Bullhorn Custom Object if the Bullhorn edition supports Custom Objects. Anonymized individual responses migrate as aggregate records to avoid re-identification risk. Survey creation and distribution tools do not migrate; we recommend Bullhorn's native survey capabilities or a third-party integration as the replacement path.
ChartHop
Documents and Files (employee attachments)
Bullhorn ATS & CRM
Candidate Document storage (ContentDocument via ContentDocumentLink)
1:1ChartHop file uploads per employee profile (miscellaneous and field-linked files) migrate as Bullhorn ContentDocument records linked to the Candidate via ContentDocumentLink. All files must be under Bullhorn's 100MB limit per document; files exceeding this threshold are flagged and delivered as a separate ZIP archive for manual upload. We preserve the original file name, file type, upload date, and the ChartHop custom field the file is linked to (mapped to a Bullhorn custom field on the Candidate for reference). File access controls from ChartHop do not transfer; Bullhorn document security is managed through Bullhorn's own user-role permissions.
ChartHop
Org Chart View
Bullhorn ATS & CRM
Reference document and Bullhorn department reporting
1:1ChartHop's org chart is a rendered view of People, Jobs, and reporting lines. Bullhorn does not render org charts. We export the underlying data — every Person record with their manager reference, department, and job title — as a structured reference document (CSV + JSON) that the customer can use to re-create the org view in a third-party visualization tool or within Bullhorn's reporting structure. Matrix reporting relationships are included in this export and are separately mapped via the Matrix Team Custom Object (see mapping row 6). The visual layout itself does not migrate.
ChartHop
Headcount Planning Scenarios
Bullhorn ATS & CRM
Reference document only
1:1ChartHop headcount planning scenarios — including proposed hires, budget impacts, approval statuses, and scenario types (create, update, terminate/backfill, promotion, budget, custom) — are inaccessible via ChartHop's public API. We flag the existence of active scenarios during pre-migration scoping and export them as reference documents (CSV) for the customer's HR and Finance teams to re-create manually in Bullhorn or a third-party headcount planning tool. Bullhorn does not have a native headcount planning module; customers typically integrate Bullhorn with an HRMS (Workday, BambooHR) or use Bullhorn's Custom Objects to model headcount scenarios post-migration.
| ChartHop | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Person (Employee) | Candidate1:1 | Fully supported | |
| Person Custom Fields | Candidate Custom Fields (customField1-customField20)lossy | Fully supported | |
| Job (Position) | JobOrder1:1 | Fully supported | |
| Department | CorporateDepartment (via ClientCorporation or JobOrder reference)lossy | Fully supported | |
| Reporting Relationship (Manager) | User lookup on Candidate1:1 | Fully supported | |
| Matrix Team | Custom Object (customObject1s-matrixTeam)lossy | Fully supported | |
| Compensation (base, cash, variable, equity, total) | Custom Object or Candidate custom fieldslossy | Fully supported | |
| Time Off and PTO Balances | Bullhorn Time & Expense or Candidate custom fieldslossy | Mapping required | |
| Performance Review (cycles, forms, responses) | Custom Object or Candidate attachmentslossy | Fully supported | |
| Goals (company, team, individual objectives and progress) | Custom Object linked to Candidate or Opportunitylossy | Fully supported | |
| Engagement Survey (responses, aggregates, benchmarks) | Custom Object (if edition supports) or reference documentlossy | Fully supported | |
| Documents and Files (employee attachments) | Candidate Document storage (ContentDocument via ContentDocumentLink)1:1 | Fully supported | |
| Org Chart View | Reference document and Bullhorn department reporting1:1 | Fully supported | |
| Headcount Planning Scenarios | Reference document only1:1 | Not 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.
ChartHop gotchas
Headcount planning scenarios are not accessible via API
Spreadsheet imports require XLSX format and strict formatting rules
ATS integration with Jobvite requires exact email matching
Internal transfers are not supported in ATS sync
Custom fields proliferate without governance by default
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
Discovery and Bullhorn edition confirmation
We audit the customer's ChartHop instance: record counts (People, Jobs, Departments, custom fields, matrix teams, performance reviews, goals, engagement surveys), active headcount planning scenarios, payroll connector type, and any active ATS integrations (Jobvite). We simultaneously confirm the target Bullhorn edition (ATS Growth, Bullhorn ATS, Front Office Growth, or Enterprise) based on Custom Object count requirements identified in the audit. The discovery output is a written migration scope with record counts per object, a Custom Object count budget against the confirmed Bullhorn edition, and a list of data types that have no native Bullhorn home requiring custom field or manual re-entry decisions.
Custom Object schema coordination with Bullhorn Support
Before any data extraction begins, we submit the Custom Object Setup Sheet to Bullhorn Support to create all required Custom Objects (matrix teams, compensation history, performance reviews, goals, engagement surveys, PTO if not using Bullhorn Time & Expense). Bullhorn Support requires a completed spreadsheet with field names, edit types, required flags, and hints per field. This step can take 3-10 business days depending on Bullhorn Support queue depth. We initiate this ticket as early as possible in the project to avoid blocking the migration timeline.
Sandbox migration and reconciliation
We run a full migration into the customer's Bullhorn Sandbox (Partial Copy or Full Copy) using production-like data volume. The customer's HR and staffing leads reconcile record counts against ChartHop source data, spot-check 25-50 randomly selected records for field-level accuracy, and verify that custom fields appear correctly on the record layout. Schema corrections, field type adjustments, and Custom Object field additions happen in Sandbox, not production. Bullhorn Support handles any Custom Object edits required after initial creation.
ChartHop data extraction in dependency order
We extract ChartHop data in dependency order: People (base profile, custom fields, manager email), Jobs (with compensation band references), Departments (with parent-child relationships), Matrix Team assignments, Compensation snapshots, PTO balances, Performance review records, Goals, Engagement survey aggregates, and Document file references. Headcount planning scenarios are extracted as CSV reference documents (read-only) and delivered separately for manual re-creation. All spreadsheet exports from ChartHop are validated for XLSX format and country-code compliance before entering the migration pipeline.
Production migration with bulk API
Production migration runs in dependency order: Bullhorn Users (resolved by email match against ChartHop manager and recruiter email list), ClientCorporations (if mapping ChartHop company-linked jobs), Candidates (with manager UserId resolved, custom fields populated, and manager relationships linked), JobOrders (with department references, compensation band fields, and status mapped), Custom Objects (matrix teams, compensation history, performance reviews, goals, engagement surveys — only after Bullhorn Support confirms Custom Object creation), Documents (ContentDocument records via Bullhorn file API with 100MB per-file limit enforced). Each phase emits a reconciliation report showing record count in versus record count successfully loaded.
Cutover, validation, and non-migrated artifact handoff
We freeze ChartHop write access during the cutover window, run a final delta migration for any records modified during the migration phase, then mark Bullhorn as the system of record. We deliver: (1) a headcount planning scenarios reference CSV for manual re-creation, (2) a Bullhorn Custom Object field mapping document for admin review, (3) a Bullhorn Time & Expense integration recommendation if PTO tracking is required, (4) a performance review template rebuild guide. We support a one-week hypercare window for reconciliation issues. We do not rebuild Bullhorn automations, workflows, or onboarding sequences inside the migration scope.
Platform deep dives
ChartHop
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
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 ChartHop and Bullhorn ATS & CRM.
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
ChartHop: Not publicly documented.
Data volume sensitivity
ChartHop 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 ChartHop to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your ChartHop 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 ChartHop
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.