HRMS migration
Field-level mapping, validation, and rollback between Factorial and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Factorial
Source
Bullhorn ATS & CRM
Destination
Compatibility
10 of 13
objects map 1:1 between Factorial and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Factorial to Bullhorn is a platform-type migration, not a straight record copy. Factorial is a general HRMS designed for employment administration across European and Latin American workforces, with modules covering the full employee lifecycle from hiring through payroll. Bullhorn is a recruitment ATS and CRM built for staffing agencies and in-house recruiters, with a data model optimized for Candidates, JobOrders, Placements, and ClientCorporations rather than employment records. The core migration challenge is reconciling the employee-to-candidate model: Factorial's employee profiles become Bullhorn candidate records, employment history becomes work experience custom fields, and compensation history migrates to custom salary or rate fields. We flag absence records and time entries as Bullhorn has no native absence management module, and we document Factorial workflows and approval chains for admin-side rebuild in Bullhorn Automation or Bullhorn Partner integrations. Document transfers proceed file-by-file through Factorial's paginated list API since no bulk download endpoint exists.
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 Factorial 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.
Factorial
Employee
Bullhorn ATS & CRM
Candidate
1:1Factorial employee records map to Bullhorn Candidate records. We map firstName, lastName, personalEmail, workEmail, phone, jobTitle, department, hireDate, and employmentStatus directly. Custom employee properties discovered during scoping (Factorial has no schema API so we enumerate active fields via the employee endpoint) map to Bullhorn Candidate custom fields. Active employment status from Factorial sets Candidate status to 'Active' in Bullhorn; inactive status maps to 'Archived'. Historical employee records that represent past employees map to Candidates with status 'Placed' or 'Not Active' per the customer's preference.
Factorial
Department and Cost Center
Bullhorn ATS & CRM
ClientCorporation (organizational custom fields)
lossyFactorial organizational hierarchy (departments, cost centers, parent-child relationships) has no direct Bullhorn equivalent because Bullhorn's organizational model centers on ClientCorporations for external companies and does not track internal org structure natively. We map departments to a Bullhorn custom object (Department__c) or to a multi-select picklist on the Candidate record, depending on the customer's reporting needs. Cost centers map to custom fields on Candidate or to a custom object if the customer requires cost-center attribution on Placements.
Factorial
Contract
Bullhorn ATS & CRM
Candidate (custom fields) + custom object
1:manyFactorial employment contracts include contract type (permanent, fixed-term, part-time), working hours, probation period, and legal entity reference. Bullhorn has no native contract entity, so we store contract metadata on Candidate custom fields (contractType__c, workingHours__c, probationEndDate__c) and map the legal entity reference to a ClientCorporation if the legal entity is also a client, or to a custom object (LegalEntity__c) if it is purely an internal entity. Contract templates vary by country and include legally required fields that may not map directly; we flag these during scoping and preserve the raw contract data as a document attachment on the Candidate record.
Factorial
Compensation History
Bullhorn ATS & CRM
Candidate (custom fields) + custom object
1:1Historical salary changes, bonuses, and equity grants are stored as effective-dated compensation records on each Factorial employee. Bullhorn stores payRate and billRate on Placements, not on Candidates. We migrate the full compensation timeline to a CompensationHistory__c custom object linked to Candidate, with fields for effectiveDate, baseSalary, currency, bonusAmount, equityGrant, and changeReason. If the customer requires placement billing rates, we also populate Placement custom fields at migration time. Gross-up calculations and tax withholding rules are not migrated because they are destination-system specific.
Factorial
Absence Record
Bullhorn ATS & CRM
Custom Absence__c object
lossyFactorial absence types, balances, and accrual rules per employee have no native Bullhorn equivalent. We create an Absence__c custom object in Bullhorn with fields for absenceType, startDate, endDate, hoursRequested, hoursApproved, and accrualBalanceAtMigration. Bullhorn ATS supports up to 2 custom objects (ATS Growth) or 10 (Front Office Growth and Enterprise); Absence__c counts toward this limit. Customers on ATS Growth tier who also need CompensationHistory__c may need to consolidate onto a single custom object or upgrade to access additional slots.
Factorial
Time Entry
Bullhorn ATS & CRM
Custom TimeEntry__c object or Placement
1:1Clock-in/out records and timesheets from Factorial include timestamps, employee reference, and project or cost-center tags. Bullhorn does not have a native time-tracking entity. We map time entries to a TimeEntry__c custom object linked to Candidate, with fields for workDate, clockIn, clockOut, hoursWorked, projectCode, and costCenter. For staffing firms that use Bullhorn Placements for temp workers, we map time entries to Placement Time and Expense records if the Bullhorn instance includes Bullhorn's back-office or VMS integration. Factorial time entries with project codes that represent internal projects require a project reference object in Bullhorn if the customer tracks internal project allocation.
Factorial
Document (employee file)
Bullhorn ATS & CRM
ContentDocument + ContentDocumentLink
1:1Documents attached to Factorial employee records (contracts, IDs, certifications, policies) migrate as ContentDocument records linked via ContentDocumentLink to the corresponding Bullhorn Candidate. Factorial imposes a per-file size limit and does not expose a bulk document download endpoint, so we paginate the documents list via the API and download each file individually. Large document archives (over 10,000 files) can extend migration time significantly. We flag document-heavy migrations during scoping and set expectations for transfer time accordingly. Document naming conventions from Factorial are preserved in the ContentVersion Title field for searchability.
Factorial
Custom Fields (Employees)
Bullhorn ATS & CRM
Candidate custom fields
1:1Factorial allows arbitrary custom fields on employee profiles that are not discoverable via a schema API. We enumerate all active custom fields by calling the employee and contract endpoints during scoping discovery, then map each to a Bullhorn Candidate custom field of the equivalent edit type (text, number, date, drop-down). Bullhorn has per-entity custom field limits (exact count varies by edition and field type); if the Factorial instance uses more custom fields than Bullhorn supports on Candidate, we prioritize business-critical fields and map the remainder to the CompensationHistory__c or a supplementary custom object.
Factorial
Payroll Run
Bullhorn ATS & CRM
Placement (billing fields) + custom reporting
1:1Factorial payroll runs include gross compensation, deductions, supplements, overtime, and net pay tied to a specific country legal entity. Bullhorn does not include HRMS payroll. For staffing firms using Bullhorn for temp placement billing, we map gross pay rate from Factorial to Placement billRate1 and billRate2 fields, and map overtime and supplemental pay to custom Placement fields. Tax withholding, social security contributions, and net-pay calculations do not migrate because they must be recomputed in the destination payroll system based on local requirements. We deliver a written payroll data export from Factorial structured for import into the customer's chosen payroll processor.
Factorial
Employee (emergency contact)
Bullhorn ATS & CRM
Custom EmergencyContact__c object
1:1Factorial stores emergency contact details (name, relationship, phone) on employee profiles. Bullhorn does not have a native emergency contact entity. We create an EmergencyContact__c custom object linked to Candidate with fields for name, relationship, phone, and email. This custom object counts toward the Bullhorn custom object limit and requires Bullhorn Support to provision before data import.
Factorial
Employee (banking details)
Bullhorn ATS & CRM
Custom BankDetails__c object
1:1Factorial stores bank account details for payroll disbursement. Bullhorn does not store banking information. We create a BankDetails__c custom object linked to Candidate with fields for bankName, accountNumber (encrypted at rest if Bullhorn edition supports field encryption), routingNumber, and iban. Banking data is migrated under heightened security protocols (encrypted transfer, temporary storage, purge after import confirmation). This data does not belong in Bullhorn's recruitment-focused data model long-term; we recommend the customer move it to their payroll processor as part of cutover.
Factorial
Workflows and Approvals
Bullhorn ATS & CRM
None
1:1Factorial workflow objects defining approval chains for time-off, expenses, and documents are platform-specific automation records with no export representation and no Bullhorn equivalent. Bullhorn Automation (a separate licensing tier) provides workflow capabilities but is architecturally different from Factorial's workflow engine. We document the full Factorial workflow structure during discovery including trigger conditions, approver chains, escalation rules, and action outputs, delivered as a written inventory the customer's Bullhorn admin or implementation partner uses to rebuild in Bullhorn Automation or a Bullhorn Partner integration.
Factorial
Employee (qualifications and skills)
Bullhorn ATS & CRM
Candidate (skills and custom fields)
1:1Factorial stores qualifications, skills, certifications, and education history on employee profiles. Bullhorn Candidate records support skills (a native text field with comma-separated values or a Skills picklist if configured), and additional qualifications map to Candidate custom fields. Certifications with expiration dates map to a custom Certification__c object linked to Candidate with fields for certificationName, issuedDate, expirationDate, and issuingBody. Skills and qualifications enrichment data sourced from LinkedIn or other platforms in Factorial does not migrate unless stored as structured Factorial custom fields.
| Factorial | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate1:1 | Fully supported | |
| Department and Cost Center | ClientCorporation (organizational custom fields)lossy | Fully supported | |
| Contract | Candidate (custom fields) + custom object1:many | Fully supported | |
| Compensation History | Candidate (custom fields) + custom object1:1 | Mapping required | |
| Absence Record | Custom Absence__c objectlossy | Fully supported | |
| Time Entry | Custom TimeEntry__c object or Placement1:1 | Fully supported | |
| Document (employee file) | ContentDocument + ContentDocumentLink1:1 | Fully supported | |
| Custom Fields (Employees) | Candidate custom fields1:1 | Mapping required | |
| Payroll Run | Placement (billing fields) + custom reporting1:1 | Fully supported | |
| Employee (emergency contact) | Custom EmergencyContact__c object1:1 | Fully supported | |
| Employee (banking details) | Custom BankDetails__c object1:1 | Fully supported | |
| Workflows and Approvals | None1:1 | Not supported | |
| Employee (qualifications and skills) | Candidate (skills and custom fields)1: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.
Factorial gotchas
No public bulk export API for documents
Custom fields are not discoverable via a schema endpoint
Payroll data is country-locked to the legal entity
Workflow automation does not export
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 assessment
We audit the source Factorial instance covering active employee count, contract types, custom fields (enumerated via employee and contract endpoints since no schema API exists), document archive size, absence record count and types, time entry volume, compensation history depth, payroll run records, and organizational hierarchy. We pair this with a Bullhorn edition assessment: Bullhorn ATS ($99-$129/user/month) covers basic candidate and job management; Bullhorn One ($150-$250+/user/month) includes Automation, business intelligence, and marketplace integrations. The discovery output is a written migration scope, a Bullhorn edition recommendation, and a list of Factorial data that has no Bullhorn equivalent requiring custom object or custom field design.
Bullhorn custom object and field provisioning
We design the destination Bullhorn schema to accommodate Factorial data that lacks a native equivalent. This includes provisioning Absence__c, CompensationHistory__c, TimeEntry__c, EmergencyContact__c, BankDetails__c, and any department or cost-center objects the customer requires. Bullhorn requires Support to provision custom objects; we submit the Custom Object Setup Sheet (provided by Bullhorn KB) with field definitions including edit types, required flags, and hint text. Custom fields on Candidate and ClientCorporation are provisioned via Bullhorn Admin Field Mappings. Schema deployment happens in a Bullhorn sandbox or staging environment first for validation.
Sandbox migration and reconciliation
We run a full migration into the Bullhorn staging environment using production-equivalent data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, ClientCorporations in, custom object records in), spot-checks 25-50 random Candidate records against Factorial source data, validates that absence balances, compensation history, and time entries are correctly linked to the parent Candidate, and confirms document file names and attachment associations. Any mapping corrections happen in staging before production migration begins. This step also validates that Bullhorn's field-level security, validation rules, and picklist value restrictions do not reject incoming records.
Document archive migration
We migrate Factorial employee documents in parallel with record migration. Because Factorial has no bulk download endpoint, we paginate the documents list, download each file individually, and associate each file with the corresponding Bullhorn Candidate via ContentDocumentLink. For large archives, we run document transfer as a separate parallel workstream to avoid blocking record migration. We validate document counts, file integrity (checksum), and attachment linkage post-transfer. Documents that fail download (Factorial may return errors for files exceeding size limits) are flagged for manual retrieval or alternative transfer methods.
Production migration in dependency order
We run production migration in record-dependency order: ClientCorporations (for Factorial companies or legal entities that map to clients), Candidates (with all custom field mappings resolved), custom object records (Absence, Compensation, Time, EmergencyContact, BankDetails) linked to the parent Candidate, and documents (ContentDocument + ContentDocumentLink). Each phase emits a row-count reconciliation report. We freeze Factorial write access during cutover, run a final delta migration for any records modified during the window, and validate total record counts match pre-migration discovery figures before declaring cutover complete.
Cutover, validation, and workflow handoff
We enable Bullhorn as the system of record after cutover validation. We deliver the Factorial workflow and approval chain inventory document to the customer's Bullhorn admin team, with recommended Bullhorn Automation equivalents for each workflow trigger and action type. We do not rebuild Factorial workflows in Bullhorn Automation as part of the migration scope; that work requires the customer's admin or a Bullhorn Partner implementation. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's team. We do not provide post-migration admin training, ongoing workflow management, or payroll processor integration as standard scope.
Platform deep dives
Factorial
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Factorial and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Factorial and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between Factorial 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
Factorial: 200 requests per minute for POST requests per Factorial's published API docs. GET-side limits are not separately enumerated; we tune extraction concurrency conservatively against the customer's tenant during scoping..
Data volume sensitivity
Factorial 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 Factorial to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Factorial 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 Factorial
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.