HRMS migration
Field-level mapping, validation, and rollback between Aperio and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Aperio
Source
Bullhorn ATS & CRM
Destination
Compatibility
6 of 12
objects map 1:1 between Aperio and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Moving from Aperio to Bullhorn is a category shift: Aperio is a performance management system that manages review cycles, goals, and competencies for employees, while Bullhorn is a full ATS and CRM built for staffing agencies. There is no direct object-to-object correspondence. We extract employee profiles, review history, and goal hierarchies from Aperio's CSV exports, then map them into Bullhorn's Candidate and Contact records, custom objects for performance data, and structured notes for review artifacts. Aperio has no documented public API, which makes every migration a CSV-to-REST-API project with longer timelines than API-based migrations. Bullhorn supports custom objects (up to 10 on Front Office Growth and Enterprise tiers, each with 55 fields) where we store performance review cycles and goal data that does not fit Bullhorn's standard ATS schema. We do not migrate Aperio's review templates, competency frameworks, or development plans as functional configuration; we deliver these as written inventories for the customer's Bullhorn admin to 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.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Aperio 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.
Aperio
Employee
Bullhorn ATS & CRM
Candidate and Contact
1:manyAperio Employee records map to Bullhorn Candidate (for recruiting-relevant employee data such as internal hires, former contractors being considered for placement) and Bullhorn Contact (for HR-adjacent records such as former candidates maintained for reference). We extract name, title, department, manager, hire date, email, and phone from Aperio's employee export and load into Bullhorn's Candidate and Contact records via the Bullhorn REST API. The manager relationship is preserved as a custom Candidate or Contact field pointing to the manager's record ID, since Bullhorn does not have a native employee hierarchy object.
Aperio
Department
Bullhorn ATS & CRM
Corporation and custom Department field
lossyAperio Department records map to Bullhorn Corporation (Company) if the organization treats departments as client entities, or to a custom Candidate and Contact field for internal org structure. Bullhorn's Corporation object is designed for external client companies rather than internal departments, so we configure a custom field department__c on Candidate and Contact and populate it from Aperio's department name during import. If the customer maintains a separate department roster, we create a Bullhorn custom object department__sp with a lookup to Candidates.
Aperio
Performance Review
Bullhorn ATS & CRM
Custom Object (Review Cycle)
1:1Aperio Performance Review records map to a Bullhorn custom object review_cycle__c (Front Office Growth or Enterprise tier required for custom objects). Each review maps to its cycle, the reviewee (Candidate or Contact), reviewer (Candidate or Contact), submitted ratings, and reviewer comments. We store review status, rating values, and competency scores as custom fields within the review_cycle__c object. Bullhorn ATS and ATS Growth tiers do not support custom objects; for these tiers, we store review metadata as structured notes attached to the Candidate record, which limits searchability and reporting.
Aperio
Goal
Bullhorn ATS & CRM
Custom Object (Goal)
1:1Aperio Goal records map to a Bullhorn custom object goal__c. Each goal stores title, description, status, start date, due date, and weight. We reconstruct parent-child hierarchies by extracting goal_id and parent_goal_id pairs from Aperio's flat CSV export and creating a custom field parent_goal__c on the goal__c object that references the parent's Bullhorn ID. We flag circular references and orphaned child goals during the reconstruction phase. Goal__c is available on Bullhorn Front Office Growth and Enterprise tiers only.
Aperio
Review Cycle
Bullhorn ATS & CRM
Custom Object (Review Cycle)
lossyAperio Review Cycles (the temporal container for batches of reviews) map to a review_cycle container within the Bullhorn custom object. We extract cycle metadata including cycle name, start date, end date, status, and associated template name, and store these as fields on the review_cycle__c object. The Bullhorn custom object's ID links individual performance reviews to their parent cycle.
Aperio
Review Template
Bullhorn ATS & CRM
Written inventory (not migrated)
1:1Aperio Review Templates define the structure of reviews including competency sections, rating scales, and mandatory fields. Bullhorn has no native review template object. We export template configurations from Aperio, document the template structure (sections, competencies, rating scales, required fields), and deliver a written template inventory to the customer's Bullhorn admin. The admin rebuilds templates using Bullhorn's custom object field structure or a supported partner tool.
Aperio
Competency
Bullhorn ATS & CRM
Custom Object (Competency Library)
1:1Aperio Competency library records map to a Bullhorn custom object competency__c. Each competency stores the competency name, description, and rating definitions. We link competency records to review_cycle__c records via a junction object or a multi-select picklist on review_cycle__c depending on the customer's Bullhorn edition. Custom picklists are limited to 55 per custom object; we flag any competency libraries exceeding this limit.
Aperio
Development Plan
Bullhorn ATS & CRM
Custom Object (Development Plan)
1:1Aperio Development Plans (growth actions tied to employees and review outcomes) map to a Bullhorn custom object development_plan__c. Each plan stores the associated employee (Candidate or Contact lookup), plan title, milestones with target dates, status, and any linked goals. We extract milestone data as structured child records within development_plan__c or as a related note series depending on Bullhorn's field capacity constraints.
Aperio
Job Title
Bullhorn ATS & CRM
Candidate Title and custom Job Title field
1:1Aperio Job Title records map to Bullhorn's Candidate Title field for primary job title and to a custom field job_title__c on the Candidate record for secondary or historical titles. Job titles used as criteria within Aperio review templates are preserved in the template inventory document and mapped to Bullhorn custom picklist values where applicable.
Aperio
Custom Fields
Bullhorn ATS & CRM
Custom Fields on relevant Bullhorn objects
lossyAperio custom fields on Reviews, Goals, and Development Plans require field-by-field mapping to Bullhorn custom fields. We identify all active custom fields during scoping, export sample values, and map them by type: Aperio picklists map to Bullhorn drop-down custom fields, multi-select maps to multi-select picklist, text maps to text, date maps to date. Value sets that differ from Bullhorn defaults are flagged for the customer's admin to resolve before migration. Bullhorn's 55-field limit per custom object applies and may require consolidation for complex Aperio configurations.
Aperio
Employee Manager Relationship
Bullhorn ATS & CRM
Custom lookup field on Candidate/Contact
lossyAperio's manager relationship on Employee records (manager_id referencing another Employee) does not have a native Bullhorn equivalent because Bullhorn does not have an employee hierarchy object. We store the manager relationship as a custom Candidate or Contact field (manager__c) that references the Bullhorn Candidate ID of the manager. We resolve these references after the initial Candidate import completes, using email matching as the dedupe key.
Aperio
Goal Hierarchy
Bullhorn ATS & CRM
Custom Object with parent_goal__c lookup
lossyAperio's nested goal structures flatten during CSV export to parent_goal_id fields that do not self-describe. We extract all goal_id and parent_goal_id pairs, load goals into the Bullhorn goal__c custom object, then reconstruct the hierarchy by populating the parent_goal__c lookup field with the resolved Bullhorn ID. We run a circular reference check and flag any orphaned child goals (goals whose parent_goal_id references a goal that was not exported or not migrated) for customer resolution.
| Aperio | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate and Contact1:many | Fully supported | |
| Department | Corporation and custom Department fieldlossy | Fully supported | |
| Performance Review | Custom Object (Review Cycle)1:1 | Fully supported | |
| Goal | Custom Object (Goal)1:1 | Fully supported | |
| Review Cycle | Custom Object (Review Cycle)lossy | Fully supported | |
| Review Template | Written inventory (not migrated)1:1 | Fully supported | |
| Competency | Custom Object (Competency Library)1:1 | Fully supported | |
| Development Plan | Custom Object (Development Plan)1:1 | Fully supported | |
| Job Title | Candidate Title and custom Job Title field1:1 | Fully supported | |
| Custom Fields | Custom Fields on relevant Bullhorn objectslossy | Mapping required | |
| Employee Manager Relationship | Custom lookup field on Candidate/Contactlossy | Fully supported | |
| Goal Hierarchy | Custom Object with parent_goal__c lookuplossy | 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.
Aperio gotchas
No public API means CSV-only migration exports
Goal parent-child hierarchies export as flat records
Custom fields require manual value-set mapping
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 CSV export scoping
We work with an Aperio admin to export all available CSV data: Employees, Departments, Performance Reviews (all cycles), Goals (all levels including parent-child relationships), Review Templates, Competencies, Development Plans, Job Titles, and any active custom fields. We also capture field-level metadata (column names, sample values, data types) and validate export completeness. Because Aperio has no API, we document the export date and time, note any filtering applied during export, and confirm whether the export includes inactive records. This discovery output establishes the migration baseline and reveals any data shape issues before we design the Bullhorn schema.
Bullhorn edition validation and custom object provisioning
We validate the customer's Bullhorn edition (Starter, Core, Pro, Front Office Growth, Enterprise) to confirm custom object capacity. If the migration scope requires more custom objects than the current tier supports, we recommend an upgrade to Front Office Growth or Enterprise before migration begins. We provision the required custom objects in Bullhorn's sandbox or development environment: review_cycle__c, goal__c, competency__c, development_plan__c, and any additional objects for custom field storage. Each custom object's 55-field limit is respected during field design, and any overflow is documented as a follow-on migration item.
Schema mapping and value-set reconciliation
We map every Aperio field to a Bullhorn field or custom field with explicit type matching. Custom field value sets from Aperio are reconciled against Bullhorn picklist definitions; discrepancies are documented with proposed mappings for customer approval. The manager relationship, goal parent-child links, and department mapping are designed in this phase. We validate that all required fields in Bullhorn (Candidate first name, last name, and status) have corresponding values from Aperio; missing required fields are flagged for the customer's Aperio admin to populate before export.
Sandbox migration and reconciliation
We run a full migration into the Bullhorn sandbox using production-like data volume. The customer's HR and IT leads reconcile record counts (employees in, candidates and contacts in, reviews in, goals in), spot-check 25-50 random records against the Aperio source, validate goal hierarchy reconstruction, and confirm custom field population. Any mapping corrections, missing required fields, or value-set discrepancies surface here. We do not proceed to production migration until the sandbox migration is signed off.
Production migration in dependency order
We run production migration in record-dependency order: Job Titles and Departments (reference data), then Candidates and Contacts (from Aperio Employees), then Goals (with parent_goal__c links resolved after the initial goal load), then Review Cycles (custom object metadata), then Performance Reviews (linked to review_cycle__c and reviewee), then Development Plans, then custom field final values. Each phase emits a row-count reconciliation report before the next phase begins. Goal hierarchy reconstruction runs after the initial goal load completes so that all goal IDs are available for parent linking.
Cutover, validation, and configuration rebuild handoff
We freeze Aperio writes during cutover, run a final delta migration of any records modified during the migration window, then enable Bullhorn as the system of record for migrated data. We deliver the review template inventory, competency library inventory, and development plan structure document to the customer's Bullhorn admin for manual rebuild. We support a one-week hypercare window for reconciliation issues. We do not rebuild Aperio templates, competency frameworks, or development plan logic inside the migration scope; these are separate configuration engagements.
Platform deep dives
Aperio
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 Aperio 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
Aperio: Not publicly documented — no published API surface, so rate limits are not specified externally..
Data volume sensitivity
Aperio 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 Aperio to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Aperio 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 Aperio
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.