HRMS migration
Field-level mapping, validation, and rollback between BrightMove and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
BrightMove
Source
Bullhorn ATS & CRM
Destination
Compatibility
7 of 12
objects map 1:1 between BrightMove and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from BrightMove to Bullhorn is a platform upgrade migration for staffing agencies seeking a larger ecosystem, deeper reporting, and broader integrations. BrightMove structures its ATS around Candidates, Jobs, Placements, and Contacts with a modular pricing model starting at $125/month for core recruiting; Bullhorn bundles ATS and CRM capabilities with an open API and over 9,000 integration points. We extract candidate records with their full status history, map BrightMove job pipeline stages to Bullhorn JobOrder status values, preserve placement compensation details, and attach recruiter-user ownership so hiring team assignments survive the cutover. Bullhorn enforces API usage limits that require chunked, rate-limited loading; the ATS Growth edition excludes API access entirely, which we verify during scoping to ensure the destination account supports the migration method. Workflows, automations, and job board distribution rules do not migrate as code; we deliver a written inventory of these for the customer's Bullhorn admin 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 BrightMove 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.
BrightMove
Candidate
Bullhorn ATS & CRM
Candidate
1:1BrightMove Candidate records map directly to Bullhorn Candidate. We extract name, email, phone, address, resume content, status history, source information, and custom fields. The BrightMove candidateID becomes a custom reference field; the Bullhorn Candidate entityId is used for subsequent lookups. Resume files are extracted as binary attachments and reattached to the Bullhorn Candidate record as ContentDocument records.
BrightMove
Job
Bullhorn ATS & CRM
JobOrder
1:1BrightMove Job Order records map to Bullhorn JobOrder. We extract title, description, requirements, department, location, pay rate, bill rate, and the full pipeline stage configuration. Custom stages from BrightMove are mapped to Bullhorn JobOrder status values, preserving stage order. If BrightMove uses custom status values not present in Bullhorn, we add them as user-defined status values during the mapping phase.
BrightMove
Placement
Bullhorn ATS & CRM
Placement
1:1BrightMove Placement records map to Bullhorn Placement with a direct 1:1 relationship. We extract start date, end date, pay rate, bill rate, overtime eligibility, and the client association. The placement links to the migrated Candidate (via candidateID-to-entityId lookup), the migrated JobOrder, and the ClientCorporation. Compensation fields migrate as custom decimal fields if the standard Placement object does not cover the full structure.
BrightMove
Contact
Bullhorn ATS & CRM
ClientCorporation and ClientContact
1:manyBrightMove Contact records split into Bullhorn ClientCorporation (the company entity) and ClientContact (the individual). BrightMove contacts that share a company association are grouped under a single ClientCorporation, and the individual contact details map to ClientContact records linked via the corporation. We extract name, email, phone, title, company, and any custom fields on the contact.
BrightMove
Activity/Notes
Bullhorn ATS & CRM
Note and Task
1:1BrightMove activity logs and notes against candidates and jobs migrate to Bullhorn Note records. Activity type varies by tenant configuration; we extract all available activity text, timestamp, and owner information. Notes attach to the Bullhorn Candidate or JobOrder via ContentDocumentLink. If BrightMove activities include call disposition or outcome data, we preserve these in custom fields on the Note or as separate Task records.
BrightMove
Document/Attachment
Bullhorn ATS & CRM
ContentDocument
1:1Resume files and attached documents from BrightMove are extracted as binary files, validated for integrity, and uploaded to Bullhorn as ContentDocument records linked to the corresponding Candidate via ContentDocumentLink. We preserve the original filename and file type metadata. Bulk document migration requires chunked processing to stay within Bullhorn's API rate limits.
BrightMove
Custom Field
Bullhorn ATS & CRM
Custom Field
lossyBrightMove custom fields on candidates, jobs, and placements are mapped to Bullhorn custom fields. We extract the custom field type (text, dropdown, date, checkbox, numeric) and create equivalent Bullhorn custom fields before migration. Dropdown fields require value mapping where the BrightMove option set does not match the Bullhorn picklist; we document any mismatches for the customer's admin to resolve before migration.
BrightMove
User/Recruiter
Bullhorn ATS & CRM
User
1:1BrightMove user accounts representing recruiters and hiring managers map to Bullhorn User records. We match by email address and preserve team assignments, user type (internal recruiter, external recruiter, hiring manager), and the userID reference for activity and placement assignment lookups. Any BrightMove user without a matching Bullhorn User goes to a reconciliation queue for the customer's Bullhorn admin to provision before record import continues.
BrightMove
Tags/Labels
Bullhorn ATS & CRM
Tags
lossyBrightMove tags on candidates and jobs are extracted and applied as Bullhorn Tags. Bullhorn supports tagging on Candidate, JobOrder, and Placement records. We preserve the tag name and note that tag naming conventions may differ between systems; we do a string-normalization pass before applying tags to avoid duplicates caused by case differences or trailing whitespace.
BrightMove
Pipeline Stage Configuration
Bullhorn ATS & CRM
JobOrder Status
lossyBrightMove's configurable job pipeline stages map to Bullhorn JobOrder status values. We extract the full stage taxonomy during discovery, including stage order, stage-specific statuses, and any conditional stage transitions. Bullhorn status values are configured per corporation, so multi-division BrightMove accounts may require multiple status configurations in Bullhorn.
BrightMove
Submission History
Bullhorn ATS & CRM
CandidateJobOrder
1:1BrightMove tracks candidate submissions across multiple job orders as part of its candidate history. We extract submission records and create Bullhorn CandidateJobOrder entries that represent each time a candidate was submitted to a job. This preserves the submission date, submission status, and the submitting recruiter.
BrightMove
Candidate Status History
Bullhorn ATS & CRM
Candidate (status history)
lossyBrightMove maintains a status pipeline for candidates (e.g., Applied, Screening, Interview, Offer, Hired). We extract the full status history with timestamps and map each BrightMove status to the corresponding Bullhorn Candidate status. Status history is preserved as custom date and picklist fields on the Candidate record for reporting continuity.
| BrightMove | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Placement | Placement1:1 | Fully supported | |
| Contact | ClientCorporation and ClientContact1:many | Fully supported | |
| Activity/Notes | Note and Task1:1 | Fully supported | |
| Document/Attachment | ContentDocument1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| User/Recruiter | User1:1 | Fully supported | |
| Tags/Labels | Tagslossy | Mapping required | |
| Pipeline Stage Configuration | JobOrder Statuslossy | Fully supported | |
| Submission History | CandidateJobOrder1:1 | Fully supported | |
| Candidate Status History | Candidate (status history)lossy | 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.
BrightMove gotchas
Pricing structure requires careful scoping for total cost
Custom workflow stages require field-level mapping
API documentation lacks migration-critical detail
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 Bullhorn account verification
We audit the BrightMove tenant across active modules, candidate volume, job order count, placement history, document attachment count, custom field definitions, pipeline stage configuration, and user/recruiter roster. In parallel, we verify the Bullhorn destination account edition to confirm API access is available. If the account is ATS Growth, we pause and discuss account upgrade options before proceeding. The discovery output is a written migration scope with record counts, object inventory, and Bullhorn edition confirmation.
Schema mapping and custom field creation
We design the Bullhorn destination schema based on the BrightMove object inventory. This includes creating any missing custom fields on Candidate, JobOrder, Placement, ClientCorporation, and ClientContact to match BrightMove custom field types. We map BrightMove job pipeline stages to Bullhorn JobOrder status values and configure status values per corporation. Bullhorn custom objects are created if the BrightMove migration scope includes custom object data. Schema is validated in the Bullhorn environment before any data moves.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox environment using production-like data volumes. The customer's Bullhorn admin reconciles record counts (Candidates in, JobOrders in, Placements in, ClientCorporations in, ClientContacts in), spot-checks 25-50 random records against the BrightMove source, and validates that documents attached correctly to candidate records. The admin signs off the schema and mapping before production migration begins. Corrections happen here, not in production.
User provisioning and owner reconciliation
We extract every distinct BrightMove user and recruiter referenced on Candidate, JobOrder, Placement, and activity records. We match by email against the Bullhorn destination User table. Users without a matching Bullhorn account go to a reconciliation queue for the customer's Bullhorn admin to provision. Migration cannot proceed past this step because owner references are required on most Bullhorn entities.
Production migration in dependency order
We run production migration in record-dependency order: ClientCorporations (from BrightMove companies), ClientContacts (linked to corporation), JobOrders (with status values resolved), Candidates (with document attachments via chunked API), Placements (with Candidate, JobOrder, and ClientCorporation lookups resolved), Activity history (Notes via API with parent record resolution). Each phase emits a row-count reconciliation report before the next phase begins. Document attachments are processed last due to file-size handling and API rate limit management.
Cutover, validation, and automation rebuild handoff
We freeze BrightMove 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 a written inventory of BrightMove workflow configurations, automation rules, and job board distribution settings for the customer's Bullhorn admin to rebuild using Bullhorn Automation or Bullhorn webhooks. We support a one-week hypercare window for reconciliation issues. Workflow rebuild, automation rebuild, and training are outside standard migration scope.
Platform deep dives
BrightMove
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 BrightMove 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
BrightMove: Not publicly documented in available sources.
Data volume sensitivity
BrightMove 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 BrightMove to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your BrightMove 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 BrightMove
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.