HRMS migration
Field-level mapping, validation, and rollback between HROffice and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
HROffice
Source
Bullhorn ATS & CRM
Destination
Compatibility
6 of 12
objects map 1:1 between HROffice and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from HROffice to Bullhorn is a structural migration for staffing agencies that have outgrown HROffice's Dutch-market feature set and need Bullhorn's global ATS ecosystem, API extensibility, and staffing-specific automation. HROffice's assignment-based data model—where workers are placed into temporary or temp-to-perm roles with weekly timecard cycles—does not map directly to Bullhorn's Candidate-Application-Placement model. We do not force assignments into employee records; instead we export assignments as supplemental metadata on the Bullhorn Candidate and create Bullhorn Placement records for active or recently completed assignments, preserving placement type, duration, and pay rate context. Timecard history migrates to Bullhorn's Time & Expense module, subject to the customer's Bullhorn licensing tier. The HROffice API is a paid add-on that we coordinate to enable before migration begins. Workflows, career site content, and employer-branded job posting layouts do not migrate; we deliver a written inventory of these for the customer's Bullhorn 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 HROffice 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.
HROffice
Candidate
Bullhorn ATS & CRM
Candidate
1:1HROffice Candidate records map directly to Bullhorn Candidate. Standard fields (name, contact details, application status, skills, notes) migrate as-is. The HROffice candidate record may carry supplemental assignment history (prior placements, assignment types, time-in-service) that we attach as custom fields on the Bullhorn Candidate to preserve placement context without creating duplicate records. If HROffice candidates have multiple active assignments, each assignment becomes a separate Bullhorn Placement record linked to the same Candidate.
HROffice
Application
Bullhorn ATS & CRM
Application
1:1HROffice Applications tied to job postings map to Bullhorn Application records. Application date, status pipeline, and recruiter notes preserve. The HROffice application-to-candidate relationship maps cleanly to Bullhorn's Candidate-to-Application relationship. We use the HROffice candidate ID as a custom field (hroffice_candidate_id__c) on the Bullhorn Candidate for reconciliation after cutover.
HROffice
Job Posting
Bullhorn ATS & CRM
Job Order
1:1HROffice Job Postings map to Bullhorn Job Order records. Job title, description, location, department, employment type, and pay range migrate directly. Employer branding content (logos, career site layout, custom CSS) does not migrate—these are CMS assets in HROffice with no Bullhorn equivalent. We export the job description text and metadata and flag branded content requiring rebuild in Bullhorn's career portal configuration. Published date and expiration date map to Bullhorn date fields.
HROffice
Assignment
Bullhorn ATS & CRM
Placement
1:manyHROffice Assignments (temporary placements, temp-to-perm arrangements, direct placements) represent the core staffing-agency data object. We create Bullhorn Placement records for each active or recently completed HROffice assignment, linking the Placement to the Candidate and the Job Order. Assignment type (temporary, temp-to-perm, direct hire) maps to Bullhorn Placement record type. Start date, end date, and assignment status migrate as Placement fields. The original HROffice assignment record is preserved as a custom object or related list entry on the Bullhorn Candidate for audit purposes. This prevents HROffice's assignment-based model from being forced into a continuous employment record, which would create duplicate or conflicting placement histories.
HROffice
Assignment
Bullhorn ATS & CRM
Custom Fields on Candidate
lossyFor candidates with historical assignment records where a full Placement is not warranted (short-term fill-in assignments, reference-only placements), we store assignment summary data as custom fields on the Bullhorn Candidate: last_assignment_type__c, last_assignment_start__c, last_assignment_end__c, last_pay_rate__c, total_assignments_completed__c. This preserves staffing history without overpopulating the Bullhorn Placement object with low-value historical records.
HROffice
Timecard
Bullhorn ATS & CRM
Bullhorn Time & Expense
1:1HROffice weekly timecard records (hours worked, submission dates, approval status) map to Bullhorn Time & Expense entries if the customer licenses Bullhorn Time & Expense or Bullhorn Middle Office. Timecards link to the Bullhorn Placement record representing the assignment. Hours worked, work dates, and pay rate migrate to the time entry. If the customer does not license Bullhorn Time & Expense, we export timecard history as a standalone custom object (hroffice_timecard__c) on the Placement for record retention purposes.
HROffice
Compensation
Bullhorn ATS & CRM
Placement Pay and Bill Rates
lossyHROffice compensation records (pay type, hourly rate or salary, effective dates for each assignment) map to Bullhorn Placement pay rate and bill rate fields. HROffice's pay_type property (hourly, salary, temp-to-perm fixed) maps to Bullhorn's payRateType and billRateType fields. We validate rate formats during import because HROffice may store rates as decimal strings and Bullhorn expects numeric values. Overtime rates, shift premiums, and expense allowances from HROffice migrate as custom fields on the Placement record.
HROffice
Job Posting: Custom Fields
Bullhorn ATS & CRM
Custom Fields on Job Order
lossyHROffice job postings may carry custom career site fields specific to the organization's branded job portal. We export these as Bullhorn custom fields on the Job Order entity (e.g., department_cost_center__c, hiring_manager_email__c, remote_policy__c). The employer branding fields (logo, banner image, CSS) do not map and are flagged for rebuild in Bullhorn's career portal. Department and location metadata from HROffice map to Bullhorn Job Order standard fields.
HROffice
User
Bullhorn ATS & CRM
User
1:1HROffice internal users (recruiters, administrators, hiring managers) map to Bullhorn User records. We extract HROffice users by email address as the dedupe key and match against the Bullhorn destination org's User table. User role and permission sets from HROffice do not have a direct Bullhorn equivalent; we flag the HROffice role assignments in the migration deliverable and the customer's Bullhorn admin provisions corresponding Bullhorn permission sets post-migration. Any HROffice user without a matching Bullhorn User goes to a reconciliation queue.
HROffice
User
Bullhorn ATS & CRM
Candidate (for contractor or temporary worker users)
lossyHROffice may track temporary workers or contractors as users for timecard submission purposes. These are not system users in the Bullhorn sense but rather candidates on assignment. We identify these HROffice user records during discovery and migrate them as Bullhorn Candidate records with the assignment history attached, rather than as Bullhorn User records. The customer's Bullhorn admin reviews and provisions system access as needed post-migration.
HROffice
Benefits
Bullhorn ATS & CRM
Custom Fields on Candidate or Placement
lossyHROffice benefit enrollment records (plan type, enrollment date, coverage level, dependent information) migrate as custom fields on the Bullhorn Candidate or, for benefits tied to a specific assignment, on the Placement record. Bullhorn does not have a native benefits management module; benefit data is stored as structured custom fields. We preserve the benefit plan name, effective date, and coverage tier as separate custom fields and flag the benefit data for the customer's HR admin to validate post-migration.
HROffice
Engagement: Notes
Bullhorn ATS & CRM
Note
1:1HROffice recruiter notes attached to candidates, applications, or assignments migrate to Bullhorn Note records linked via ContentDocumentLink to the parent Candidate, Job Order, or Placement. Rich text formatting from HROffice note bodies preserves in Bullhorn Note where the format is compatible (plain text and basic HTML; complex CSS-styled content is simplified). Note creation date and author (HROffice user) migrate with author preserved as a text string if the user does not have a Bullhorn User record.
| HROffice | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Application | Application1:1 | Fully supported | |
| Job Posting | Job Order1:1 | Fully supported | |
| Assignment | Placement1:many | Fully supported | |
| Assignment | Custom Fields on Candidatelossy | Fully supported | |
| Timecard | Bullhorn Time & Expense1:1 | Fully supported | |
| Compensation | Placement Pay and Bill Rateslossy | Mapping required | |
| Job Posting: Custom Fields | Custom Fields on Job Orderlossy | Fully supported | |
| User | User1:1 | Fully supported | |
| User | Candidate (for contractor or temporary worker users)lossy | Fully supported | |
| Benefits | Custom Fields on Candidate or Placementlossy | Mapping required | |
| Engagement: Notes | 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.
HROffice gotchas
Zero public review presence limits due diligence
API is a paid add-on, not self-service
Assignment-based data model does not map directly to standard HRMS
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 API readiness
We audit the HROffice source environment across candidates, applications, job postings, assignments, timecards, users, and any custom fields in use. We confirm whether the HROffice API add-on is active and, if not, coordinate with HROffice to enable it before migration begins. We extract a complete record count per object and identify the assignment-to-placement transformation rule the customer wants to apply: which assignment statuses produce Bullhorn Placements versus Candidate custom fields. We also confirm whether the customer licenses Bullhorn Time & Expense or plans to add it. The discovery output is a written migration scope document covering record counts, object mapping rules, and any HROffice API dependencies.
Bullhorn schema preparation
We configure the Bullhorn destination environment in coordination with the customer's Bullhorn admin. This includes creating custom fields on Candidate (hroffice_candidate_id__c, assignment history fields), Job Order (any migrated custom fields from HROffice job postings), and Placement (pay rate, bill rate, assignment type, original HROffice assignment ID). If the customer licenses Bullhorn Time & Expense, we configure the time entry structure to receive HROffice timecard records. If Bullhorn Time & Expense is not licensed, we create the hroffice_timecard__c custom object. We also configure any required Record Types on Placement for assignment type differentiation (temporary, temp-to-perm, direct hire). Bullhorn schema changes are deployed to a Bullhorn Sandbox org first for validation.
Sandbox migration and reconciliation
We run a full migration into Bullhorn Sandbox using production-like data volume. The customer's Bullhorn admin and recruitment operations lead reconcile record counts (Candidates in, Placements in, Timecards in, Job Orders in), spot-check 25-50 random records against the HROffice source, and validate that assignment history appears correctly on Candidate records and Placements. Any mapping corrections, custom field additions, or transformation rule adjustments happen in this phase. No data moves to production until the Sandbox migration is signed off.
User reconciliation and provisioning
We extract every distinct HROffice user referenced on Candidate, Application, Assignment, and timecard records and match by email against the Bullhorn destination org's User table. HROffice users that represent temporary workers on assignment (identified during discovery) are excluded from User matching and migrated as Candidates. System users without a matching Bullhorn User go to a reconciliation queue. The customer's Bullhorn admin provisions any missing Bullhorn Users (active or inactive) before production migration resumes. This step is required because OwnerId and assignedTo fields in Bullhorn reference User records.
Production migration in dependency order
We run production migration in record-dependency order: Bullhorn Users (validated from Step 4), Job Orders (from HROffice job postings), Candidates (with assignment history fields populated), Placements (from active HROffice assignments linked to Candidates and Job Orders), Applications (linked to Candidates and Job Orders), Timecard records (linked to Placements if Bullhorn Time & Expense is licensed, or to the custom timecard object), and engagement notes. Each phase emits a row-count reconciliation report before the next phase begins. Assignments that fall outside the customer's defined transformation rule are logged and reviewed with the customer before being applied as Candidate custom fields.
Cutover, validation, and admin handoff
We freeze HROffice writes during cutover, run a final delta migration of any records modified during the migration window, then enable Bullhorn as the system of record. We deliver the HROffice career site and branded job posting inventory to the customer's Bullhorn admin for career portal rebuild. We deliver the workflow and automation inventory (HROffice recruiter workflows and assignment-based rules) as a written map for Bullhorn rebuild in Bullhorn Automation or Bullhorn workflows. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's recruitment team. We do not rebuild HROffice workflows as Bullhorn automations inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
HROffice
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 2 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 HROffice and Bullhorn ATS & CRM.
Object compatibility
2 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
HROffice: Not publicly documented.
Data volume sensitivity
HROffice 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 HROffice to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your HROffice 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 HROffice
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.