HRMS migration
Field-level mapping, validation, and rollback between PrimePay and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
PrimePay
Source
Bullhorn ATS & CRM
Destination
Compatibility
4 of 12
objects map 1:1 between PrimePay and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
PrimePay and Bullhorn serve fundamentally different functions — PrimePay is a full HCM platform handling payroll, HR, benefits, and time tracking for hourly and salaried workforces, while Bullhorn is a recruiting ATS and CRM purpose-built for staffing agencies and recruitment operations. A migration from PrimePay to Bullhorn is therefore a domain-shift migration: we extract employee records, position data, payroll history, PTO balances, and benefits enrollment from PrimePay and load them into Bullhorn's Candidate, Contact, and custom object schemas. The mapping is not 1:1 at the object level because Bullhorn has no native payroll, benefits, or PTO accrual engine. We store compensation, employment type, department, manager, and tax withholding as Bullhorn custom fields on the Candidate record, and we deliver a separate written inventory of PrimePay records (onboarding workflows, garnishment setups, tax filing configurations) that have no Bullhorn equivalent and must be rebuilt or re-entered by the admin. PrimePay's Position Management architecture stores Position data separately from Employee records, so we resolve that linkage during extraction and collapse or expand the fields during transform depending on the customer's Bullhorn schema design. Bullhorn's API rate limits (50 concurrent sessions, 1,500 calls per minute, 100,000 calls per month) govern our chunking and backoff strategy during load.
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 PrimePay 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.
PrimePay
Employee
Bullhorn ATS & CRM
Candidate
1:1PrimePay Employee records map to Bullhorn Candidate profiles. We extract first name, last name, email, phone, address, hire date, employment status, and employee ID. Employment type (full-time, part-time, contractor) maps to the Bullhorn customCandidate15 field or an equivalent custom field. Employee ID from PrimePay becomes the Candidate's externalID for deduplication. Personal fields not relevant to recruiting (bank account details, social security for payroll purposes) do not migrate; only work-history-relevant fields transfer.
PrimePay
Position
Bullhorn ATS & CRM
Candidate (work history fields)
1:1PrimePay's Position Management stores job title, department, manager, salary, security permissions, and reporting lines on the Position record separate from the Employee. We extract Position fields during extraction and merge them into the Bullhorn Candidate record. Title, department, and manager become Candidate work history entries. Salary and compensation band map to Bullhorn custom fields (customText or customCurrency) on the Candidate. Since Bullhorn has no native Position object, Position-to-Employee linkage is resolved during extraction and the resolved employment details are written as a single Candidate profile with a current-position block.
PrimePay
Payroll History
Bullhorn ATS & CRM
Candidate (custom fields)
lossyPayroll records (wages, deductions, taxes, garnishments, net pay per pay period) have no native Bullhorn equivalent because Bullhorn does not run payroll. We extract payroll history in pay-period batches from PrimePay's export SOW, aggregate annual compensation totals per employee, and store salary, bonus, and overtime totals as Bullhorn custom fields on the Candidate record. Detailed per-period payroll records are documented in a written summary rather than migrated as individual line items. High-frequency weekly payroll environments generate 52 records per employee annually, which we batch into quarterly summaries to keep field count manageable.
PrimePay
PTO Balances
Bullhorn ATS & CRM
Candidate (custom fields)
lossyAccrual policies and current PTO balance snapshots (vacation, sick, personal) are extracted from PrimePay and stored as Bullhorn custom fields on the Candidate. Carryover rules and accrual rate configurations are documented in a written policy inventory for the customer's admin to configure in Bullhorn or a separate PTO system post-migration. Bullhorn has no native PTO accrual engine.
PrimePay
Benefits Enrollment
Bullhorn ATS & CRM
Candidate (custom fields) + Custom Object
lossyBenefit plan assignments, coverage tiers (employee only, employee plus spouse, family), and deduction amounts per pay period are extracted as a current enrollment snapshot from PrimePay. We map plan name, coverage level, and monthly deduction to Bullhorn custom fields on the Candidate. Customers with complex multi-plan benefits (medical, dental, vision, 401k, HSA) may request a separate Bullhorn custom object (e.g., BenefitsSummary) with lookup to Candidate to accommodate multi-row enrollment records per employee.
PrimePay
Organizations and Departments
Bullhorn ATS & CRM
Corporation (Bullhorn entity)
1:1PrimePay org structure, departments, and cost centers map to Bullhorn Corporation and Department entities. The top-level organization becomes the Bullhorn Corporation record, and child departments migrate as Bullhorn Department records with the correct hierarchy. This provides the org structure for candidate placement and reporting in Bullhorn.
PrimePay
Tax Withholdings
Bullhorn ATS & CRM
Candidate (custom fields)
lossyFederal, state, and local tax withholding configurations (W-4 derived values, additional withholding amounts, exempt status) are extracted from PrimePay per employee and stored as Bullhorn custom fields. We note that Bullhorn does not use these for payroll processing; they serve as a record of the employee's tax election for re-entry into whichever payroll system the customer adopts post-migration.
PrimePay
Time and Attendance
Bullhorn ATS & CRM
Candidate (custom fields) + Placement record
lossyFor staffing agencies, PrimePay time and attendance records for placed contractors can be mapped to Bullhorn Placement records with custom time-tracking fields. For internal employees migrating as Candidates, timesheet summaries (total hours worked, overtime hours) are stored as Bullhorn custom fields. Approval-state flags do not transfer because Bullhorn does not have a native time-off approval workflow equivalent to PrimePay's time-and-attendance module.
PrimePay
Workers Compensation
Bullhorn ATS & CRM
Placement (custom fields)
lossyWC class codes, rates, and claims linked to employee and position records in PrimePay are extracted and mapped to Bullhorn Placement records using custom fields for WC class code, carrier name, policy number, and claim status. Historical claims are documented in a written summary; active WC configuration transfers as a snapshot for the customer's HR admin to re-enter in Bullhorn Back Office or a separate WC administration tool.
PrimePay
Onboarding Records
Bullhorn ATS & CRM
Candidate (custom fields) + Placement
lossyNew hire workflow task states, I-9 records, and onboarding checklist completion status are extracted from PrimePay as a written inventory. Active onboarding task states are mapped to Bullhorn Candidate custom fields (e.g., I9_Status, backgroundCheck_Status). Completed-task history often cannot be reconstructed cleanly; we document the active state at migration time and flag the onboarding rebuild scope for the customer's Bullhorn admin.
PrimePay
Documents
Bullhorn ATS & CRM
ContentDocument (Bullhorn file attachment)
1:1Employee documents (offer letters, contracts, tax forms) stored in PrimePay are exported where accessible via the SOW-assisted export. We migrate file references and document content to Bullhorn ContentDocument records linked via ContentDocumentLink to the corresponding Candidate. Documents not included in the PrimePay SOW export are flagged in the written document inventory for manual retrieval or re-upload by the customer's admin.
PrimePay
Job Titles and Compensation History
Bullhorn ATS & CRM
Candidate (work history + custom fields)
lossyPrimePay's time-relational structure stores effective-dated job-title changes and compensation adjustments per employee. We extract the effective-date sequence (chronological list of title and salary changes) and map it to Bullhorn Candidate work history entries with job title, effective date, and compensation at each change point. The compensation progression is stored as a Bullhorn custom long-text field (customTextArea) holding a JSON or delimited summary of the effective-date sequence for audit purposes.
| PrimePay | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate1:1 | Fully supported | |
| Position | Candidate (work history fields)1:1 | Fully supported | |
| Payroll History | Candidate (custom fields)lossy | Mapping required | |
| PTO Balances | Candidate (custom fields)lossy | Mapping required | |
| Benefits Enrollment | Candidate (custom fields) + Custom Objectlossy | Mapping required | |
| Organizations and Departments | Corporation (Bullhorn entity)1:1 | Fully supported | |
| Tax Withholdings | Candidate (custom fields)lossy | Mapping required | |
| Time and Attendance | Candidate (custom fields) + Placement recordlossy | Fully supported | |
| Workers Compensation | Placement (custom fields)lossy | Mapping required | |
| Onboarding Records | Candidate (custom fields) + Placementlossy | Mapping required | |
| Documents | ContentDocument (Bullhorn file attachment)1:1 | Mapping required | |
| Job Titles and Compensation History | Candidate (work history + custom fields)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.
PrimePay gotchas
30-day post-termination data deletion window is a hard cutoff
CSV export requires a paid SOW and is not self-service
Position Management separates job data from employee data at the schema level
Weekly payroll and hourly workforces create high-frequency payroll data volume
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
SOW initiation and data inventory
We request the PrimePay Statement of Work for data export immediately upon engagement kickoff. While the SOW is being processed, we conduct a remote discovery session with the customer's PrimePay administrator to enumerate all Employee records, Position records, payroll history date range, PTO accrual policies, benefits enrollment plans, and any custom fields configured in PrimePay. We also confirm the Bullhorn edition (ATS Growth, Core, Pro, or Enterprise) to verify API availability. The discovery output is a written data inventory document listing every PrimePay object, record count, and field that will be mapped, including objects with no Bullhorn equivalent that will be documented but not migrated.
Schema design in Bullhorn
We design the Bullhorn destination schema in a Sandbox environment. This includes provisioning custom fields on the Candidate entity for compensation (salary, bonus, overtime), employment type, department, manager, hire date, employment status, PTO balance, benefits enrollment, tax withholding election, and WC information. For customers with complex multi-plan benefits, we design a BenefitsSummary custom object with a lookup to Candidate. We configure the Bullhorn Corporation and Department hierarchy to match the PrimePay org structure, and we set up Candidate record types for internal hires versus placed contractors if the customer runs both recruiting and internal HR through Bullhorn. Field types are matched to the data type (currency for salary, date for hire date, picklist for employment type) to ensure sorting and reporting work correctly in Bullhorn after migration.
PrimePay data extraction via SOW
PrimePay delivers the CSV export under the executed SOW. We receive the export file and validate it against the discovery data inventory: record counts per object, field completeness, date ranges for payroll history, and any fields that are null or truncated. We flag discrepancies with the customer and request a corrected export if record counts differ materially from discovery estimates. For weekly payroll environments, we request the export in pay-period batches to manage file size. The extraction phase runs on a timeline governed by PrimePay's SOW delivery schedule; we communicate this dependency upfront and do not commit a migration start date until the export is confirmed.
Transform and linkage resolution
We transform the PrimePay export into Bullhorn-compatible CSV format. The critical step is joining Position records to Employee records using PrimePay's position-employee relationship identifiers and collapsing the resolved fields into a single Candidate profile per employee. We compute effective-date compensation sequences for the work history block, aggregate payroll history into annual summaries for custom field storage, and map benefits enrollment to the configured Bullhorn custom fields or BenefitsSummary custom object. We apply field-level data quality rules: trimming whitespace, normalizing date formats to YYYY-MM-DD, mapping state codes to full state names where required by Bullhorn picklists, and flagging records with missing required fields for customer resolution before load.
Sandbox migration and reconciliation
We run a full migration into the customer's Bullhorn Sandbox using the transformed data. We reconcile record counts: Candidates in, Employees sourced, Positions resolved, BenefitsSummary records created. We spot-check 25-50 Candidate records against the PrimePay source to verify name accuracy, employment details, compensation figures, and department assignment. The customer's HR admin and Bullhorn admin review the Sandbox and sign off on the mapping before production migration begins. Any custom field type mismatches, picklist value gaps, or missing required fields are corrected in the transform layer before production.
Production migration with Bullhorn API rate-limit handling
We run production migration using Bullhorn's REST API with rate-limit handling: 50 concurrent sessions maximum, 1,500 calls per minute hard cap, and 100,000 calls per month on standard tiers. We use exponential backoff on HTTP 429 responses and chunk large record sets (particularly payroll history aggregates and custom object rows) to avoid burst-limit violations. Candidate records are loaded first, followed by Corporation and Department records, then Placement records with custom field data. We emit a per-phase row-count reconciliation report before advancing to the next object. Bullhorn ATS Growth editions without API access are handled via CSV import with manual custom field population documented as a separate admin task.
Cutover, validation, and written inventory delivery
We freeze PrimePay access during cutover and run a final delta migration of any records modified during the migration window. We perform a final reconciliation comparing total Candidate count, compensation field population rate, and benefits enrollment completeness against the PrimePay source. We deliver the written inventory of unmigratable PrimePay records: payroll run configurations, tax filing setups, garnishment administration, I-9 and E-Verify records, onboarding workflow definitions, and PTO accrual policy rules. We do not rebuild these in Bullhorn as standard scope; the inventory serves as the customer's admin checklist for manual reconfiguration or third-party system setup. We provide a one-week hypercare window for reconciliation issues and do not include post-migration admin training or workflow rebuild as standard scope.
Platform deep dives
PrimePay
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between PrimePay and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across PrimePay and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between PrimePay 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
PrimePay: Not publicly documented.
Data volume sensitivity
PrimePay 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 PrimePay to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your PrimePay 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 PrimePay
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.