HRMS migration
Field-level mapping, validation, and rollback between RecruitBPM and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
RecruitBPM
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 12
objects map 1:1 between RecruitBPM and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from RecruitBPM to Bullhorn is a migration between two ATS platforms with different data models and export constraints. RecruitBPM does not publish a public REST API; all data extraction depends on their internal migration tooling and must be coordinated with their team before extraction can begin. Bullhorn, by contrast, exposes a documented REST API (entities/ Candidate, Lead, ClientCorporation, JobOrder, Placement, Note, Task) and a Bulk API for high-volume record ingestion, allowing us to move data directly without a manual import pipeline. We extract from RecruitBPM through their internal tooling, normalize the schema to Bullhorn's entity model, and load through Bullhorn's API with rate-limit handling and batch chunking. We do not migrate RecruitBPM workflows or automated sequences; we deliver a written inventory of those for the customer's Bullhorn admin to rebuild in Bullhorn Automation (formerly Herefish) or Bullhorn's native workflow builder. The 60-day RecruitBPM data purge deadline is flagged at engagement start and drives the migration timeline.
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 RecruitBPM 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.
RecruitBPM
Candidate
Bullhorn ATS & CRM
Candidate
1:1RecruitBPM Candidate records map 1:1 to Bullhorn Candidate. The RecruitBPM resume (stored as binary attachment) migrates as a file linked to the Bullhorn Candidate's document entity. Candidate status, skills, source attribution, and contact details transfer directly. We use Bullhorn's Candidate POST endpoint with the isDeleted=false flag preserved and populate the dateLastModified from RecruitBPM's activity log timestamp. Phone, email, address, and LinkedIn URL migrate to Bullhorn Candidate's name, email, phone, and webAddress fields.
RecruitBPM
Client
Bullhorn ATS & CRM
ClientCorporation
1:1RecruitBPM Client records map 1:1 to Bullhorn ClientCorporation. The client name, industry, billing address, primary contact, and relationship notes transfer directly. ClientCorporation is created before any Candidate or JobOrder import so that lookups from JobOrder to client are satisfied at insert time. We resolve RecruitBPM's client status (active/inactive) to Bullhorn's status field.
RecruitBPM
Job Order
Bullhorn ATS & CRM
JobOrder
1:1RecruitBPM Job Order records map to Bullhorn JobOrder with ClientCorporationId resolved via the Client-to-ClientCorporation mapping. Job Order status, requirements, compensation, location, and description transfer directly. The RecruitBPM pipeline stage name is mapped to Bullhorn's JobOrder status picklist values (e.g., New, Open, Full, Placed, Cancelled). We configure any non-standard status values as Bullhorn custom picklist entries before import.
RecruitBPM
Placement
Bullhorn ATS & CRM
Placement
1:1RecruitBPM Placements map to Bullhorn Placement with references resolved to the migrated CandidateId and JobOrderId. Start date, end date, compensation (bill rate, pay rate, fee), and placement status transfer directly. Placement count per Candidate is tracked via Bullhorn's placementCount field on Candidate. We use Bullhorn's Placement POST endpoint with the Candidate and JobOrder lookup fields populated from the parent-record resolution table built during the Candidate and JobOrder migration phases.
RecruitBPM
Talent Pool
Bullhorn ATS & CRM
ClientCorporation (tagged) or custom field
lossyRecruitBPM Talent Pools are segregated candidate collections by skill, location, or certification. Bullhorn does not have a native Talent Pool entity. We map pool membership to a Bullhorn Candidate custom multi-select picklist field (e.g., talent_pool__c) with each distinct pool name as a picklist value, preserving which candidates belong to which pool. If the customer has fewer than 15 distinct pools, we use a custom field; if more, we document the pool structure as a separate CSV reference table.
RecruitBPM
Interview
Bullhorn ATS & CRM
Appointment
1:1RecruitBPM interview records (scheduled time, interviewer, format, outcome notes) map to Bullhorn Appointment. Bullhorn Appointment is linked to a Candidate or Lead via the transactionType and candidateId/jobOrderId fields. For RecruitBPM recorded video interviews, we migrate the interview record as an Appointment with notes, but the video file itself migrates as a ContentDocument (binary blob) linked via ContentDocumentLink to the Candidate. Format (video, phone, in-person) migrates as an Appointment custom field.
RecruitBPM
Assessment
Bullhorn ATS & CRM
Note (structured)
1:1RecruitBPM custom assessment results (form schema plus candidate responses) cannot map to a native Bullhorn entity because Bullhorn does not have an assessment form object. We migrate assessment results as structured Note records with a custom noteType field set to 'Assessment' and a body containing the form name, question, and response. The custom form schema itself is documented in the handoff inventory for the customer's Bullhorn admin to rebuild as a Bullhorn form or third-party assessment tool integration.
RecruitBPM
Activity (emails, calls, SMS, notes)
Bullhorn ATS & CRM
Note, Task, Appointment
1:1RecruitBPM activity records (calls, emails, SMS, voicemails, notes) tied to Candidates and Clients map to Bullhorn Note and Task entities. Email bodies migrate as Note with a noteType of 'Email'. Call logs migrate as Task with taskType='Call' and CallDuration in minutes. We link each activity to the migrated Candidate or ClientCorporation via the personID and clientCorporationID fields respectively. Bullhorn's REST API supports bulk inserts for Note and Task, which we use with batch sizes of 200 per request and rate-limit handling.
RecruitBPM
Pipeline Stages
Bullhorn ATS & CRM
JobOrder status picklist
lossyRecruitBPM's customizable Job Order pipeline stages (tenant-defined names and counts) map to Bullhorn's JobOrder status picklist values. We extract the full stage list during scoping, add any non-standard stage names as Bullhorn custom status values, and assign probability percentages per stage. The mapping table between RecruitBPM stage names and Bullhorn status values is documented in the migration handoff as a reference for the Bullhorn admin.
RecruitBPM
Custom Fields
Bullhorn ATS & CRM
Custom fields on Candidate, ClientCorporation, JobOrder
lossyRecruitBPM's tenant-specific custom fields (across Candidates, Clients, Job Orders) are extracted in full during scoping. We map each to a Bullhorn custom field on the equivalent entity, provisioning the destination schema before data migration begins. Bullhorn custom fields follow the {fieldName}_c naming convention and are typed to match RecruitBPM's field type (text, number, date, picklist). Any RecruitBPM custom fields with no Bullhorn equivalent are documented in the handoff with a recommended Bullhorn custom field definition.
RecruitBPM
User / Recruiter
Bullhorn ATS & CRM
User
1:1RecruitBPM platform users (recruiters, admins, hiring managers) map to Bullhorn User records by email match. Owner assignment on Candidates, Job Orders, and Placements is preserved by resolving the RecruitBPM userId to the Bullhorn User ID. Any RecruitBPM user without a matching Bullhorn User is placed in a reconciliation queue for the customer's Bullhorn admin to provision before the relevant records are migrated. Permissions, team structures, and role hierarchies are not migrated; we document the RecruitBPM role assignments for the admin to rebuild in Bullhorn.
RecruitBPM
Documents / Attachments
Bullhorn ATS & CRM
ContentDocument
1:1Resume files, contracts, and onboarding documents stored in RecruitBPM migrate as Bullhorn ContentDocument records linked via ContentDocumentLink to the parent Candidate, ClientCorporation, JobOrder, or Placement. We verify file format compatibility (PDF, DOCX, RTF supported by Bullhorn) and flag any unsupported binary formats during scoping. Resume files are mapped to Bullhorn Candidate's primary resume field where applicable. Large attachments (over 25 MB) exceed Bullhorn's file size limit and are flagged for separate delivery as a ZIP archive.
| RecruitBPM | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Client | ClientCorporation1:1 | Fully supported | |
| Job Order | JobOrder1:1 | Fully supported | |
| Placement | Placement1:1 | Fully supported | |
| Talent Pool | ClientCorporation (tagged) or custom fieldlossy | Fully supported | |
| Interview | Appointment1:1 | Fully supported | |
| Assessment | Note (structured)1:1 | Fully supported | |
| Activity (emails, calls, SMS, notes) | Note, Task, Appointment1:1 | Fully supported | |
| Pipeline Stages | JobOrder status picklistlossy | Mapping required | |
| Custom Fields | Custom fields on Candidate, ClientCorporation, JobOrderlossy | Mapping required | |
| User / Recruiter | User1:1 | Fully supported | |
| Documents / Attachments | ContentDocument1:1 | 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.
RecruitBPM gotchas
No public API — migration depends on internal tooling
Account data purges 60 days after cancellation
Single pricing tier with opaque optional features
Custom fields and workflows may require rebuilding
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
RecruitBPM extraction coordination and discovery
We open a coordination ticket with RecruitBPM's internal migration team to initiate data extraction. Simultaneously we audit the RecruitBPM portal for record counts across Candidates, Clients, Job Orders, Placements, Talent Pools, Interviews, Assessments, and Activity logs. We also inventory custom field definitions, pipeline stage names, active workflows, automated sequences, and any add-on features in use. The discovery output is a RecruitBPM data deliverable request and a preliminary mapping plan. We flag the 60-day cancellation deadline as a project constraint and build the full timeline against it.
Bullhorn org provisioning and custom field schema setup
We work with the customer's Bullhorn admin to provision the destination schema in Bullhorn. This includes creating any custom fields on Candidate, Lead, ClientCorporation, JobOrder, Placement, Note, and Task entities; adding non-standard picklist values to JobOrder status; and creating custom multi-select picklists for talent pool membership. We set up the Owner-to-User mapping table (RecruitBPM user email to Bullhorn User ID) during this phase. Bullhorn schema is validated in the customer's Bullhorn sandbox if available before any data moves to production.
Data extraction from RecruitBPM and normalization
RecruitBPM delivers the export file set through their internal migration tooling. We normalize the data to Bullhorn's entity schema: Candidates and Leads are split using the qualification rule designed in step one; Clients are normalized to ClientCorporation; Job Orders are mapped with stage names converted to Bullhorn status picklist values; Placements are prepared with parent record IDs resolved from the Candidate and JobOrder maps. Activity records (emails, calls, notes) are normalized to Bullhorn Note and Task entities. We generate a reconciliation report comparing RecruitBPM record counts to the normalized file set before ingestion begins.
Bullhorn API ingestion with rate-limit handling
We ingest data into Bullhorn using their REST API (entities endpoint) for standard records and the Bulk API for high-volume activity migrations. Bullhorn enforces API rate limits that require exponential backoff and batch chunking; we manage this with 200-record batch sizes for Note and Task inserts and sequential processing for Candidate, ClientCorporation, and JobOrder records with dependency resolution. OwnerId references are resolved using the User mapping table built during schema setup. Each entity type emits a row-count reconciliation report. We pause ingestion for any entity that exceeds a 3% rejection rate and investigate before resuming.
Activity history and attachment migration
Activity records (calls, emails, SMS, notes, interviews) are migrated as Bullhorn Task, Note, and Appointment records linked to the migrated Candidate or ClientCorporation. We process activity history in reverse chronological order, migrating the most recent records first to ensure the activity timeline is complete for active records even if a full historical load exceeds the project window. Resume and document attachments migrate as ContentDocument records via Bullhorn's file API with format verification against Bullhorn's supported types (PDF, DOCX, RTF, TXT). Files exceeding the 25 MB limit are flagged for separate delivery.
Cutover, validation, and workflow handoff
We freeze RecruitBPM write access during cutover and run a final delta migration of any records modified during the migration window. Bullhorn becomes the system of record once the delta is confirmed and the customer's admin team validates a random sample of migrated records (we recommend 50 records per entity type). We deliver the workflow and sequence inventory document to the customer's Bullhorn admin team for rebuild in Bullhorn Automation or Bullhorn native workflows. We provide a one-week hypercare window to resolve any post-cutover reconciliation issues. We do not rebuild RecruitBPM workflows as Bullhorn workflows as part of the migration scope.
Platform deep dives
RecruitBPM
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 RecruitBPM 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
RecruitBPM: Not publicly documented.
Data volume sensitivity
RecruitBPM 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 RecruitBPM to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your RecruitBPM 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 RecruitBPM
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.