HRMS migration
Field-level mapping, validation, and rollback between PeopleForce and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
PeopleForce
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 14
objects map 1:1 between PeopleForce and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from PeopleForce to Bullhorn is a category shift as much as a platform switch. PeopleForce is an all-in-one SMB HRMS covering the full employee lifecycle, compensation, performance reviews, and recruitment. Bullhorn is a recruitment-focused ATS and CRM built for staffing agencies and recruiting teams, with no native HRIS layer for benefits, leave balances, or payroll. We map the overlap — Employee records become Bullhorn Candidates and Contacts, open Vacancies become Jobs, and application history becomes Placement records — but we flag that HR-adjacent data (leave policies, review scores, compensation history, onboarding checklists) has no direct Bullhorn equivalent and gets migrated as structured supplemental data in a dedicated section of the Bullhorn instance, or is documented for admin rebuild. Bullhorn's edition limits on custom objects (2 on Bullhorn ATS, 10 on Growth/Enterprise) constrain how much supplemental HR data can land as structured records versus a migration inventory document. We handle the PeopleForce API extraction at the 300 req/min IP rate limit, batch the load into Bullhorn via REST, and resolve Candidate-to-Contact linking before the final reconciliation pass.
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 PeopleForce 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.
PeopleForce
Employee
Bullhorn ATS & CRM
Candidate
1:1PeopleForce Employee records map directly to Bullhorn Candidate records. Name, email, phone, address, employment status, start date, and employee type transfer to Bullhorn Candidate fields. We use the Candidate email address as the dedupe key during import. Active and inactive employment status maps to Bullhorn Candidate status values. Employee type (full-time, part-time, contractor) maps to Bullhorn's employmentType field. The PeopleForce employee ID is preserved in a custom field peopleforce_id__c for audit and reconciliation.
PeopleForce
Employee
Bullhorn ATS & CRM
Contact
1:1PeopleForce Employee records that represent hiring managers, team leads, or approvers who should exist as business contacts in Bullhorn's CRM layer are mapped to Contact records in parallel with the Candidate mapping. The decision on which Employees map to Candidate versus Contact is made during scoping based on whether the Person is a job seeker or a client/contact in the Bullhorn context. Both mappings use the same source Employee record; the destination depends on the employee's role in the recruiting workflow.
PeopleForce
Position (Job Title)
Bullhorn ATS & CRM
Job (JobOrder)
lossyPeopleForce Positions capture job title, department, employment type, and effective dates. Open positions in PeopleForce that represent recruiting needs map to Bullhorn Job records. The PeopleForce job title maps to the Bullhorn Job title; department maps to a Bullhorn custom field or Category. We configure the Job status, employment type, and salary range fields at migration time using the position's effective dates to set the Job startDate. Bullhorn Job has a much richer schema (skill requirements, qualifications, client corporation linking) that the position data populates partially.
PeopleForce
Recruitment / Vacancies
Bullhorn ATS & CRM
Job + CandidateProcess
1:1PeopleForce PeopleRecruit vacancy records (job postings, application history, pipeline stages) map to Bullhorn Job records with candidate submissions tracked as submissions or CandidateProcess records. Open, closed, and draft vacancy status maps to Bullhorn Job status (Open, Closed, Hired). Application history migrates as Bullhorn submission records attached to the Job, preserving the candidate's application date and stage progression. Job board multiposting settings do not transfer; we document the configuration for admin rebuild in Bullhorn.
PeopleForce
Employee Profile (skills, bio, emergency contacts)
Bullhorn ATS & CRM
Candidate (custom fields or Custom Object)
lossyPeopleForce profile photos, bio data, emergency contacts, and skills are stored as structured sub-objects on Employee. Bullhorn Candidate supports custom fields and Custom Objects for extended data. Skills migrate as Bullhorn Candidate custom fields (skillText fields or a skills Custom Object). Emergency contacts and profile metadata migrate to a Bullhorn Candidate Custom Object. Bullhorn ATS edition limits 2 Custom Objects per entity; Growth/Enterprise allows 10. We configure the Custom Object schema during migration scoping and validate against the customer's Bullhorn edition.
PeopleForce
Leave Policies and Requests
Bullhorn ATS & CRM
Custom Object (Leave Records)
1:1PeopleForce leave balances and request history have no native Bullhorn equivalent because Bullhorn is a recruiting ATS, not an HRIS. Leave data migrates as a Bullhorn Custom Object (LeaveRecord) attached to the Candidate or Contact. We preserve leave type, balance, accrual date, and approval status as Custom Object fields. Policy definitions themselves are not migratable as code; we deliver a written policy inventory document for the admin to reconfigure in Bullhorn's policy settings if supported by their Bullhorn edition.
PeopleForce
Performance Reviews
Bullhorn ATS & CRM
Custom Object (Review Records)
1:1PeopleForce performance review cycles, submitted review forms, and scores are migrated as a Bullhorn Custom Object (PerformanceReview) linked to the Candidate or Contact. Completed review scores and dates transfer; the review form builder configurations (questions, rating scales, weighting) do not migrate as code. Bullhorn's form builder is used to recreate review templates. The review Custom Object stores the submitted score, reviewer name, review period, and any free-text feedback as historical records.
PeopleForce
Documents (contracts, ID copies, certifications)
Bullhorn ATS & CRM
ContentDocument (linked to Candidate/Contact/Job)
1:1PeopleForce employee documents (contracts, ID copies, certifications) migrate as Bullhorn ContentDocument records attached via ContentDocumentLink to the corresponding Candidate or Contact record. We extract document metadata (filename, upload date, document type) and content from PeopleForce's API. Bullhorn supports document storage per record; the customer's Bullhorn storage allocation applies to migrated documents.
PeopleForce
Kudos / Recognition
Bullhorn ATS & CRM
Custom Object (Recognition Records)
1:1PeopleForce Kudos and Recognition records are migrated as a Bullhorn Custom Object (Recognition) linked to the Employee (Candidate/Contact). Bullhorn does not have a native recognition module. We preserve the giver, recipient, message, and timestamp as Custom Object fields. Bullhorn ATS edition limits 2 Custom Objects per entity; we coordinate the Recognition Custom Object placement during scoping to avoid conflicting with other custom object assignments.
PeopleForce
Onboarding and Offboarding Checklists
Bullhorn ATS & CRM
Task (checklist items) + Custom Object
1:1PeopleForce onboarding and offboarding checklist task completion status and history migrate as Bullhorn Task records attached to the Candidate. Each checklist item becomes a Task with a status matching the completion state in PeopleForce. The checklist templates themselves are platform-specific and do not migrate; we document the checklist structure in a written handoff so the Bullhorn admin can rebuild onboarding task templates in Bullhorn Tasks or a custom onboarding workflow.
PeopleForce
Custom Fields (Employee object)
Bullhorn ATS & CRM
Custom Fields on Candidate/Contact/Job
lossyPeopleForce custom fields on the Employee object are inventoried during discovery, typed (text, number, date, dropdown), and mapped to Bullhorn equivalent custom fields on the destination entity (Candidate, Contact, or Job). Bullhorn enforces a finite set of custom field edit types (free text, dropdown, checkbox, mini picker, and others per Bullhorn field options). We map PeopleForce data types to the nearest Bullhorn field type and flag any type conversions (e.g., PeopleForce multi-select dropdowns to Bullhorn multi-select picklist).
PeopleForce
Custom Fields (Position, Leave, Review objects)
Bullhorn ATS & CRM
Custom Object Fields
lossyPeopleForce custom fields on Position, Leave, Performance Review, and other HR objects map to fields within Bullhorn Custom Objects created for each HR module. We pre-create the Custom Object schema in Bullhorn during the sandbox validation phase, including all custom field definitions, before importing any HR data. Bullhorn Growth and Enterprise editions allow 10 Custom Objects per entity with 55 fields each; Bullhorn ATS limits 2 Custom Objects per entity. We validate the destination edition against the migration scope before production load.
PeopleForce
Employment History
Bullhorn ATS & CRM
Candidate (employment records as custom fields or Custom Object)
1:1PeopleForce employment history (prior positions, tenure, compensation changes) stored across linked records is consolidated into a Bullhorn Candidate employment section. We flatten prior position records into Bullhorn Candidate workHistory custom fields or a WorkHistory Custom Object per candidate. Compensation history is migrated as a separate Custom Object (CompensationHistory) attached to the Candidate, as Bullhorn does not have a native compensation tracking field on Candidate. The customer should confirm whether their Bullhorn edition supports the required number of custom objects before committing to a full compensation history migration.
PeopleForce
Workflows
Bullhorn ATS & CRM
None (written inventory only)
lossyPeopleForce Workflows built on attribute-based triggers (e.g., trigger an onboarding task when a new hire start date arrives) do not migrate as automation code. Bullhorn's workflow engine uses a different trigger and action model. We deliver a written workflow inventory documenting every active PeopleForce workflow: its trigger, conditions, actions, and the recommended Bullhorn equivalent (Bullhorn Tasks + Automation rules or a Bullhorn partner workflow tool). The customer's Bullhorn admin or a Bullhorn implementation partner rebuilds them post-migration.
| PeopleForce | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate1:1 | Fully supported | |
| Employee | Contact1:1 | Fully supported | |
| Position (Job Title) | Job (JobOrder)lossy | Fully supported | |
| Recruitment / Vacancies | Job + CandidateProcess1:1 | Mapping required | |
| Employee Profile (skills, bio, emergency contacts) | Candidate (custom fields or Custom Object)lossy | Fully supported | |
| Leave Policies and Requests | Custom Object (Leave Records)1:1 | Mapping required | |
| Performance Reviews | Custom Object (Review Records)1:1 | Mapping required | |
| Documents (contracts, ID copies, certifications) | ContentDocument (linked to Candidate/Contact/Job)1:1 | Fully supported | |
| Kudos / Recognition | Custom Object (Recognition Records)1:1 | Mapping required | |
| Onboarding and Offboarding Checklists | Task (checklist items) + Custom Object1:1 | Mapping required | |
| Custom Fields (Employee object) | Custom Fields on Candidate/Contact/Joblossy | Fully supported | |
| Custom Fields (Position, Leave, Review objects) | Custom Object Fieldslossy | Fully supported | |
| Employment History | Candidate (employment records as custom fields or Custom Object)1:1 | Fully supported | |
| Workflows | None (written inventory only)lossy | Mapping required |
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.
PeopleForce gotchas
Administrator-only data export gate
No native payroll module
300 req/min API rate limit on IP
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 edition gap analysis
We audit the PeopleForce instance across all modules in scope: Employees, Profiles, Positions, Vacancies, Leave, Performance Reviews, Documents, Kudos, Onboarding/Offboarding checklists, and custom fields. We pair this with a Bullhorn edition assessment: Bullhorn Starter ($99/user) covers basic ATS functionality; Core ($165/user) adds custom fields, workflows, and integrations; Pro adds AI matching, automation, and real-time analytics. The discovery output is a written gap analysis identifying every PeopleForce object that has no standard Bullhorn equivalent, the required custom object count, and a Bullhorn edition recommendation that fits the migration scope.
Bullhorn custom object provisioning
We submit the Bullhorn Custom Object Setup Spreadsheet to Bullhorn Support for all HR data objects that have no standard Bullhorn equivalent (leave records, performance reviews, compensation history, recognition, onboarding tasks). Bullhorn Support provisions the custom objects within 3-5 business days. While awaiting provisioning, we build the Bullhorn sandbox environment, configure standard custom fields on Candidate, Contact, and Job, and design the field mapping for all structured PeopleForce data. All custom object schema is validated in Sandbox before production deployment.
Data extraction under PeopleForce API rate limit
We extract all PeopleForce data via API using the 300 req/min IP rate limit. Extraction runs in object-specific batches: Employees first (base records), then sub-objects (Profiles, Documents, Positions) as linked records, then HR module data (Leave, Reviews, Kudos, Checklists). We implement request pacing with a 200-record batch size and a 10-second pause between batches, and exponential backoff on 429 responses. We flag any PeopleForce records that require admin rights to access via API and coordinate temporary elevation with the customer's PeopleForce admin before extraction begins.
Sandbox migration and reconciliation
We run a full migration into the Bullhorn Sandbox using production-like data volume. The customer's Bullhorn admin reconciles record counts (Candidates, Contacts, Jobs, Placements, custom object records), spot-checks 25-50 random records against PeopleForce source data, and validates that custom object fields populated correctly. Any field mapping corrections, custom object schema adjustments, or data type conversion issues are resolved in Sandbox before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Custom Object schema deployed (via Bullhorn Support ticket), then Candidate records (with peopleforce_id__c preserved), then Contact records (for non-candidate employees), then Job records (from PeopleForce vacancies), then Placement records (from PeopleForce application history), then HR supplemental custom objects (Leave, Reviews, Compensation, Recognition, Onboarding), then Document attachments. Each phase emits a row-count reconciliation report. Bullhorn Support validates the final custom object count against the provisioned schema before we close the migration.
Cutover, validation, and workflow handoff
We freeze PeopleForce 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 PeopleForce Workflow inventory document, the Bullhorn custom object schema reference, and the HR data inventory (for any HR records that exceeded the custom object limit and were delivered as a written document). We support a one-week hypercare window for reconciliation issues. We do not rebuild PeopleForce workflows as Bullhorn automation rules inside the migration scope; that is a separate engagement or an internal Bullhorn admin task.
Platform deep dives
PeopleForce
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 PeopleForce 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
PeopleForce: 300 requests per minute per requesting IP address.
Data volume sensitivity
PeopleForce 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 PeopleForce to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your PeopleForce 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 PeopleForce
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.