HRMS migration
Field-level mapping, validation, and rollback between Bullhorn ATS & CRM and Recruit CRM & ATS. We move data and schema; workflows are rebuilt natively in Recruit CRM & ATS.
Bullhorn ATS & CRM
Source
Recruit CRM & ATS
Destination
Compatibility
9 of 11
objects map 1:1 between Bullhorn ATS & CRM and Recruit CRM & ATS.
Complexity
BStandard
Timeline
3-5 weeks
Try the reverse
Overview
Moving from Bullhorn ATS & CRM to Recruit CRM is a platform switch from a legacy enterprise ATS with opaque pricing and a steep learning curve to a modern, SMB-focused recruitment platform with published per-seat pricing. Bullhorn stores recruitment data across Candidate, ClientCorporation, CandidateList, Placement, and Opportunity objects that must map to Recruit CRM's Candidates, Clients, Jobs, Applications, and Pipeline objects. The placement billing model in Bullhorn—where pay rate, charge rate, overtime rules, and start/end dates live in a single Placement record—requires decomposition into Recruit CRM's linked candidate and job context. We identify the customer's Bullhorn edition during scoping because ATS Growth excludes API access entirely, forcing a CSV-based export that omits attachments and requires separate file-reference retrieval. Recruit CRM's pipeline uses a Kanban model with configurable stage labels; Bullhorn's recruiting-specific opportunity stages (Interview, Offer, Extended) must be remapped to Recruit CRM equivalents. Workflows, sequences, and automations do not migrate; we deliver a written inventory for the customer's admin to rebuild in Recruit CRM's no-code automation builder.
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.
Source platform
Bullhorn ATS & CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Bullhorn ATS & CRM.
Destination platform
Recruit CRM & ATS platform overview
Scorecard, SWOT, gotchas, and pricing for Recruit CRM & ATS.
Data migration guide
The complete Recruit CRM migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Bullhorn migration guide
Understand the data you're exporting from Bullhorn ATS & CRM before mapping it.
Destination checklist
Recruit CRM migration checklist
Pre- and post-cutover tasks for moving onto Recruit CRM & ATS.
Source checklist
Bullhorn migration checklist
Exit checklist for unwinding your Bullhorn ATS & CRM setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Bullhorn ATS & CRM object lands in Recruit CRM & ATS, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Bullhorn ATS & CRM
Candidate
Recruit CRM & ATS
Candidate
1:1Bullhorn Candidates map to Recruit CRM Candidates as the primary ATS record. Bullhorn's parsed resume data (skills, work history, education, certifications) transfers as structured fields in Recruit CRM. We map Bullhorn's status field to Recruit CRM's candidate status, and preserve the original Bullhorn candidate ID as a custom field bh_id__c for cross-reference. Resume files exist as separate attachment objects in Bullhorn and require API retrieval via file reference URLs; CSV-only exports silently omit them.
Bullhorn ATS & CRM
JobOrder
Recruit CRM & ATS
Job
1:1Bullhorn JobOrder maps to Recruit CRM Job. Bullhorn stores requirements, location, salary information, and job status in JobOrder; these map to Recruit CRM's Title, Description, Location, Salary Range, and Status fields. Recruit CRM's Jobs include a pipeline stage field that we configure to match Bullhorn's job status workflow. Each Job in Recruit CRM links to a Client record, mirroring Bullhorn's ClientCorporation association.
Bullhorn ATS & CRM
Client (ClientCorporation)
Recruit CRM & ATS
Client
1:1Bullhorn ClientCorporation maps directly to Recruit CRM Client. Company details, primary contact information, industry, and address fields transfer 1:1. The Client record in Recruit CRM serves as the parent for linked Job and Candidate/Contact records, matching Bullhorn's relationship model. We resolve Client IDs before Job or Candidate import so that lookups are satisfied at insert time.
Bullhorn ATS & CRM
Contact
Recruit CRM & ATS
Contact
1:1Bullhorn Contacts represent both client-side business contacts and candidate references, sharing a schema but serving different roles. We separate Contacts by Bullhorn's entityType during migration to avoid creating duplicate Contact records in Recruit CRM. Client-facing contacts attach to the Client record; candidate reference contacts attach to the Candidate record. Email deduplication runs against the merged Contact pool before insert.
Bullhorn ATS & CRM
Opportunity
Recruit CRM & ATS
Deal / Pipeline
1:1Bullhorn Opportunities are CRM-level pipeline deals tied to Clients using recruiting-specific stages (Interview, Offer, Extended). These remap to Recruit CRM's Pipeline Deal records. We build a stage mapping table during scoping that maps each Bullhorn opportunity stage to the nearest Recruit CRM pipeline stage. Bullhorn's opportunity billing amount, probability, and close date map to Recruit CRM's Deal value, probability, and expected close date fields.
Bullhorn ATS & CRM
Placement
Recruit CRM & ATS
Placement (Candidate + Job link)
1:manyBullhorn Placements are transactional records linking Candidate, JobOrder, and Client with billing details including pay rate, charge rate, start date, end date, and overtime rules. Recruit CRM represents placements as a link between the Candidate record and the Job record, with billing fields stored on one or both sides. We decompose each Bullhorn Placement into a Recruit CRM Candidate-Job application record with billing details preserved as custom fields, and the original Bullhorn Placement ID stored as bh_placement_id__c for reconciliation.
Bullhorn ATS & CRM
Task
Recruit CRM & ATS
Task
1:1Bullhorn Tasks map directly to Recruit CRM Tasks with status, due date, priority, and owner assignment preserved. Task type, description, and association to the parent record (Candidate, Job, Client, or Placement) transfer via the corresponding Recruit CRM ID. Bullhorn's ATS Growth edition caps API subscriptions at 50, which may truncate task export volume for large task histories; we flag this during scoping and use pagination to retrieve all records.
Bullhorn ATS & CRM
Custom Object
Recruit CRM & ATS
Custom Field
lossyBullhorn custom objects with up to 55 fields each are available in limited quantities per edition (ATS Growth: none; ATS: 2; Front Office Growth/Enterprise: 10). Recruit CRM has no hard ceiling on custom fields per record. We audit the customer's Bullhorn custom object usage during scoping, map each to a Recruit CRM custom field group on the corresponding record, and flag any that exceed Recruit CRM's field type coverage for the admin to review. Overflow fields not accommodated within reasonable custom field counts are stored as text notes with a warning flag.
Bullhorn ATS & CRM
Attachment
Recruit CRM & ATS
Document / Resume File
1:1Bullhorn stores resume files, parsed documents, and uploaded communications as separate attachment objects accessible only via the REST API. Bullhorn's standard CSV export does not include attachments. We retrieve originals via Bullhorn's file reference URLs and upload them to Recruit CRM's document storage, linking each file to the corresponding Candidate or Job record. If the customer's Bullhorn edition excludes API access, we flag the attachment gap explicitly and recommend the customer export files manually before the migration window.
Bullhorn ATS & CRM
CandidateList (Job Submission)
Recruit CRM & ATS
Application / Submission
1:1Bullhorn CandidateList represents a candidate's submission to a specific job, storing status within the recruitment pipeline (e.g., submitted, phone screen, interview, offer). These map to Recruit CRM's Application or submission records linking Candidate to Job. The candidate-job association, submission date, and pipeline status transfer. Bullhorn's CandidateList-specific fields (interview date, feedback notes) migrate as custom fields on the Recruit CRM application record.
Bullhorn ATS & CRM
User (Owner/Recruiter)
Recruit CRM & ATS
User
1:1Bullhorn Users map to Recruit CRM Users by email match. Bullhorn User records carry name, email, role, department, and active/inactive status. We resolve owners by email at migration time; any Bullhorn User without a matching Recruit CRM User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Owner assignment on migrated records (Candidates, Jobs, Tasks) is updated to the resolved Recruit CRM User ID.
| Bullhorn ATS & CRM | Recruit CRM & ATS | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| JobOrder | Job1:1 | Fully supported | |
| Client (ClientCorporation) | Client1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Opportunity | Deal / Pipeline1:1 | Fully supported | |
| Placement | Placement (Candidate + Job link)1:many | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Custom Object | Custom Fieldlossy | Fully supported | |
| Attachment | Document / Resume File1:1 | Fully supported | |
| CandidateList (Job Submission) | Application / Submission1:1 | Fully supported | |
| User (Owner/Recruiter) | User1: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.
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
Recruit CRM & ATS gotchas
API rate limits are license-scaled and can throttle bulk migration
Custom field schemas vary per organization and require field-level mapping
Files and email attachments require separate extraction and re-upload
Email sequences and automation logic do not transfer between platforms
Pair-specific challenges
Migration approach
Discovery and edition scoping
We audit the source Bullhorn instance across edition (Starter/ATS/Corporate/Front Office), record counts by object, active custom objects, pipeline stage names, and engagement volume. We identify whether the customer is on ATS Growth (no API access) or a higher tier with full REST API access. The discovery output is a written migration scope specifying the record counts per object, the Bullhorn edition, any known API constraints, and the recommended Recruit CRM tier based on the customer's user count and feature needs.
Schema design and stage mapping
We design the Recruit CRM schema before any data moves. This includes provisioning custom fields to accommodate Bullhorn's custom object data, configuring pipeline stages to match the customer's Bullhorn opportunity stage names, setting up Client, Candidate, and Job record types, and building the opportunity stage mapping table. Bullhorn's opportunity stages are documented from the source system and mapped to Recruit CRM equivalents during this phase. The Recruit CRM schema is validated in a sandbox environment before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a Recruit CRM sandbox or trial environment using production-like data volumes. The customer's operations lead reviews record counts (Candidates in, Jobs in, Clients in, Placements in, Opportunities in), spot-checks 25-50 records against Bullhorn source data, and validates that placement billing details, candidate skills, and opportunity stages transferred correctly. Any mapping corrections are applied here. No production records move until the sandbox sign-off is received.
Attachment retrieval and file preparation
We retrieve Bullhorn attachment objects via the REST API file-reference endpoints. If the customer's Bullhorn edition excludes API access, we prepare a file-extraction guide for the customer's admin to export attachments manually before the migration window. All retrieved files are organized by Candidate ID and Job ID, named with the Bullhorn record reference, and staged for bulk upload into Recruit CRM's document storage with links to the corresponding records.
Production migration in dependency order
We run production migration in record-dependency order: Users and Owner IDs (validated against Recruit CRM User table), Clients (from Bullhorn ClientCorporation), Jobs (from Bullhorn JobOrders), Candidates (from Bullhorn Candidates with parsed resume data), CandidateLists (as Recruit CRM Applications linking Candidate to Job), Placements (decomposed into application records with billing fields and bh_placement_id__c cross-reference), Opportunities (with stage remapping applied), Tasks (in bulk with parent record lookups resolved), and finally Custom Object data (migrated as Recruit CRM custom fields). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation handoff
We freeze Bullhorn writes during the cutover window, run a final delta migration of any records modified during migration, then set Recruit CRM as the active system of record. We deliver a written inventory of Bullhorn workflows, sequences, and automations with Recruit CRM equivalents documented for the customer's admin to rebuild in Recruit CRM's no-code automation builder. We offer a one-week hypercare window to resolve reconciliation issues reported by the recruiting team. We do not rebuild Bullhorn workflows as Recruit CRM automations inside the standard migration scope.
Platform deep dives
Bullhorn ATS & CRM
Source
Strengths
Weaknesses
Recruit CRM & ATS
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 Bullhorn ATS & CRM and Recruit CRM & ATS.
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
Bullhorn ATS & CRM: 1,500 req/min, 100,000 calls/month, 50 concurrent sessions, 50 subscriptions; ATS Growth edition has NO API access.
Data volume sensitivity
Bullhorn ATS & CRM 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 Bullhorn ATS & CRM to Recruit CRM & ATS migration scoping. Not seeing yours? Book a call.
Walk through your Bullhorn ATS & CRM to Recruit CRM & ATS migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Bullhorn ATS & CRM
Other ways to arrive at Recruit CRM & ATS
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.