HRMS migration
Field-level mapping, validation, and rollback between Aotal and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Aotal
Source
Bullhorn ATS & CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Aotal and Bullhorn ATS & CRM.
Complexity
CModerate
Timeline
4-6 weeks
Overview
Moving from Aotal to Bullhorn is a platform-type migration: Aotal is a New Zealand-focused cloud HRMS covering recruitment, onboarding, performance, and learning; Bullhorn is an ATS and CRM purpose-built for staffing agencies. The schema gap is significant. Bullhorn has no native equivalents for Aotal's performance cycles, competency frameworks, learning records, or onboarding checklists. We close that gap by pre-designing Bullhorn Custom Objects for each Aotal module, using Bullhorn's Front Office Growth edition (up to 10 Custom Objects with 55 fields each) or mapping to standard fields where semantically appropriate. We sequence the load order to resolve employee-to-candidate normalization, role-to-placement lookups, and department-to-corporate-structure relationships before cutover. Workflows, automations, and learning management configurations do not migrate; we deliver a written inventory for your admin to rebuild 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 Aotal 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.
Aotal
Employee
Bullhorn ATS & CRM
Candidate
1:1Aotal Employee records map to Bullhorn Candidate records as the primary talent entity. Employee first name, last name, date of birth, contact details, address, employment status, and hire date transfer to corresponding Bullhorn Candidate fields. We use Candidate as the target because Bullhorn is an ATS-centric system where the employee record is created from a placement event; the candidate becomes the person record that persists through placement. Historical employee status changes (new hire, active, on leave, terminated) migrate as Candidate record updates with custom fields tracking employment state.
Aotal
Department
Bullhorn ATS & CRM
ClientCorporation or Custom Object
1:1Aotal Department records require mapping based on whether they represent the agency's internal org structure or client organisations. Internal departments map to Bullhorn Corporate (ClientCorporation) records with a custom field department_type__c = 'internal' for reconciliation. Client organisations that Aotal manages as hiring entities map directly to Bullhorn ClientCorporation. We resolve the lookup relationship to ensure Candidate records can reference the correct corporate entity.
Aotal
Role / Position
Bullhorn ATS & CRM
JobOrder or Custom Object
1:1Aotal Role records (job titles, position descriptions, pay grades, FTE status) map to Bullhorn JobOrder as the recruiting representation, with role-specific fields stored in a Bullhorn Custom Object (role_profile__c) attached to the JobOrder. For agencies that use Aotal roles to track internal headcount planning rather than recruiting, the Custom Object attaches to Candidate or ClientCorporation. We confirm the role usage pattern during discovery.
Aotal
Performance Review / Rating
Bullhorn ATS & CRM
Custom Object (performance_review__c)
1:1Aotal performance review cycles with ratings, goals, and manager feedback have no native Bullhorn equivalent. We design a Bullhorn Custom Object (performance_review__c) with fields for review period (start_date__c, end_date__c), rating score (rating_value__c), reviewer name (reviewer__c, picker:user), goals, and free-text feedback. The Custom Object attaches to the Candidate record. Bullhorn Front Office Growth/Enterprise supports up to 10 Custom Objects with 55 fields each; we allocate one to performance data.
Aotal
Competency Profile
Bullhorn ATS & CRM
Custom Object (competency_profile__c)
1:1Aotal competency frameworks (skills, certifications, qualifications, licensing) map to a Bullhorn Custom Object (competency_profile__c) with up to 55 fields covering skill name, proficiency level, certification expiry, and issuing body. Bullhorn's Picker fields allow linking competencies to Candidate records. For agencies with licensing or compliance requirements (common in NZ healthcare, construction, and trades), we include expiry date fields with a note to configure Bullhorn reminders or an external compliance tool post-migration.
Aotal
Training Record
Bullhorn ATS & CRM
Custom Object (training_record__c)
1:1Aotal training completion records, course enrollments, and certification achievements map to a Bullhorn Custom Object (training_record__c) attached to the Candidate. Fields include course name, completion date, expiry date, training provider, and delivery method (online, in-person). Bullhorn ATS Growth does not include Custom Objects; we recommend Bullhorn ATS (2 Custom Objects) or Front Office Growth (10 Custom Objects) for this migration scope.
Aotal
Onboarding Checklist
Bullhorn ATS & CRM
Custom Object (onboarding_checklist__c)
1:1Aotal onboarding task lists and completion status for new hires map to a Bullhorn Custom Object (onboarding_checklist__c) attached to the Placement or Candidate record. Each checklist item migrates as a row with fields for task name, required/optional flag, due date, completion status, and assigned owner. Bullhorn's native Task object can supplement for simple task items; complex onboarding workflows with conditional paths require a documented rebuild plan.
Aotal
Leave / Absence Record
Bullhorn ATS & CRM
Task or Custom Object (leave_record__c)
lossyAotal leave management records (annual leave, sick leave, parental leave) have no direct Bullhorn equivalent. We map to a Bullhorn Custom Object (leave_record__c) attached to the Candidate with fields for leave type, start date, end date, status, and hours taken. Alternatively, for agencies that handle leave in a separate payroll or HRIS system, we flag leave records as out-of-scope for Bullhorn migration and recommend that the customer's payroll admin reconcile leave balances in the target HRIS.
Aotal
Candidate Application / Job Application
Bullhorn ATS & CRM
Candidate and JobOrder with Placement
1:1Aotal job applications (candidate applied to a role) map to Bullhorn's Candidate linked to a JobOrder. When a candidate is placed in a role, we create a Bullhorn Placement record that captures the placement date, client, job order, start date, and pay rate. Aotal's application status maps to Bullhorn Opportunity or JobSubmission status values, and the status history migrates as notes or custom status fields on the Candidate.
Aotal
Employee Emergency Contact
Bullhorn ATS & CRM
Custom Object (emergency_contact__c)
1:1Aotal emergency contact details stored on the Employee record map to a Bullhorn Custom Object (emergency_contact__c) attached to the Candidate. Bullhorn's Understanding Custom Objects documentation (kb.bullhorn.com) confirms that emergency contact information is a canonical use case for Bullhorn Custom Objects. Fields include contact name, relationship, phone number, and email address.
Aotal
Document / Attachment
Bullhorn ATS & CRM
ContentDocument (via ContentDocumentLink)
1:1Binary documents stored in Aotal (contracts, signed agreements, certificates, CVs) migrate as Bullhorn ContentDocument records attached via ContentDocumentLink to the relevant Candidate, ClientCorporation, JobOrder, or Placement. Resume files migrate as Candidate resumes parsed by Bullhorn's native resume parsing on import. Contract and certificate files migrate as general ContentDocument attachments with a custom document_type__c field for classification.
Aotal
Owner / Manager
Bullhorn ATS & CRM
User
1:1Aotal employee records with manager assignments map to Bullhorn User records. We resolve by matching Aotal employee email to Bullhorn User email. Any Aotal employee without a matching Bullhorn User goes to a reconciliation queue for the customer's admin to provision the User before record import resumes. Manager reporting relationships are stored in a custom field manager_user__c (picker:user) on the User or Candidate record.
| Aotal | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate1:1 | Fully supported | |
| Department | ClientCorporation or Custom Object1:1 | Fully supported | |
| Role / Position | JobOrder or Custom Object1:1 | Fully supported | |
| Performance Review / Rating | Custom Object (performance_review__c)1:1 | Fully supported | |
| Competency Profile | Custom Object (competency_profile__c)1:1 | Fully supported | |
| Training Record | Custom Object (training_record__c)1:1 | Fully supported | |
| Onboarding Checklist | Custom Object (onboarding_checklist__c)1:1 | Fully supported | |
| Leave / Absence Record | Task or Custom Object (leave_record__c)lossy | Fully supported | |
| Candidate Application / Job Application | Candidate and JobOrder with Placement1:1 | Fully supported | |
| Employee Emergency Contact | Custom Object (emergency_contact__c)1:1 | Fully supported | |
| Document / Attachment | ContentDocument (via ContentDocumentLink)1:1 | Fully supported | |
| Owner / Manager | User1: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.
Aotal gotchas
Data lives in multiple microservices across the Talent App Store
SnapHire ATS and Talent App Store are distinct products with different data shapes
Vendor-assisted extraction is likely required given no public API docs
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 assessment
We audit the Aotal instance across modules in use: employee records, departments, roles, performance reviews, competency profiles, training records, onboarding checklists, leave records, and attachments. We pair this with a Bullhorn edition assessment to determine whether Front Office Growth or Enterprise is required to hold the Custom Object count, or whether Bullhorn ATS with two Custom Objects is sufficient if some Aotal modules are excluded. The discovery output is a written migration scope with a Custom Object allocation plan and a Bullhorn edition recommendation.
Custom Object schema design and Bullhorn sandbox deployment
We design the Bullhorn Custom Objects (name, API name, fields with types, edit type per field, attachment layout) using Bullhorn's Custom Object Setup Sheet template. Schema is deployed to a Bullhorn sandbox org first for validation. Bullhorn's 55-field limit per Custom Object and 20-field limit on interactive edit types (checkboxes, drop-downs, pickers) govern the field design. We configure the Custom Object tabs on Overview and Edit views per Bullhorn's documentation. The customer reviews the sandbox schema and signs off before production deployment.
Sandbox migration and reconciliation
We run a full migration into the Bullhorn sandbox using a representative data volume. The customer's HR and recruitment leads reconcile record counts, spot-check 30-50 records per object type against Aotal source data, and validate that Custom Object attachments appear correctly on Candidate records. Any field mapping corrections, data quality issues (duplicate candidates, missing department references), and Custom Object field adjustments happen in the sandbox phase. Production migration does not begin until sign-off.
Employee-to-Candidate normalization and User provisioning
We normalize Aotal employees into Bullhorn candidates and internal staff into Bullhorn Users. For each Aotal employee, we determine whether they represent a recruitment candidate (maps to Candidate), an internal recruiter or admin (maps to User), or both (maps to User with a linked Candidate record). We extract manager assignments and map to Bullhorn User lookup fields. Any Aotal employee without a matching Bullhorn User goes to a reconciliation queue for the customer's admin to provision before record import resumes.
Production migration in dependency order
We run production migration in record-dependency order: Bullhorn Users (provisioned by admin, validated by FlitStack AI), ClientCorporations (from Aotal departments and client organisations), JobOrders (from Aotal roles), Candidates (with Custom Object attachments for performance, competency, training, onboarding, and leave), ContentDocuments (resume files, contracts, certificates), and finally a delta scan for any records modified during the migration window. Each phase emits a reconciliation report; the next phase does not begin until row counts match.
Cutover, validation, and automation rebuild handoff
We freeze Aotal write access during cutover, run a final delta migration of records modified during the window, then enable Bullhorn as the system of record. We deliver a written inventory of every Aotal workflow, automation, performance cycle configuration, and learning management setup that requires rebuild. We do not rebuild automations, performance workflows, or learning paths as Bullhorn configurations; those are separate engagements or internal admin tasks. We support a one-week hypercare window for reconciliation issues raised by the recruitment team.
Platform deep dives
Aotal
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate HRMS migration. 4 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Aotal and Bullhorn ATS & CRM.
Object compatibility
4 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
Aotal: Not publicly documented.
Data volume sensitivity
Aotal 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 Aotal to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Aotal 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 Aotal
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.