HRMS migration
Field-level mapping, validation, and rollback between Lever and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Lever
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 13
objects map 1:1 between Lever and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Lever to Bullhorn is a schema translation between two fundamentally different ATS models. Lever is opportunity-centric — a single Contact can hold multiple Opportunities, each with its own stage, interview history, and feedback. Bullhorn uses a relational staffing model with Candidate, JobOrder, ClientCorporation, JobSubmission, and Placement as distinct objects. We split every multi-Opportunity Lever Contact into multiple JobSubmission records in Bullhorn, attach each to the correct JobOrder, and resolve ClientCorporation and ClientContact records for every submission. Scorecard data cannot be created via Lever's API and migrates as structured notes; Bullhorn admins rebuild scorecard templates post-import. Talent pool and nurture campaign associations carry as Contact-level tags. Bullhorn requires every record to have an owner at import time, so we reconcile the Lever user roster against Bullhorn User records before any batch insert begins. Workflows, sequences, and automated nurture campaigns do not migrate; we deliver a written inventory of every automation requiring rebuild in Bullhorn Automation or the destination's workflow 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.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Lever 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.
Lever
Contact
Bullhorn ATS & CRM
Candidate
1:1Lever Contacts map directly to Bullhorn Candidate records. The Lever Contact ID is preserved in a custom field lever_original_id__c for audit traceability. Multi-select fields on Lever (phone type, social links) map to Bullhorn Candidate's typed multi-value fields. Every Candidate must have an Owner at insert time; we resolve the Lever Owner by email match against Bullhorn User before inserting.
Lever
Opportunity (multi per Contact)
Bullhorn ATS & CRM
JobSubmission
1:manyThis is the highest-risk mapping in the pair. A Lever Contact with three active Opportunities (three separate role applications) must become one Bullhorn Candidate record plus three JobSubmission records — one per Opportunity. We export all Opportunity records per Contact, compute the split during transformation, and insert each JobSubmission linked to the correct JobOrder. The Opportunity stage maps to JobSubmission status; the Opportunity createdAt date maps to JobSubmission dateSubmitted. If Bullhorn does not yet have the target JobOrder created, we hold JobSubmission inserts until JobOrders are loaded.
Lever
Job
Bullhorn ATS & CRM
JobOrder
1:1Lever Jobs map to Bullhorn JobOrder. Job title, description, department, location, and employment type transfer directly. The Lever Job opening count maps to JobOrder numOpenings. Job status (Open, Closed, Draft) maps to JobOrder status. We flag any Lever Jobs with no published posting URL and note them for manual re-posting in Bullhorn.
Lever
Opportunity Stage
Bullhorn ATS & CRM
JobSubmission Status + JobOrder pipeline stages
lossyLever's pipeline stages are configurable per Job. We export the full stage configuration (stage name, order, probability) and recreate it in Bullhorn as JobSubmission status values plus the corresponding pipeline stages on JobOrder. Stage probabilities migrate to Bullhorn's expectedCloseDate and stage weight fields where supported.
Lever
Interview
Bullhorn ATS & CRM
JobSubmission interview events
1:1Lever interview records (scheduling data, interviewer assignment, interview type, duration) map to Bullhorn JobSubmission interview event entries. Bullhorn captures interview scheduling as part of the submission workflow. We preserve interviewer assignment by resolving Lever user email to Bullhorn User ID. Interview cancellation records carry as a note on the JobSubmission. Full calendar integration re-connection is a post-migration step.
Lever
Scorecard and Feedback
Bullhorn ATS & CRM
Note (structured)
1:1Lever scorecards use a structured evaluation format tied to Opportunities. Bullhorn has no direct scorecard creation API — we import scorecard data as Bullhorn Note records with a structured label prefix (e.g., SCORECARD:) so that admins can identify and manually recreate them. The customer receives a scorecard inventory document listing every scorecard, the evaluator, the rating fields, and the recommended Bullhorn form or custom object equivalent. This is not a data loss gap — it is a known API limitation disclosed during scoping.
Lever
Offer
Bullhorn ATS & CRM
JobSubmission offer data
1:1Lever Offer records (compensation, start date, offer status) attach to the Opportunity. In Bullhorn, offer data lives on the JobSubmission. We extract the offer fields from Lever and write them into the corresponding JobSubmission's offer fields if Bullhorn's edition supports them, or into a custom object (if Bullhorn's edition allows) or a structured note. Offer history (extended offers, counter-offers) migrates as sequential note entries.
Lever
User
Bullhorn ATS & CRM
User
1:1Lever Users map to Bullhorn Users by email address. We export the full Lever user roster including name, email, role, and department. Inactive Lever users flag separately. Bullhorn requires OwnerId on Candidate and JobSubmission at insert time, so any Lever user without a matching Bullhorn User must be provisioned by the Bullhorn admin before we resume the migration batch. We provide a user reconciliation worksheet listing every unmatched owner.
Lever
Client (on Opportunity or Contact)
Bullhorn ATS & CRM
ClientCorporation + ClientContact
many:1Lever has no formal ClientCorporation object; client associations on Opportunities are typically stored as text fields or linked Contacts. We extract every distinct client reference from Lever records, deduplicate by client name or domain, and create Bullhorn ClientCorporation records. The corresponding hiring manager or recruiter contact on the Lever record becomes a ClientContact linked to the ClientCorporation. If the Lever data uses a Contact record as the client (rare), we treat it as a ClientCorporation in Bullhorn.
Lever
Custom Fields (Opportunity-level)
Bullhorn ATS & CRM
Custom Fields on JobSubmission or CustomObject
1:1Lever custom fields on Opportunities and Contacts vary by tenant configuration. We enumerate all custom field definitions during discovery, map them to equivalent Bullhorn Candidate or JobSubmission custom fields, or to Bullhorn Custom Objects if the field count exceeds standard limits. Bullhorn ATS supports 2 custom objects; Bullhorn Growth and Enterprise support up to 10. We configure Bullhorn custom fields before data import using the Bullhorn Field Mappings admin tool or REST API.
Lever
Attachment and Resume File
Bullhorn ATS & CRM
Candidate resume and attachment
1:1Lever stores attachment URLs as session-linked references that expire when Lever credentials are rotated. We download all candidate CVs and attachments during the export window — before the customer rotates any Lever API keys — and re-upload files to Bullhorn Candidate records directly via Bullhorn's REST API. Bullhorn parses uploaded resumes using its built-in resume parsing. This step has a hard dependency on export completion before credential cutover.
Lever
Nurture Campaign and Talent Pool
Bullhorn ATS & CRM
Tag + custom TalentPool field
lossyLever's CRM layer includes talent pool tagging and nurture campaign associations with no direct Bullhorn equivalent. We carry these as Bullhorn Tags on the Candidate record plus a custom multi-select text field candidate_talent_pool__c. Any automated sequences or nurture logic tied to these pools cannot be migrated and must be rebuilt in Bullhorn Automation (formerly Herefish) or a dedicated email cadence tool. We document every unique talent pool and nurture campaign label during discovery.
Lever
Interview Event
Bullhorn ATS & CRM
JobSubmission event history (supplementary)
1:1Lever interview event records capture scheduling metadata, cancellation flags, and calendar sync status. Bullhorn does not recreate calendar integrations from imported interview data. We export interview event history as supplementary notes on the JobSubmission (labeled INTERVIEW_EVENT:) and flag that interviewers must reconnect their calendar accounts to Bullhorn post-migration. New interview slots must be scheduled via Bullhorn's scheduling tool or the customer's preferred calendar integration.
| Lever | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Contact | Candidate1:1 | Fully supported | |
| Opportunity (multi per Contact) | JobSubmission1:many | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Opportunity Stage | JobSubmission Status + JobOrder pipeline stageslossy | Fully supported | |
| Interview | JobSubmission interview events1:1 | Fully supported | |
| Scorecard and Feedback | Note (structured)1:1 | Fully supported | |
| Offer | JobSubmission offer data1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Client (on Opportunity or Contact) | ClientCorporation + ClientContactmany:1 | Fully supported | |
| Custom Fields (Opportunity-level) | Custom Fields on JobSubmission or CustomObject1:1 | Fully supported | |
| Attachment and Resume File | Candidate resume and attachment1:1 | Fully supported | |
| Nurture Campaign and Talent Pool | Tag + custom TalentPool fieldlossy | Fully supported | |
| Interview Event | JobSubmission event history (supplementary)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.
Lever gotchas
Lever's Opportunity model requires splitting in most destinations
Scorecards cannot be created via Lever's API
Attachment download must happen before credential cutover
Nurture campaign and talent pool associations do not translate directly
Interview event history is supplementary data only
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 record volume audit
We audit the Lever tenant across Contacts, Opportunities (with multi-Opportunity rate per Contact), Jobs, Interviews, Scorecards, Offers, Users, custom fields, and attachment count. We also audit the target Bullhorn instance for existing ClientCorporation records, User count, and edition-level custom object limits. The discovery output is a written migration scope, a record-count estimate, and a Bullhorn edition recommendation if the customer's custom field volume exceeds their current Bullhorn tier's limits.
Opportunity split rule and ClientCorporation mapping design
We define the Opportunity-to-JobSubmission split rule based on the customer's Lever Opportunity-per-Contact distribution. We also map every distinct client reference in Lever to a Bullhorn ClientCorporation and ClientContact. Bullhorn field mappings (Admin > Field Mappings) are configured for any custom fields. This step produces the transformation logic that every subsequent export batch runs through before Bullhorn insertion.
Schema provisioning in Bullhorn
We provision Bullhorn custom fields, custom objects, and field mappings before any data insert. Bullhorn's Custom Objects require Bullhorn Support to create initially (via the Custom Object Setup Sheet); we coordinate with the customer's Bullhorn admin to submit the ticket and confirm setup. Standard fields are mapped via Bullhorn's Field Mappings admin panel or REST API meta endpoints. All Bullhorn configuration happens in a staging or Sandbox environment before production migration begins.
Owner reconciliation and User provisioning
We extract every distinct Lever Owner referenced across Contacts, Opportunities, Interviews, and Offers and match by email against the Bullhorn User table. Owners without a matching Bullhorn User are listed in a reconciliation worksheet. The Bullhorn admin provisions missing Users before record migration resumes. Bullhorn requires OwnerId on every Candidate, JobSubmission, JobOrder, and Placement — migration cannot proceed past insertion without owner resolution.
Production migration in dependency order
We run production migration in record-dependency order: ClientCorporations (from Lever client references), ClientContacts, Users (manual provisioning confirmed), JobOrders (from Lever Jobs), Candidates (from Lever Contacts with owner resolved), JobSubmissions (split from Lever Opportunities, with JobOrderId and CandidateId resolved), Offer data (as structured fields or notes on JobSubmission), Interview event history (as supplementary notes), Scorecards (as structured notes), Attachments (downloaded from Lever URLs and uploaded to Bullhorn Candidates via REST API), Custom fields and tags, and Nurture campaign / talent pool metadata (as Tags and custom TalentPool field). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Lever 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 scorecard inventory document, the nurture campaign and talent pool metadata list, and the automation rebuild guide covering any Lever workflows and sequences that require reconstruction in Bullhorn Automation or Bullhorn's workflow builder. We support a one-week hypercare window for reconciliation issues. Workflow and sequence rebuild is outside standard migration scope.
Platform deep dives
Lever
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 Lever 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
Lever: Not publicly documented; undocumented limits apply.
Data volume sensitivity
Lever 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 Lever to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Lever 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 Lever
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.