HRMS migration
Field-level mapping, validation, and rollback between JobScore and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
JobScore
Source
Bullhorn ATS & CRM
Destination
Compatibility
9 of 12
objects map 1:1 between JobScore and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from JobScore to Bullhorn is a shift from a candidate-centric in-house recruiting ATS to a staffing-agency ATS with unified CRM capabilities. JobScore organizes hiring around a Candidate-to-Job application pipeline with unlimited users and tags; Bullhorn adds a Client Corporation and Placement data model oriented around staffing placements and back-office billing. We flag the placement-centric model difference during scoping so teams understand whether their hiring data maps naturally to Bullhorn or requires a custom configuration. We handle the unpublished-job gap by extracting published roles from the JobScore job feed API as the primary export and capturing draft roles manually. Scorecards migrate as Notes attached to the parent Interview record. Workflows, custom application forms, email templates, and tags do not migrate as code; we deliver a written schema inventory and configuration guide for Bullhorn admins to rebuild them post-migration. Owner assignments resolve by email match against Bullhorn Users before record import begins.
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 JobScore 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.
JobScore
Candidate
Bullhorn ATS & CRM
Candidate
1:1JobScore Candidate records map directly to Bullhorn Candidate. We extract name, email, phone, address, tags, notes, and resume blob. JobScore's phone-number deduplication logic during bulk import is flagged pre-migration; we detect phone collisions in the export and present the customer with skip, merge, or overwrite options before loading. Bullhorn Candidate requires an owning User assignment resolved by email match against the destination User table.
JobScore
Job
Bullhorn ATS & CRM
JobOrder
1:1JobScore published Jobs map to Bullhorn JobOrder. Only published jobs appear in JobScore's v2 API and job feed; unpublished/draft jobs are invisible to the API and require manual extraction. We warn customers to publish all roles before migration and cross-reference the API export against the admin job list to surface any missing jobs. Title, description, location (mapped to Bullhorn address fields), employment type, and salary range transfer as typed fields. Job status (Open, Paused, Closed) maps to Bullhorn JobOrder status values.
JobScore
Application
Bullhorn ATS & CRM
Candidate (JobOrder reference)
1:1JobScore Application records (the Candidate-to-Job join) map to Bullhorn Candidate records with a JobOrder reference. Bullhorn natively links Candidates to JobOrders through the CandidateJobOrder join entity. Application date, stage, stage history timestamps, and custom form field responses transfer. Disposition codes (Declined, Withdrawn reasons) migrate to Bullhorn CandidateJobOrder status values.
JobScore
Interview
Bullhorn ATS & CRM
Appointment or Note
1:1JobScore Interview records (scheduled events tied to Application) map to Bullhorn Appointment records with interviewer assignment, date, type, and outcome preserved. Bullhorn Appointment links to the Candidate and JobOrder. For interviews without a calendar-level record, we attach as a Note with interview metadata. We resolve the Application uid to the corresponding Bullhorn CandidateJobOrder at migration time.
JobScore
Scorecard
Bullhorn ATS & CRM
Note (attached to Appointment or Candidate)
1:1JobScore Scorecards (post-interview ratings and comments submitted by interviewers) migrate as Bullhorn Note records attached to the corresponding Appointment or Candidate. Ratings, comments, interviewer uid, and submission timestamp transfer. If the customer uses Bullhorn's built-in scorecard templates post-migration, we document the scorecard schema separately for admin configuration.
JobScore
Location
Bullhorn ATS & CRM
JobOrder address fields
1:1JobScore Location records (address, city, state, country) map to Bullhorn JobOrder address fields. We map each location component to the corresponding Bullhorn field and validate address completeness during the load.
JobScore
Document (Resume, Cover Letter)
Bullhorn ATS & CRM
Candidate resume blob
1:1JobScore Documents linked to Candidates (resumes, cover letters, attachments) export as binary blobs and reattach to the Bullhorn Candidate record. Bullhorn parses resumes natively. Resume parsing is included in Bullhorn Starter and above; we attach the raw blob so the parser populates structured fields in Bullhorn.
JobScore
User (Employee)
Bullhorn ATS & CRM
User
1:1JobScore Users/Employees who appear as interviewers, owners, or recruiters on any record resolve by email match against Bullhorn Users. Users without a Bullhorn match enter a reconciliation queue for admin provisioning before record migration begins. JobScore's unlimited-user model means owner assignment density can be high; we batch-resolve all distinct owner emails before the main migration run.
JobScore
Custom Application Form
Bullhorn ATS & CRM
Custom fields (CandidateJobOrder)
lossyJobScore custom form fields per job store responses at the Application level. We extract the full custom field schema from the source account, map each field to a Bullhorn CandidateJobOrder custom field (with __c suffix), and pre-create the field definitions in the Bullhorn org before import. Custom field types (text, picklist, number, date) map to equivalent Bullhorn field types.
JobScore
Workflow Stages (Active sub-stages)
Bullhorn ATS & CRM
CandidateJobOrder status values
lossyJobScore's five locked top-level stages (New, Active, Declined, Withdrawn, Hired) map to Bullhorn CandidateJobOrder status values. Custom Active sub-stages collapse into the Active status with the original sub-stage name stored as a custom field on CandidateJobOrder for audit and reporting continuity.
JobScore
Tag
Bullhorn ATS & CRM
Candidate categories or custom text field
lossyJobScore tags on Candidates migrate to Bullhorn Candidate categories if the customer enables the Bullhorn categories feature, or to a custom text field (multi-select or comma-separated) on the Candidate record. The customer selects the strategy during scoping.
JobScore
Application Status (Disposition Code)
Bullhorn ATS & CRM
CandidateJobOrder status values
1:1JobScore configurable disposition codes (Declined reasons, Withdrawn reasons) migrate to Bullhorn CandidateJobOrder status values. We export all configured codes from JobScore and create equivalent values in Bullhorn before migration so reporting continuity is maintained.
| JobScore | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Application | Candidate (JobOrder reference)1:1 | Fully supported | |
| Interview | Appointment or Note1:1 | Fully supported | |
| Scorecard | Note (attached to Appointment or Candidate)1:1 | Fully supported | |
| Location | JobOrder address fields1:1 | Fully supported | |
| Document (Resume, Cover Letter) | Candidate resume blob1:1 | Fully supported | |
| User (Employee) | User1:1 | Fully supported | |
| Custom Application Form | Custom fields (CandidateJobOrder)lossy | Fully supported | |
| Workflow Stages (Active sub-stages) | CandidateJobOrder status valueslossy | Fully supported | |
| Tag | Candidate categories or custom text fieldlossy | Fully supported | |
| Application Status (Disposition Code) | CandidateJobOrder status values1: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.
JobScore gotchas
Phone-number deduplication silently overwrites candidate records on import
Only published jobs surface in the API and job feeds
Job-count pricing model creates billing risk during high-volume hiring periods
v2 API rate limits are not publicly documented
Custom workflow stages live only in the Active branch — standard stages are locked
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 job visibility audit
We audit the JobScore account across tiers (Lite through Enterprise), candidate count, job count, application volume, interview and scorecard history, custom form schemas, disposition codes, owner assignments, and email template inventory. We flag all unpublished and draft jobs that will not appear in the API export and request the customer publish them before migration. We also pull the JobScore job feed as a secondary export to validate completeness against the REST API response. The discovery output is a written migration scope with record counts per object and a list of draft jobs requiring manual handling.
Data quality assessment and phone-collision audit
We run a data quality assessment on the exported candidate set, flagging records with missing required fields (email, name), malformed phone numbers, and phone-number collisions that could trigger JobScore's silent overwrite behavior during any future import. We present the collision report to the customer and collect their resolution choices before migration begins. We also validate address completeness on Location records and interview date formats against the destination Bullhorn field requirements.
Schema design and Bullhorn configuration planning
We design the Bullhorn destination schema. This includes provisioning custom fields on CandidateJobOrder for JobScore custom application form fields, creating status values that match JobScore disposition codes, configuring the Candidate pipeline (direct hire vs placement orientation), and mapping JobScore owner emails to Bullhorn User records. We deploy initial schema to a Bullhorn sandbox for validation. Saved search migration guidance is documented for Bullhorn Support involvement post-migration.
Owner reconciliation and User provisioning
We extract every distinct JobScore owner and interviewer referenced across Candidates, Jobs, Applications, Interviews, and Scorecards and match by email against the Bullhorn destination org's User table. Users without a matching Bullhorn User enter a reconciliation queue. The customer's Bullhorn admin provisions missing Users before record migration begins. Migration cannot proceed past this step because Candidate records require an owning User assignment.
Production migration in dependency order
We run production migration in record-dependency order: Client Corporations (if applicable to staffing use case), JobOrders (from published Jobs, with draft jobs documented for manual entry), Candidates (with owning User resolved, tags mapped to categories or custom field), CandidateJobOrder records (Applications with stage history and custom form responses), Appointments (Interviews with interviewer assignment and outcome), Notes (Scorecards and Documents attached to parent records), and Tags/Categories. Each phase emits a row-count reconciliation report before the next phase begins. We use Bullhorn REST API with rate-limit handling and exponential backoff.
Cutover, validation, and configuration handoff
We freeze JobScore 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 email template manifest, tag-to-category mapping guide, careers site inventory, and custom form schema for the Bullhorn admin to rebuild post-migration. Saved search migration is escalated to Bullhorn Support with examples. We support a one-week hypercare window for reconciliation issues. We do not rebuild workflows, automations, or email sequences in Bullhorn as part of this scope.
Platform deep dives
JobScore
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between JobScore and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across JobScore and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between JobScore 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
JobScore: Not publicly documented in v2 docs; v1 showed 3600 req/hr.
Data volume sensitivity
JobScore 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 JobScore to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your JobScore 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 JobScore
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.