HRMS migration
Field-level mapping, validation, and rollback between JazzHR and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
JazzHR
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 12
objects map 1:1 between JazzHR and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from JazzHR to Bullhorn is a staffing-agency-grade ATS migration. JazzHR models the candidate-job association as a separate Prospects table (prospect_id is the join key), while Bullhorn uses JobSubmission records linked directly to the Candidate. We resolve that join relationship during migration so every candidate correctly shows their pipeline status against every open job. JazzHR's document export webhook delivers attachment URLs valid for only 2.5 hours; we stream them immediately rather than queuing them. Workflow stages do not migrate as automation logic—Bullhorn's Record Type and Sales Process model differs structurally from JazzHR's stage pipeline. We deliver a written workflow inventory with Bullhorn equivalent recommendations for your admin to rebuild post-migration.
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 JazzHR 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.
JazzHR
Job
Bullhorn ATS & CRM
JobOrder
1:1JazzHR Jobs map directly to Bullhorn JobOrder. We preserve title, location, description, salary range (mapped to payRate or salary fields), status (published/draft/closed mapped to Bullhorn status constants), and the job's department assignment. The Bullhorn JobOrder is created before any Candidate or JobSubmission records to satisfy the JobOrderID lookup dependency. Job board codes identifying where postings were syndicated (Indeed, LinkedIn, ZipRecruiter) are stored as a Bullhorn custom text field for admin reference.
JazzHR
Candidate
Bullhorn ATS & CRM
Candidate
1:1JazzHR Candidate profiles (name, email, phone, address, work history, education with codified educationLevelCodes) map directly to Bullhorn Candidate. Education records from JazzHR map to Bullhorn Candidate.education and Candidate.certifications. The startDate custom field on JazzHR maps to a Bullhorn custom date field. Bullhorn Candidate is the parent entity for all JobSubmission records, so it must be imported before Prospects resolution.
JazzHR
Prospect
Bullhorn ATS & CRM
JobSubmission
1:1JazzHR Prospects are the join table between Candidates and Jobs, carrying status, source, referral, and apply date. This is the most critical mapping in the migration because Bullhorn models the same association as JobSubmission with CandidateID and JobOrderID lookups. We resolve prospect status to Bullhorn JobSubmission status constants (New, Interview, Offer, etc.) and preserve the original applyDate. If a JazzHR candidate has applied to multiple jobs, each application produces a separate Bullhorn JobSubmission record.
JazzHR
Department
Bullhorn ATS & CRM
Department
1:1JazzHR Departments migrate to Bullhorn Department. The department taxonomy is a dependency for JobOrder assignment, so we migrate departments first and validate department counts in Bullhorn before creating JobOrder records. Any JobOrder in JazzHR assigned to a department without a Bullhorn equivalent is held in a reconciliation queue.
JazzHR
Hiring Lead
Bullhorn ATS & CRM
User
1:1Every JazzHR job carries a hiring_lead_id referencing a user. We extract all hiring leads, match them by email to Bullhorn User records, and remap the reference. Bullhorn User must be provisioned before JobOrder creation so that the owning user is assigned at migration time. Any hiring lead without a Bullhorn User match goes to a reconciliation queue for the customer to provision the account.
JazzHR
Document / Attachment
Bullhorn ATS & CRM
Attachment (on Candidate)
1:1JazzHR document attachments are delivered as base64-encoded blobs with MIME type via the Candidate Export Webhook. We stream these immediately upon receipt—Bullhorn does not receive document URLs that expire before we can act on them. The 2.5-hour window from JazzHR means we begin document extraction concurrently with candidate record extraction rather than in a separate phase. Documents attach to the Bullhorn Candidate record as Attachments with the original filename and MIME type preserved.
JazzHR
Custom Field
Bullhorn ATS & CRM
Custom Field
lossyJazzHR custom fields on candidate profiles map to Bullhorn custom fields on the Candidate entity. We evaluate field type compatibility during scoping: Bullhorn picklist fields require value mapping from JazzHR free-text or enumerated values, date fields preserve YYYY-MM-DD formatting, and number fields migrate directly. The JazzHR startDate custom field uses a camelCase key and specific date format that we validate before creating the Bullhorn equivalent.
JazzHR
Workflow / Pipeline Stage
Bullhorn ATS & CRM
Record Type + Sales Process
lossyJazzHR workflow stages map to Bullhorn Record Types and Sales Process stage values. We create a Bullhorn Record Type per JazzHR workflow, with the Sales Process defining the stage whitelist for that job category. JazzHR's custom workflow IDs (workflow_id) are preserved as a reference field in Bullhorn. Stage probability percentages from JazzHR do not map to Bullhorn directly—Bullhorn stage weights are managed differently—but we document them for the admin to configure post-migration.
JazzHR
Source and Referral
Bullhorn ATS & CRM
Custom Field (Candidate)
1:1JazzHR stores source and referral as free-text or codified strings on the Prospect record. Bullhorn does not have a native equivalent for candidate sourcing attribution. We preserve both fields as Bullhorn custom text fields on Candidate (candidateSource and candidateReferral) so that source attribution data is available for reporting without re-keying.
JazzHR
Job Board Code
Bullhorn ATS & CRM
Custom Field (JobOrder)
1:1Each JazzHR job carries board codes identifying syndication targets (Indeed, LinkedIn, ZipRecruiter, Glassdoor, etc.). Bullhorn does not natively recreate job board connections during migration. We store the active board code list as a Bullhorn custom multi-select picklist on JobOrder so the admin knows which boards were previously connected and can re-establish them post-migration.
JazzHR
Client (implicit in hiring leads and job context)
Bullhorn ATS & CRM
ClientCorporation
many:1JazzHR does not have a native client relationship management object; client context lives implicitly in the job's hiring lead and job description. Bullhorn's ClientCorporation allows agencies to track client relationships separately from job postings. We flag this as a candidate for post-migration data cleanup: if the customer had informal client data in JazzHR job descriptions, we surface it as a migration inventory item for manual entry into Bullhorn ClientCorporation. This is not an automated mapping but a documented gap requiring admin action.
JazzHR
Placement / Historical Hiring Outcome
Bullhorn ATS & CRM
Placement
1:1JazzHR does not have a dedicated Placement object. Historical hiring outcomes for filled roles are implicit in closed Job records and the candidate's final Prospect status. Bullhorn Placement objects track placed candidates, start dates, pay rates, and commission data. For JazzHR migrations with a history of closed jobs and successful hires, we flag the corresponding candidates for Bullhorn Placement record creation as a post-migration manual step rather than inferring placements from implicit data.
| JazzHR | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Job | JobOrder1:1 | Fully supported | |
| Candidate | Candidate1:1 | Fully supported | |
| Prospect | JobSubmission1:1 | Fully supported | |
| Department | Department1:1 | Fully supported | |
| Hiring Lead | User1:1 | Fully supported | |
| Document / Attachment | Attachment (on Candidate)1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| Workflow / Pipeline Stage | Record Type + Sales Processlossy | Fully supported | |
| Source and Referral | Custom Field (Candidate)1:1 | Fully supported | |
| Job Board Code | Custom Field (JobOrder)1:1 | Fully supported | |
| Client (implicit in hiring leads and job context) | ClientCorporationmany:1 | Fully supported | |
| Placement / Historical Hiring Outcome | Placement1: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.
JazzHR gotchas
Job cap cliff between Hero and Plus plans
API 100-result pagination cap
Apply API bearer tokens expire in 48 hours
Document URLs expire 2.5 hours after export event
TLS 1.2 enforced as of January 2024
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 data audit
We audit the source JazzHR account across plan tier (Hero/Plus/Pro), active job count, candidate volume, Prospects count, custom field inventory, department taxonomy, and document attachment volume. We assess Bullhorn edition requirements (ATS Growth vs ATS vs Front Office Growth/Enterprise) based on the customer's custom object needs and user count. The discovery output is a written migration scope with record counts per object, Bullhorn edition recommendation, and a Bullhorn configuration checklist for the customer's admin to complete before migration begins.
Bullhorn schema configuration
We configure the destination Bullhorn environment before any data arrives. This includes creating custom fields on Candidate, JobOrder, and ClientCorporation to receive JazzHR data, defining Record Types and Sales Processes to receive JazzHR workflow stage names, setting up department taxonomy, and provisioning Bullhorn Users for every JazzHR hiring lead identified during discovery. Bullhorn configuration is deployed in a Sandbox org first for validation, then promoted to production.
Document streaming pipeline
We begin the JazzHR document extraction concurrently with candidate record extraction, not after. Because JazzHR document URLs expire 2.5 hours after the export webhook fires, we stream each document as it arrives, decode the base64 payload, and upload to Bullhorn Candidate attachments immediately. We do not batch documents as a separate phase after candidate migration because doing so risks expired URLs and broken attachments.
Sandbox migration and reconciliation
We run a full migration into Bullhorn Sandbox (Full Copy) using production-like data volumes. The customer's recruiting operations lead reconciles record counts: JobOrders in, Candidates in, JobSubmissions in, attachment count and size totals, and custom field value distribution. Spot-checks on 25-50 random candidate records compare field values against JazzHR source data. The customer signs off the sandbox migration before production migration begins.
Production migration in dependency order
We migrate Bullhorn in record-dependency order: Departments and Users first (dependency-free), then JobOrders (with owning UserId resolved), then Candidates (created before JobSubmissions), then JobSubmissions (with CandidateID and JobOrderID resolved via join lookup), then custom field values (patched to existing Candidate and JobOrder records), then documents (already extracted during Step 3), then ClientCorporation and Placement gap inventory for manual entry. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow handoff
We freeze writes to JazzHR during cutover, run a final delta migration of any records created or modified during the migration window, then enable Bullhorn as the system of record. We deliver the workflow inventory document mapping each JazzHR workflow stage and automation trigger to its Bullhorn Record Type and Sales Process equivalent, with a rebuild recommendation for Bullhorn's workflow tools. We support a one-week hypercare window for reconciliation issues. Post-migration admin training, Bullhorn workflow rebuild, and placement record creation are outside standard scope and can be scoped as a separate engagement.
Platform deep dives
JazzHR
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 JazzHR 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
JazzHR: Not publicly documented in API docs..
Data volume sensitivity
JazzHR 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 JazzHR to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your JazzHR 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 JazzHR
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.