HRMS migration
Field-level mapping, validation, and rollback between In-recruiting and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
In-recruiting
Source
Bullhorn ATS & CRM
Destination
Compatibility
10 of 13
objects map 1:1 between In-recruiting and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from In-recruiting to Bullhorn is a cross-platform ATS migration for European recruitment agencies stepping into Bullhorn's enterprise staffing ecosystem. In-recruiting stores the candidate lifecycle in a flat relational structure (Candidates linked to Jobs via Applications with pipeline stage history), while Bullhorn models the same data across separate Candidate, JobOrder, JobSubmission, and Placement entities with a different stage taxonomy. We extract from In-recruiting via CSV export and REST API, resolve the stage taxonomy gap (In-recruiting's custom stage labels map to Bullhorn's opportunityStage values or Placement status), and import into Bullhorn through the REST API with Bullhorn's documented field character limits enforced (some fields cap at 100 characters). We do not migrate workflows, automation rules, or email sequences as code; we deliver a written inventory of every In-recruiting automation for the customer's Bullhorn 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 In-recruiting 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.
In-recruiting
Candidate
Bullhorn ATS & CRM
Candidate
1:1In-recruiting Candidate records map to Bullhorn Candidate. The In-recruiting candidateID becomes Bullhorn's candidateID; firstName, lastName, email, phone, and address fields map directly. We flag any In-recruiting custom fields on Candidate (for example, availability windows, source channel, or salary expectations) that need to map to Bullhorn Candidate custom fields. Bullhorn's Candidate entity supports custom fields and Custom Object associations per record.
In-recruiting
Job
Bullhorn ATS & CRM
JobOrder
1:1In-recruiting Job records map to Bullhorn JobOrder. The job title, description, address, employmentType, and payRate fields map directly. In-recruiting's jobStatus (Active/Paused/Closed) maps to Bullhorn's JobOrder status. JobOwner (the assigned recruiter) maps to Bullhorn's JobOrder ownerId via User lookup by email.
In-recruiting
Application
Bullhorn ATS & CRM
JobSubmission
1:1In-recruiting Application records (the join entity between Candidate and Job) map to Bullhorn JobSubmission. The applicationDate and currentStage map to JobSubmission dateSubmitted and the assigned opportunityStage. We preserve the full application history (stage transitions with timestamps) as Bullhorn JobSubmission status-change records or as Note attachments on the JobSubmission if the stage history is not representable through standard status values.
In-recruiting
Pipeline Stage
Bullhorn ATS & CRM
opportunityStage
lossyIn-recruiting's custom pipeline stages (for example, 'Phone Screen', 'Technical Interview', 'Offer', 'Rejected') map to Bullhorn opportunityStage values on the corresponding JobSubmission. Bullhorn predefines standard stage values; custom stage names require Bullhorn Support or an admin with stage-configuration access to add values to the opportunityStage picklist before migration. We validate the picklist during scoping and configure any missing values as part of the destination schema setup.
In-recruiting
Interview
Bullhorn ATS & CRM
Appointment
1:1In-recruiting Interview records map to Bullhorn Appointment. The interviewDate, interviewer (linked User), interviewType, and outcome map to Bullhorn Appointment's startDateTime, endDateTime, userID (interviewer), type, and outcome fields. Candidate and JobOrder associations map to Bullhorn's candidateID and jobOrderID on the Appointment. Interview scorecards or feedback notes migrate as Note attachments to the Appointment.
In-recruiting
Client
Bullhorn ATS & CRM
ClientCorporation
1:1In-recruiting Client records map to Bullhorn ClientCorporation. The company name, address, industry, website, and billingContact fields map directly. In-recruiting client records that include both organizational and contact-level data require a split: the company-level fields go to ClientCorporation and any primary contact fields go to a corresponding ClientContact record linked to the ClientCorporation.
In-recruiting
Client Contact
Bullhorn ATS & CRM
ClientContact
1:1In-recruiting contact records associated with a Client map to Bullhorn ClientContact. The contact name, email, phone, title, and department map directly. ClientContact is linked to ClientCorporation via the clientCorporationID foreign key, which we resolve at migration time after ClientCorporation records are created.
In-recruiting
Placement
Bullhorn ATS & CRM
Placement
1:1In-recruiting Placement records (candidates successfully placed in jobs) map to Bullhorn Placement. The candidateID, jobOrderID, startDate, endDate, payRate, billRate, and placementStatus map to Bullhorn Placement fields. In-recruiting's placement history preserves as Bullhorn Placement records with their original start dates, enabling reporting on historical placement data in Bullhorn.
In-recruiting
User/Recruiter
Bullhorn ATS & CRM
User
1:1In-recruiting User records (recruiters, admins, hiring managers) map to Bullhorn User. We resolve by email match across both systems. Any In-recruiting User without a matching Bullhorn User goes to a reconciliation queue for the customer's Bullhorn admin to provision before record import resumes. OwnerId references on JobOrder, JobSubmission, and Placement require a valid Bullhorn User at migration time.
In-recruiting
Note
Bullhorn ATS & CRM
Note
1:1In-recruiting Notes attached to Candidates, Jobs, Applications, or Clients map to Bullhorn Note. The note text, author, and creation date migrate. Bullhorn Note is linked via ContentDocumentLink to the parent entity (Candidate, JobOrder, JobSubmission, ClientCorporation, ClientContact, or Placement). Rich-text formatting in In-recruiting Notes converts to plain text or HTML depending on Bullhorn's Note body field support.
In-recruiting
Activity/Engagement
Bullhorn ATS & CRM
Task
1:1In-recruiting engagement records (calls, emails, tasks logged against Candidates or Applications) map to Bullhorn Task. The activity type, date, duration, outcome, and description map to Bullhorn Task fields. Call activities migrate as Task with taskSubtype=Call and duration preserved. Email activities migrate as Task with type=Email and the body preserved. We resolve the target entity (candidateID, jobSubmissionID) at migration time via lookup.
In-recruiting
Custom Field (Candidate/Job/Application)
Bullhorn ATS & CRM
Custom Object
lossyIn-recruiting custom fields that do not map to standard Bullhorn fields migrate to Bullhorn Custom Objects or custom fields on the standard entity. Bullhorn Front Office Growth and Enterprise editions support up to 10 Custom Objects with 55 fields each; ATS Growth supports 2; standard ATS Growth entry has none. We design the Custom Object schema during scoping, submit the Custom Object Setup Sheet to Bullhorn Support before migration, and map In-recruiting field values into the configured Custom Object fields during data load.
In-recruiting
Tag/Label
Bullhorn ATS & CRM
Multi-select Picklist or Topic
lossyIn-recruiting tags or labels applied to Candidates, Jobs, or Applications migrate to Bullhorn custom multi-select picklist fields on the relevant entity. We identify the full tag vocabulary during scoping and configure Bullhorn multi-select picklist values to match before migration. Tags used for candidate segmentation migrate to Bullhorn Topics with TopicAssignment records if the customer uses Bullhorn's topic taxonomy.
| In-recruiting | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Application | JobSubmission1:1 | Fully supported | |
| Pipeline Stage | opportunityStagelossy | Fully supported | |
| Interview | Appointment1:1 | Fully supported | |
| Client | ClientCorporation1:1 | Fully supported | |
| Client Contact | ClientContact1:1 | Fully supported | |
| Placement | Placement1:1 | Fully supported | |
| User/Recruiter | User1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Activity/Engagement | Task1:1 | Fully supported | |
| Custom Field (Candidate/Job/Application) | Custom Objectlossy | Fully supported | |
| Tag/Label | Multi-select Picklist or Topiclossy | 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.
In-recruiting gotchas
Public API details are not surfaced in reviewer documentation
Tier structure couples user count, active jobs, and feature flags
Multiposting integrations are tier-gated and per-board configured
Reporting/statistics weakness flagged by reviewers
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 stage taxonomy audit
We audit the source In-recruiting instance across all entity types (Candidates, Jobs, Applications, Interviews, Clients, Client Contacts, Placements, Notes, Activities, and Custom Fields), the full pipeline stage vocabulary, and any active In-recruiting Workflows or Sequences. We pair this with a Bullhorn edition assessment: ATS Growth covers basic migration with up to 2 Custom Objects; Front Office Growth or Enterprise is required for more than 2 Custom Objects; Bullhorn One adds Back Office and Pay & Bill if the customer manages contractor billing. The discovery output is a written migration scope with the Bullhorn edition recommendation and a complete list of missing Bullhorn opportunityStage values requiring Bullhorn Support submission.
Schema design and Client split design
We design the Bullhorn destination schema during a sandbox or validation run. This includes configuring missing opportunityStage values via Bullhorn Support, designing the ClientCorporation and ClientContact split for every In-recruiting Client record, creating Custom Objects (with field-level configuration per the Custom Object Setup Sheet) if the In-recruiting custom field count exceeds 2, and mapping In-recruiting field types to Bullhorn field types (text length validation, picklist creation for multi-select values, date format normalisation). Schema design is validated in a Bullhorn sandbox before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox environment using production-like data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, Jobs in, JobSubmissions in, Placements in, Notes in), spot-checks 25-50 records against the In-recruiting source, and signs off the schema and mapping before production migration begins. Any field-length truncations, stage-mapping corrections, or Client split decisions are resolved here. Bullhorn Support is engaged during this phase for any opportunityStage picklist additions.
Owner reconciliation and User provisioning
We extract every distinct In-recruiting User referenced on Job, Application, Interview, or Placement records and match by email against the Bullhorn destination org's User table. Any In-recruiting User without a matching Bullhorn User goes to a reconciliation queue. The customer's Bullhorn admin provisions missing Users (active or inactive depending on whether the original In-recruiting user is still employed). Migration cannot proceed past JobOrder and JobSubmission import because ownerId references are required on both.
Production migration in dependency order
We run production migration in record-dependency order: Users (manual provisioning validated), ClientCorporations (from In-recruiting Client records with company-level fields), ClientContacts (from In-recruiting Client records with contact-level fields linked to ClientCorporation), Candidates, JobOrders, JobSubmissions (with opportunityStage resolved), Appointments (linked to Candidate and JobOrder), Placements (linked to Candidate and JobOrder), Notes (linked via ContentDocumentLink), Activities (Tasks via Bullhorn REST API), and Custom Objects (last, because they often have lookups to standard entities). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and Automation rebuild handoff
We freeze In-recruiting 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 In-recruiting Workflow and Sequence inventory document to the customer's Bullhorn admin team with a recommended Bullhorn Automation or Bullhorn Workflow equivalent for each. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's recruiting team. We do not rebuild In-recruiting Workflows or Sequences as Bullhorn Automation inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
In-recruiting
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 In-recruiting 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
In-recruiting: Not publicly documented.
Data volume sensitivity
In-recruiting 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 In-recruiting to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your In-recruiting 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 In-recruiting
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.