HRMS migration
Field-level mapping, validation, and rollback between Happy Hire and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Happy Hire
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Happy Hire and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Happy Hire to Bullhorn is a structural migration that crosses two different ATS data models. Happy Hire stores candidates as flat records with applications linked as a property, while Bullhorn separates the Candidate record from JobSubmission (the application) and requires custom objects for scorecard data. We audit the source data to detect whether Happy Hire uses the flat model or a separate Applications object, resolve the Candidate-to-Candidate-plus-JobSubmission mapping at migration time, and preserve stage transition history across both platforms. Bullhorn's REST API handles record creation with rate-limit handling and batch chunking; Bullhorn's custom objects require Bullhorn Support to provision before migration begins. Workflows, onboarding task assignments, and job board posting schedules do not migrate; we deliver a written inventory of these for the customer's Bullhorn admin to rebuild after cutover.
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 Happy Hire 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.
Happy Hire
Candidate
Bullhorn ATS & CRM
Candidate
1:1Happy Hire candidate profiles (contact details, resume files, status, source attribution) map to Bullhorn Candidate records. The Candidate is the person; Bullhorn keeps Candidate records independent of specific job applications. We map Happy Hire source attribution fields to Bullhorn Candidate source fields and preserve the original Happy Hire candidate ID in a custom field hh_candidate_id__c for audit. Resume files migrate as ContentDocument records linked via ContentDocumentLink to the Candidate.
Happy Hire
Application
Bullhorn ATS & CRM
JobSubmission
1:1Happy Hire application records (linking a Candidate to a Job with stage and timestamp data) map to Bullhorn JobSubmission records. The JobSubmission is Bullhorn's object representing a candidate's application to a specific job order. We preserve the full application stage history including stage transitions and notes as JobSubmission status change records. The Happy Hire application date maps to the JobSubmission dateSubmitted field.
Happy Hire
Job
Bullhorn ATS & CRM
JobOrder
1:1Happy Hire job records (title, description, location, department, status) map to Bullhorn JobOrder records. Active and closed jobs migrate with their current status. We remap Happy Hire job field names to Bullhorn JobOrder API field equivalents: title, description, address (for location), and status. Custom job fields from Happy Hire map to JobOrder custom fields or JobOrder customObject fields depending on Bullhorn edition and custom object provisioning.
Happy Hire
Job (Pipeline Stage)
Bullhorn ATS & CRM
JobOrder (status + salesProcess)
lossyHappy Hire application pipeline stages map to Bullhorn JobOrder status values within a configured Sales Process. We remap each Happy Hire stage name to the nearest Bullhorn-equivalent status (e.g., Applied to New, Screening to Interpreting, Interview to Interviewing, Offer to OfferExtended, Hired to Placed). Non-standard Happy Hire stage names require Bullhorn admin to add custom status values to the configured Sales Process before migration runs.
Happy Hire
User
Bullhorn ATS & CRM
User
1:1Happy Hire user accounts (name, email, role) map to Bullhorn User records. We resolve owners by email match against the Bullhorn destination org's User table. Role assignments from Happy Hire map to Bullhorn User roles or department assignments. Any Happy Hire user without a matching Bullhorn User goes to a reconciliation queue for the customer's Bullhorn admin to provision before record import resumes.
Happy Hire
Employee Record
Bullhorn ATS & CRM
Placement
1:1Happy Hire post-hire Employee records (start date, department, employment status) map to Bullhorn Placement records. The Placement object is Bullhorn's representation of a candidate placed in a job and is the staffing-specific equivalent of an employee record in a recruiting context. We map Happy Hire start date to Placement dateBegin, employment status to Placement status, and department to a custom Placement field.
Happy Hire
Onboarding Tasks
Bullhorn ATS & CRM
Placement + Onboarding Checklist (custom)
1:1Happy Hire onboarding workflows (checklists and task assignments tied to new hires) export as task names, assignees, and completion statuses. Bullhorn does not have a native onboarding task object; we migrate the task data to a Bullhorn custom object (customObject1s or similar, if provisioned by Bullhorn Support before migration) linked to the Placement record. Subtask nesting may flatten during migration. We deliver a written record of the full task hierarchy for the Bullhorn admin to rebuild as a checklist in Bullhorn's native task system or a Bullhorn Marketplace onboarding app.
Happy Hire
Interview Scorecards
Bullhorn ATS & CRM
Candidate (custom object)
1:1Happy Hire scorecard templates and completed evaluations (structured ratings and free-text notes) map to Bullhorn Candidate custom objects. Bullhorn custom objects must be set up by Bullhorn Support before migration begins; we coordinate with the customer to open a Bullhorn Support ticket early in the discovery phase. Scorecard structure migrates as the custom object definition; completed evaluations migrate as instances linked to the Candidate record. If Bullhorn Support has not yet provisioned the custom object at migration time, we hold scorecard data for a follow-on migration phase.
Happy Hire
Job Board Postings
Bullhorn ATS & CRM
JobOrder (custom fields)
1:1Happy Hire active postings to external job boards (board name and posting URL where available) map to Bullhorn JobOrder custom fields or JobOrder notes. We record which boards a job was posted to and the posting URL. Board-level analytics (click counts, application source breakdowns) do not migrate because these metrics are held by the job board platforms and are not stored in Happy Hire. We deliver a posting reinstatement checklist noting every board, job, and URL for the Bullhorn admin to re-establish after cutover.
Happy Hire
Candidate Source Attribution
Bullhorn ATS & CRM
Candidate (source + isHot)
1:1Happy Hire source attribution fields (how a candidate entered the system) map to Bullhorn Candidate source and isHot fields. Candidate urgency flags in Happy Hire map to Bullhorn isHot boolean. We preserve the original Happy Hire candidate status field values in a custom field hh_status__c for reconciliation purposes.
Happy Hire
Candidate Tags / Categories
Bullhorn ATS & CRM
Candidate (custom multi-select or Topic)
lossyHappy Hire candidate tags or category flags stored as multi-checkbox properties migrate to Bullhorn custom fields (multi-select picklist or customObject text fields). The customer's Bullhorn admin chooses the tag strategy during scoping. If tags are used for content classification, they migrate as Bullhorn Topics with TopicAssignment records.
Happy Hire
Active Job Postings (Cutover)
Bullhorn ATS & CRM
JobOrder (status = Open)
lossyHappy Hire jobs with active postings receiving applications during migration require a dual-write management phase. We identify open jobs at scoping, freeze Happy Hire as the write target during the cutover window, and migrate any delta applications received during migration before closing the window. JobOrder records remain Open in Bullhorn until the customer confirms the cutover is complete and new application routing is live.
| Happy Hire | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Application | JobSubmission1:1 | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Job (Pipeline Stage) | JobOrder (status + salesProcess)lossy | Fully supported | |
| User | User1:1 | Fully supported | |
| Employee Record | Placement1:1 | Fully supported | |
| Onboarding Tasks | Placement + Onboarding Checklist (custom)1:1 | Mapping required | |
| Interview Scorecards | Candidate (custom object)1:1 | Mapping required | |
| Job Board Postings | JobOrder (custom fields)1:1 | Mapping required | |
| Candidate Source Attribution | Candidate (source + isHot)1:1 | Fully supported | |
| Candidate Tags / Categories | Candidate (custom multi-select or Topic)lossy | Fully supported | |
| Active Job Postings (Cutover) | JobOrder (status = Open)lossy | 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.
Happy Hire gotchas
Catalog category mismatch — not an HRMS
Per-use billing means no recurring data to migrate at scale
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 Happy Hire export assessment
We audit the Happy Hire environment to determine the available export method: manual CSV export, structured database export if available, or assisted-export via screen interaction. We catalog candidate volume, job count, application stage transition records, user count, employee records, and any scorecard or onboarding task data. We open the Bullhorn Support ticket for custom object provisioning at this stage so Bullhorn has time to configure customObject definitions before the migration window. We deliver a written discovery report including record counts, export method recommendation, and Bullhorn custom object requirements.
Bullhorn schema preparation and stage mapping
We design the Bullhorn destination schema including JobOrder Record Types (one per Happy Hire job pipeline), Sales Processes with custom status values matching Happy Hire stage names, custom fields on Candidate (scorecard fields, hh_candidate_id__c, hh_status__c), and custom fields on JobOrder for job board posting URLs. Bullhorn custom objects for scorecard and onboarding data are created by Bullhorn Support in this window. We coordinate with the customer's Bullhorn admin to validate the schema in a Bullhorn Sandbox before production migration begins.
Happy Hire data extraction and transformation
We extract source data using the method determined in discovery. We transform Happy Hire candidate records into Bullhorn Candidate format, application records into JobSubmission format, jobs into JobOrder format, and employee records into Placement format. We apply the stage split mapping and resolve any Happy Hire owner email addresses against the Bullhorn User table. Resume files are extracted as binary blobs and cataloged for ContentDocument migration. The output is a set of staged CSV or JSON files ready for Bullhorn API ingestion.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn Sandbox using production-like data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, JobOrders in, JobSubmissions in, Placements in, Users in), spot-checks 25-50 random records against the Happy Hire source, and validates that stage names appear correctly in Bullhorn's Sales Process. Any mapping corrections, missing custom fields, or Bullhorn configuration gaps surface here before production migration begins.
User reconciliation and Bullhorn User provisioning
We extract every distinct Happy Hire user referenced on candidate, job, and application records and match by email against the Bullhorn destination org's User table. Users without a matching Bullhorn User go to a reconciliation queue. The customer's Bullhorn admin provisions any missing Users (active or inactive depending on whether the original Happy Hire user is still with the firm). Migration cannot proceed past this step because OwnerId references on JobOrder and Placement require valid Bullhorn User IDs.
Production migration in dependency order
We run production migration in record-dependency order: JobOrders (from Happy Hire Jobs), Candidates (with hh_candidate_id__c preserved), JobSubmissions (linking Candidates to JobOrders), Placements (post-hire employee records), custom object instances (scorecards and onboarding tasks after Bullhorn Support confirms provisioning), and ContentDocument records (resume files linked to Candidates via ContentDocumentLink). We manage the active-job dual-write window for any jobs currently receiving applications. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and rebuild handoff
We freeze Happy Hire as the write target during cutover, run a final delta migration of any records modified during the migration window, then enable Bullhorn as the system of record for new applications. We deliver the Workflow and Sequence inventory document (if any Happy Hire automation features existed), the job board posting reinstatement checklist, and the Bullhorn Automation rebuild guide for the customer's Bullhorn admin. We support a one-week hypercare window for reconciliation issues. We do not rebuild Happy Hire onboarding task hierarchies as Bullhorn Automation workflows inside the migration scope; that is a separate engagement or an internal Bullhorn admin task.
Platform deep dives
Happy Hire
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Happy Hire and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Happy Hire and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between Happy Hire and Bullhorn ATS & CRM.
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
Happy Hire: Not publicly documented.
Data volume sensitivity
Happy Hire 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 Happy Hire to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Happy Hire 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 Happy Hire
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.