HRMS migration
Field-level mapping, validation, and rollback between Jobtrain and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Jobtrain
Source
Bullhorn ATS & CRM
Destination
Compatibility
11 of 13
objects map 1:1 between Jobtrain and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Jobtrain to Bullhorn is a cross-platform migration between two different ATS models: Jobtrain is a UK public-sector, fixed-fee platform optimised for multi-site approval workflows, while Bullhorn is a per-seat, staffing-agency-focused ATS and CRM with a documented REST API. The primary migration constraint is on the source side: Jobtrain does not publish a bulk-export API, so we request a full data export early in scoping, validate its completeness, and flag any gaps before building the migration field map. We sequence Vacancies before Candidates before Applications to preserve the Jobtrain application relationship, document approval routes and cost-centre hierarchies as written outputs for your Bullhorn admin to configure post-migration, and map custom Jobtrain fields to Bullhorn's custom object or custom field structure. Bullhorn supports custom objects on ATS Growth (2 objects), ATS (2 objects), and Front Office Growth and Enterprise (10 objects each), with up to 55 fields per object, but custom objects require Bullhorn Support to provision. We do not migrate onboarding templates, offer-letter documents, or approval workflow logic as code; we deliver a written inventory of these for your team to rebuild.
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 Jobtrain 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.
Jobtrain
Vacancy
Bullhorn ATS & CRM
JobOrder
1:1Jobtrain Vacancy records map to Bullhorn JobOrder. We map vacancy reference number to externalID for deduplication, job title, grade/level, department, cost centre, advert sources, and description. Jobtrain's custom vacancy fields map to Bullhorn custom fields on JobOrder (requires Bullhorn Support to provision if migrating custom vacancy fields on ATS Growth or ATS tier, which only support 2 custom objects total; Front Office Growth and Enterprise support up to 10 custom objects with 55 fields each). Approval route status is captured as a text property for the admin to rebuild in Bullhorn.
Jobtrain
Candidate
Bullhorn ATS & CRM
Candidate
1:1Jobtrain Candidate profiles map directly to Bullhorn Candidate. We map contact details (name, email, phone, address), source attribution, application history as linked records, and any custom candidate fields. Candidate is staged after Vacancy so that the JobOrder exists for application linkage. Attachment files (CVs, cover letters) export from Jobtrain and attach to Bullhorn Candidate via ContentDocumentLink.
Jobtrain
Application
Bullhorn ATS & CRM
JobSubmission
1:1Jobtrain Application records link a Candidate to a Vacancy at a specific stage. We sequence Application migration after both Candidates and Vacancies are staged in Bullhorn. The mapping preserves application date, current stage, and stage history as text properties. Bullhorn JobSubmission (also called CandidateJobOrderShift in some API versions) is resolved via CandidateID and JobOrderID lookups.
Jobtrain
Vacancy Template
Bullhorn ATS & CRM
JobOrder (template reference)
lossyJobtrain vacancy templates are reusable structures defining interview stages, questions, and approval routes. Bullhorn does not have a native vacancy template object, so we map template content to a Bullhorn JobOrder as a configuration reference document and attach it as a content note. The customer's Bullhorn admin rebuilds the template structure using Bullhorn's job order fields and any Bullhorn Automation workflow if licensed.
Jobtrain
Job Grade and Level
Bullhorn ATS & CRM
Text field or Custom Object
1:1Jobtrain allows clients to define custom job grade and level hierarchies (e.g., Band 5, Grade 7, PO1). We map these as text fields on JobOrder if the destination Bullhorn tier supports custom fields, or as values in a dedicated Grade custom object if the customer requires structured grade lookups. Bullhorn ATS Growth and ATS tier allow custom fields on standard objects; Enterprise tier allows custom objects with 55 fields.
Jobtrain
Approval Route
Bullhorn ATS & CRM
Workflow documentation (no migration)
lossyJobtrain approval routes define unlimited configurable approval chains per vacancy or division. Bullhorn's approval workflow model is different and does not accept a direct migration of route topology. We document the approval chain structure during scoping, capturing the route name, approver sequence, routing conditions, and escalation rules as a written handoff document for the customer's Bullhorn admin to configure using Bullhorn's workflow engine or Bullhorn Support. Approval routes are flagged as out of scope for automated migration.
Jobtrain
Cost Centre
Bullhorn ATS & CRM
Text field or Division lookup
1:1Jobtrain cost centres are defined in settings and used to categorise vacancies. We map cost centre codes and names to a text field on JobOrder (costcentre__c) or to Bullhorn's Division object if the customer has configured it. Bullhorn does not have a native cost centre field on JobOrder, so the mapping attaches cost centre as a tagged property that the customer's admin can configure as a filter or reporting dimension.
Jobtrain
Department
Bullhorn ATS & CRM
Department
1:1Jobtrain Departments are organisational units used to categorise vacancies and approver routing. Bullhorn has a native Department object. We map department names and IDs and attach them to JobOrder records. Department hierarchies in Jobtrain (if multi-level) are flattened to a single department name on Bullhorn with a parent-department reference stored as a custom field if required.
Jobtrain
Communication Template
Bullhorn ATS & CRM
Email Template (Bullhorn)
1:1Jobtrain stores email and letter templates used during recruitment stages. We export template content as structured text and attach it to the relevant Bullhorn JobOrder or Candidate record as a content note. Bullhorn has an Email Template object that stores templates for candidate communication; we map the template name, body content, and associated vacancy type as a reconstruction guide. Full template import into Bullhorn's Email Template object requires admin re-entry or Bullhorn Support configuration.
Jobtrain
Advert Source
Bullhorn ATS & CRM
Text field or Source custom field
1:1Jobtrain advert sources include origin channels (Indeed, LinkedIn, agency website) and associated costs for reporting. We map source names and attributions to a text field on Candidate (source__c) or JobOrder (advertSource__c). Bullhorn does not have a native advert source field on Candidate; the value attaches as a tagged property for the customer's admin to configure as a reporting dimension.
Jobtrain
Onboarding Template and New Starter Document
Bullhorn ATS & CRM
No migration
1:1Jobtrain onboarding templates, employment contracts, and offer letters are document-centric objects stored with limited structured metadata. Bullhorn does not have a dedicated onboarding document module on standard ATS tiers. We export the document files and metadata we can retrieve from Jobtrain as a file archive and flag which records require manual re-creation or re-upload at Bullhorn. Onboarding templates are out of scope for automated migration.
Jobtrain
Attachment (on Vacancy, Candidate, Application)
Bullhorn ATS & CRM
ContentDocumentLink
1:1Attachments on Jobtrain vacancies, candidates, and applications (CVs, cover letters, interview notes) are downloadable via the Jobtrain interface. We export them as files and associate them with the correct Bullhorn record via ContentDocumentLink. Bullhorn's ContentDocument model requires the ContentVersion and ContentDocument records to be created first, then linked to the parent Candidate or JobOrder record. Large attachment volumes (over 10,000 files) require chunked processing to stay within Bullhorn API rate limits.
Jobtrain
Custom Field (vacancy, candidate, application)
Bullhorn ATS & CRM
Custom Field or Custom Object
1:1Jobtrain allows super-users to create custom fields across vacancy, candidate, and application objects. Every customer's Jobtrain instance has a unique custom field set. We discover the full custom field schema during scoping and map each to a Bullhorn custom field on the corresponding standard object (JobOrder, Candidate, JobSubmission). Bullhorn ATS Growth and ATS tiers allow 2 custom objects with 55 fields each; Front Office Growth and Enterprise allow 10 custom objects with 55 fields each. Custom objects require a Bullhorn Support ticket to provision, which we raise on the customer's behalf during schema design.
| Jobtrain | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Vacancy | JobOrder1:1 | Fully supported | |
| Candidate | Candidate1:1 | Fully supported | |
| Application | JobSubmission1:1 | Fully supported | |
| Vacancy Template | JobOrder (template reference)lossy | Fully supported | |
| Job Grade and Level | Text field or Custom Object1:1 | Fully supported | |
| Approval Route | Workflow documentation (no migration)lossy | Fully supported | |
| Cost Centre | Text field or Division lookup1:1 | Fully supported | |
| Department | Department1:1 | Fully supported | |
| Communication Template | Email Template (Bullhorn)1:1 | Fully supported | |
| Advert Source | Text field or Source custom field1:1 | Fully supported | |
| Onboarding Template and New Starter Document | No migration1:1 | Fully supported | |
| Attachment (on Vacancy, Candidate, Application) | ContentDocumentLink1:1 | Fully supported | |
| Custom Field (vacancy, candidate, application) | Custom Field or Custom Object1: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.
Jobtrain gotchas
No publicly documented bulk export API
Custom field schema varies per installation
12–16 week implementation timeline
Onboarding and offer-letter documents are not structured for bulk export
Approval routes and approver chains are installation-specific
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
Scoping and export validation
We audit the customer's Jobtrain instance to establish record counts for Vacancies, Candidates, Applications, Vacancy Templates, Job Grades, Departments, Cost Centres, Communication Templates, Advert Sources, and any custom field sets. We request a full data export from Jobtrain via the built-in reporting interface and validate its completeness against the customer's internal record counts. Where exports are incomplete, we flag gaps and request supplementary exports from Jobtrain's professional services team. This step cannot proceed in parallel with other work because the export determines the migration field map.
Schema discovery and Bullhorn edition assessment
We map the Jobtrain schema to the Bullhorn schema, including standard field names, custom field discovery, department hierarchy, and cost centre structure. We assess the customer's target Bullhorn edition (Starter $99/user/mo, Core $165/user/mo, Pro custom) to determine the custom object and custom field limits that apply. Bullhorn Support tickets for custom object provisioning are raised at this stage. We also document approval route topology, communication templates, and vacancy templates as written outputs for post-migration rebuild. The output is a migration field map reviewed and signed off by the customer's Jobtrain administrator.
Staging migration in dependency order
We run a staging migration into a Bullhorn sandbox or the production environment with a subset of records (typically 500-1,000 per object) to validate the field map, test ContentDocument attachment linking, and confirm the application linkage between Candidate and JobOrder. The customer's administrator spot-checks 25-50 records against the Jobtrain source and confirms the mapping before full production migration begins. Corrections to the field map happen in staging, not in production.
Vacancy staging and JobOrder provisioning
We stage Vacancies first because JobOrder records are the parent entity for Applications. Jobtrain Vacancy Templates are mapped to JobOrder records as configuration references with template content stored as content notes. Job Grades, Departments, and Cost Centres are provisioned as text fields or custom fields on JobOrder before vacancy import begins. Approval route status is captured as a text field for the customer's Bullhorn admin to rebuild post-migration.
Candidate and Application import with attachment handling
We stage Candidates with their contact details, source attribution, and custom fields resolved from the Jobtrain export. CV and cover letter attachments are staged as ContentDocument records and linked via ContentDocumentLink to the parent Candidate record after the Candidate is inserted. Applications (JobSubmission in Bullhorn) are staged last, after both Candidate and JobOrder exist, using CandidateID and JobOrderID lookups. Application date, stage, and stage history are preserved. Large attachment volumes are chunked to comply with Bullhorn API rate limits.
Cutover, delta migration, and documentation handoff
We freeze Jobtrain 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 approval route documentation, communication template inventory, vacancy template reconstruction guide, and onboarding document archive to the customer's Bullhorn administrator. We support a one-week hypercare window where we resolve any record linkage issues or field mapping discrepancies. Bullhorn workflow rebuilds, automation configuration, and onboarding module setup are outside migration scope and are handled by the customer's Bullhorn admin or a Bullhorn implementation partner.
Platform deep dives
Jobtrain
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 Jobtrain 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
Jobtrain: Not publicly documented in summary form..
Data volume sensitivity
Jobtrain exposes a bulk API — large-volume migrations stream efficiently.
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 Jobtrain to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Jobtrain 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 Jobtrain
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.