HRMS migration

Migrate from Breathe to Bullhorn ATS & CRM

Field-level mapping, validation, and rollback between Breathe and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.

Breathe logo

Breathe

Source

Bullhorn ATS & CRM

Destination

Bullhorn ATS & CRM logo

Compatibility

33%

4 of 12

objects map 1:1 between Breathe and Bullhorn ATS & CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Breathe to Bullhorn is a cross-domain migration: Breathe is an internal HR platform built around the employee record, and Bullhorn is a recruitment ATS and CRM built around the candidate and placement lifecycle. There is no native object-to-object correspondence for most HR data types, so we design a mapping strategy during scoping that preserves the data that matters operationally and documents what cannot move as code. Breathe Employees map to Bullhorn Candidate records with employment dates, job title, and department transferred as standard or custom fields. Absence history (annual leave, sick leave, other) migrates as Bullhorn Task records linked to the Candidate, preserving dates, absence type, and approval status. Leave balance carry-forward is verified against the source entitlement settings and approval log rather than assumed from any pre-calculated balance field. Breathe custom fields on the Employee record map to Bullhorn custom fields on Candidate, which Bullhorn creates via Tools > Field Mappings. Documents (Company and Employee) cannot be bulk-exported from Breathe and must be individually downloaded; we provide a guided checklist and advise starting document archiving at scoping. Bullhorn does not have native onboarding workflow, absence management, performance review, or payroll modules — Breathe Learn completion records, onboarding task status, performance review cycles, and remuneration history require custom field or note-based storage in Bullhorn, or a rebuild in Bullhorn's optional Onboarding and Back Office products.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Breathe logo

Breathe

What's pushing teams away

  • Organisations with more than 200 employees report that Breathe lacks the advanced HR features — including rich performance management, payroll integration depth, and configurable workflows — needed for complex operations.
  • Users on G2 and Capterra describe the interface as not user-friendly, with continued usability issues that persist across updates, making day-to-day navigation frustrating for HR administrators.
  • Reviewers who switched away cite limited customisation: custom fields are supported but the platform does not expose a flexible object model for building custom workflows or integrating with non-standard HR processes.
  • Absence reports and advanced analytics require higher tiers or add-on modules, and the reporting interface lacks the drill-down capabilities that growing HR teams expect from modern platforms.

Choosing

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

What's pulling them in

  • Agencies choose Bullhorn because it combines ATS and CRM in one platform, eliminating the need to switch between separate tools for candidate management and client relationship tracking.
  • The resume parser extracts contact details, work history, and skills into structured, searchable candidate profiles automatically without manual data entry, reportedly driving 24% more placements per recruiter.
  • Bullhorn's placement and split-billing model natively supports contract staffing workflows, handling start/end dates, overtime rules, and multi-party pay/charge rates in a single record.
  • The platform offers extensive third-party integrations through its Recruitment Cloud Marketplace, connecting with back-office, onboarding, and payroll systems used by staffing agencies.
  • 72% of Bullhorn customers are teams with fewer than 10 users, and Bullhorn's implementation team handles setup and data migration for small agencies going live within weeks.

Object mapping

How Breathe objects map to Bullhorn ATS & CRM

Each row shows how a Breathe 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.

Breathe

Employee

maps to

Bullhorn ATS & CRM

Candidate

1:1
Fully supported

Breathe Employees map to Bullhorn Candidate records as the primary record in the destination. We extract name, contact details (email, phone, address), job title, department, start date, employment status, and manager relationship from the People Data Export. In Bullhorn, Candidate is the central record for any individual — whether internal hire, contractor, or external candidate — so Breathe's employment data (start date, job title, status) maps to Candidate fields or custom fields. We pre-create any required Bullhorn custom fields via Tools > Field Mappings before migration. The Candidate's email address serves as the primary dedupe key during import.

Breathe

Custom Fields (Employee)

maps to

Bullhorn ATS & CRM

Custom Fields (Candidate)

lossy
Fully supported

Breathe custom fields on the Employee record are extracted from the People Data Export with field name and value. Bullhorn creates custom fields via Tools > Field Mappings by typing 'custom' and pressing Enter to filter for all custom field options. We pre-create the destination custom field schema in Bullhorn during configuration, matching field names and selecting appropriate Bullhorn field types (text, number, date, picklist). Field type mapping is validated against the source data — for example, Breathe multi-select values map to Bullhorn multi-select picklist. Fields that do not map to a Bullhorn native type are stored as text with the original type noted for the customer's admin to restructure post-migration.

Breathe

Absence / Leave records

maps to

Bullhorn ATS & CRM

Task

1:many
Fully supported

Breathe absence records (annual leave, sick leave, other absence types) map to Bullhorn Task records linked to the Candidate. Each absence entry generates one Task with TaskType or a custom absence-type field indicating the absence category, the original absence date as ActivityDate, and the approval status preserved in a custom field. Bullhorn does not have a native absence management module, so this mapping preserves the historical absence data in the candidate record for audit purposes but does not replicate Breathe's balance calculation engine. We flag this as a limitation and recommend the customer evaluate Bullhorn's optional absence management features or a third-party HR integration if active leave tracking is required post-migration.

Breathe

Leave balance carry-forward

maps to

Bullhorn ATS & CRM

Custom fields on Candidate

lossy
Fully supported

Breathe leave balances are calculated internally from entitlement settings and approval records. We extract entitlement settings and approval records independently from the People Data Export, compute expected leave balances at the migration cutover date, and compare against any pre-calculated balance fields before loading. Verified balances are stored as custom fields on the Candidate record in Bullhorn. Because Bullhorn does not have a native leave balance engine, these values are static at migration cutover — the customer's admin must configure any ongoing balance tracking in Bullhorn or a connected absence management tool.

Breathe

Sickness records

maps to

Bullhorn ATS & CRM

Task (sickness type)

1:many
Fully supported

Breathe sickness entries — a distinct record type linked to employees with dates, reasons, and Fit Note references — map to Bullhorn Task records with a sickness-specific custom field indicating absence type and a separate custom field carrying Fit Note reference where present. Sickness records are migrated as a separate task sequence from other absence types to allow the customer's admin to filter and report on sickness history independently in Bullhorn.

Breathe

Onboarding

maps to

Bullhorn ATS & CRM

Task (checklist)

1:many
Mapping required

Breathe onboarding task lists and completion status migrate as Bullhorn Task records linked to the Candidate, with the original task name, due date, and completion status preserved in custom fields. Bullhorn's optional paid Onboarding product is not activated by default; we document the onboarding task structure so the customer's admin can decide whether to rebuild it natively in Bullhorn Onboarding or continue managing it as a task checklist. This is a configuration decision, not a direct automation migration.

Breathe

Performance reviews

maps to

Bullhorn ATS & CRM

Note or Custom Object

lossy
Mapping required

Breathe performance review module exports include review cycle, template, ratings, and reviewer comments. Bullhorn does not have a native performance review object. We store review history as Bullhorn Note records with rich text for comments and custom fields for rating scores and review dates, or we create a Bullhorn custom object for performance review if the customer's data volume warrants the schema complexity. The customer chooses the storage strategy during scoping. Bullhorn's Note object supports ContentDocumentLink for any supporting documents from the review.

Breathe

Remuneration / Payroll data

maps to

Bullhorn ATS & CRM

Placement (custom fields) or Custom fields on Candidate

lossy
Mapping required

Breathe Remuneration Report and Payroll Export data (salary, additional payments, benefits, auto-enrolment status) is extracted as structured records. Bullhorn Placement records carry bill rate, pay rate, start date, and end date for temporary workers, which maps cleanly for staffing firms with placement-based pay. For permanent employee salary data with no placement context, we store remuneration fields as custom fields on the Candidate record. The customer confirms during scoping whether the migration is for a staffing firm (placement-centric) or a company using Breathe for internal HR (salary on Candidate). Bullhorn Back Office product may be relevant for ongoing payroll integration but is out of migration scope.

Breathe

Company documents

maps to

Bullhorn ATS & CRM

ContentDocument

1:1
Not supported

Breathe Company-level documents (policies, handbooks, templates) are stored in a separate silo from employee documents and cannot be bulk-exported via API. We document the manual download steps for the customer (Company > Company documents section) and provide a checklist. Downloaded documents are stored locally and handed to the customer for manual upload into Bullhorn as ContentDocument records, linked to the relevant ClientCorporation or Candidate. Bullhorn's package deployment or REST API can handle bulk document attach if the customer provides a named file inventory.

Breathe

Employee documents

maps to

Bullhorn ATS & CRM

ContentDocument

1:1
Fully supported

Breathe Employee documents (contracts, ID copies, certification records) are stored in the Profile > More > Documents section with no bulk export API. We flag this as a high-severity manual step in the scoping checklist and advise the customer to begin document downloads at the start of the engagement. Documents downloaded from Breathe are handed to the customer for manual upload into Bullhorn, where they attach via ContentDocumentLink to the corresponding Candidate record. This is a manual step that adds time to the overall migration timeline depending on document volume.

Breathe

Breathe Learn completion records

maps to

Bullhorn ATS & CRM

Not migrated

lossy
Fully supported

Breathe Learn completion records (GDPR awareness, health and safety compliance training) may not be included in the standard People Data Export if the customer is on a lower Breathe tier or if Learn is an add-on module. We perform a pre-migration data audit against the customer's module list and flag any Learn records that require additional extraction. Bullhorn does not have a native learning management system; completion records can be stored as Note records on the Candidate or as a custom object if the customer requires auditable compliance history in Bullhorn. This is a configuration decision documented during scoping.

Breathe

Owner (Breathe user)

maps to

Bullhorn ATS & CRM

User (Bullhorn)

1:1
Fully supported

Breathe owners (HR administrators, line managers) referenced on employee records are resolved by email match against Bullhorn User records in the destination. We extract all distinct owner IDs and emails from the source export and cross-reference against Bullhorn User. Owners without a matching Bullhorn User are placed in a reconciliation queue for the customer's admin to provision before record import resumes, because Bullhorn requires a valid OwnerId on Candidate and related Task records.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Breathe logo

Breathe gotchas

High

No bulk document export — manual download required

High

No direct migration path between Breathe accounts

Medium

People Data Export may omit data in non-standard modules

Medium

Leave balance carry-forward requires manual verification

Low

Tier-gated features may limit export coverage

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM gotchas

High

ATS Growth edition has no API access

High

Attachments excluded from CSV bulk exports

Medium

Custom Object limits vary sharply by edition

Medium

Opportunity pipeline stages are recruitment-specific

Low

Resume parse quality varies by document format

Pair-specific challenges

  • No bulk document export from Breathe

    Breathe does not expose a bulk document export endpoint via API. Company documents and Employee documents must be downloaded individually from the UI — Company from Company > Company documents, Employee from Profile > More > Documents. This is a common source of migration delay for organisations with hundreds of employee records. We advise the customer to begin document archiving at the scoping stage and provide a guided checklist of the sections to visit. Downloaded documents are handed to the customer for manual upload into Bullhorn as ContentDocument records. This manual step adds timeline depending on document volume and is not counted in the migration fee.

  • Bullhorn has no native absence, onboarding, or performance module

    Breathe absence management, onboarding workflows, and performance reviews have no direct Bullhorn equivalents. Bullhorn's optional Onboarding and Back Office products are paid add-ons that are out of migration scope. We store absence history as Task records, onboarding tasks as a task checklist, and performance reviews as Notes or a custom object — but this preserves the data without replicating Breathe's calculation or workflow logic. The customer's Bullhorn admin must configure any active absence tracking, onboarding process, or review cadence in Bullhorn or a connected tool post-migration.

  • Leave balance figures require independent verification

    Breathe calculates leave balances internally from entitlement settings and approval records. We extract entitlement settings and approval records independently and compute expected balances, then compare against any pre-calculated balance fields before loading. Loading unverified balance figures risks propagating inaccurate balances into Bullhorn, which has no native leave balance engine to correct them. This verification step adds a reconciliation phase to the migration that is scoped separately for customers with complex entitlement structures.

  • Breathe tier-gated modules may limit export coverage

    Breathe lower tiers may gate the People Data Export scope, Insights dashboards, or API access for advanced modules. Breathe Learn completion records, custom third-party add-ons, and data in bespoke custom fields created outside the standard framework may not be included in the standard export. We review the customer's current Breathe tier during scoping and request exports from the appropriate licensed module to ensure we pull from the correct data source. Any modules not accessible via the customer's current tier are documented as requiring a tier upgrade or manual extraction.

  • Bullhorn Candidate required fields and validation rules can block import

    Bullhorn enforces required field constraints and validation rules on the Candidate object that may not align with Breathe export data. We coordinate with the customer's Bullhorn admin to grant the migration user the required API permissions, and we either temporarily disable validation rules during load or extend them with a migration-context check. Bullhorn's REST API has documented rate limits that require exponential backoff and batch chunking during large record imports. Without explicit admin coordination, record rejection rates of 5-20 percent on first import are common for custom-field-heavy Candidate loads.

Migration approach

Six steps for a successful Breathe to Bullhorn ATS & CRM data migration

  1. Discovery and module audit

    We audit the source Breathe account across tier (Starter, Professional, Enterprise), active modules, custom fields, absence history volume, performance review data, onboarding task structure, and remuneration report availability. We pair this with a Bullhorn scope review — which Bullhorn tier (Starter at $99/user, Core at $165/user, or Pro with custom pricing), whether the optional Onboarding or Back Office products are in scope, and how many Bullhorn users will be provisioned. The discovery output is a written migration scope confirming which Breathe data types migrate, which require custom storage design in Bullhorn, and which are manual handoffs.

  2. Document archive initiation

    We provide the customer with a step-by-step checklist for the Breathe Company and Employee document download process and advise starting this work immediately. Document download is a manual, parallel activity that does not require migration engineering but does affect overall timeline. We track completion of the document checklist as a dependency before the Bullhorn ContentDocument upload phase begins.

  3. Bullhorn schema design and custom field pre-creation

    We design the Bullhorn destination schema before any data moves. This includes pre-creating all custom fields on the Candidate object via Tools > Field Mappings (typing 'custom' and pressing Enter to filter the entity list), designing the custom absence-type field on Task, designing the performance review storage strategy (Note or custom object), and confirming the remuneration field placement (Placement custom fields for staffing firms, Candidate custom fields for permanent-hire customers). Schema is validated in a Bullhorn sandbox or test org before production migration begins.

  4. Leave balance verification

    We extract Breathe entitlement settings and approval records independently, compute expected leave balances at the migration cutover date, and compare against any pre-calculated balance fields in the export. Discrepancies are flagged to the customer for confirmation before balances are loaded into Bullhorn custom fields. This step is scoped separately for customers with complex entitlement structures or multiple leave policies.

  5. Sandbox migration and reconciliation

    We run a full migration into a Bullhorn sandbox using production-like data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, Tasks in by type, Notes or custom object records in), spot-checks 25-50 random records against the Breathe source, and validates the absence history task chain and leave balance custom fields. Any mapping corrections and Bullhorn validation rule issues are resolved in sandbox before production migration begins.

  6. Production migration in dependency order

    We run production migration in record-dependency order: Bullhorn Users (validated against the Breathe owner list), Candidate records (with custom fields pre-created), Task records for absence history (linked to Candidate by email match), onboarding Task checklist (linked to Candidate), performance review Notes or custom object records, and remuneration data on Placement or Candidate custom fields. Each phase emits a row-count reconciliation report before the next phase begins. Document upload into Bullhorn ContentDocument follows as a manual step by the customer, with a named file inventory provided by FlitStack AI.

  7. Cutover, validation, and admin handoff

    We freeze Breathe write access during cutover, run a final delta migration of any records modified during the window, then enable Bullhorn as the system of record. We deliver a written inventory of any Breathe modules not migrated (automations, onboarding workflow definitions, Breathe Learn completion records) with recommendations for Bullhorn alternatives. We support a one-week hypercare window for reconciliation issues. We do not rebuild Breathe onboarding workflows as Bullhorn Onboarding configurations or performance review processes as Bullhorn native features inside migration scope; these are separate configuration engagements.

Platform deep dives

Context on both ends of the pair

Breathe logo

Breathe

Source

Strengths

  • Transparent per-employee pricing with no hidden fees for core HR features
  • Covers the full SME HR lifecycle — onboarding, absence, performance, documents — in one platform
  • Breathe Learn satisfies standard compliance training (GDPR, health and safety) out of the box
  • Clear tiered feature table published publicly, simplifying purchase decisions
  • Document storage for both company-wide and employee-specific records is integrated rather than requiring a separate DMS

Weaknesses

  • Limited scalability: customers report Breathe works well only up to approximately 200 employees, after which advanced HR features are insufficient
  • No direct migration tool between two Breathe accounts; customers must export manually and re-import
  • Interface usability issues cited by multiple G2 reviewers as a persistent pain point
  • Bulk document export is not available via API; documents must be downloaded individually from the UI
  • Advanced analytics, custom reports, and payroll integration depth are tier-gated add-ons rather than core features
Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

Destination

Strengths

  • Unified ATS and CRM on one platform purpose-built for staffing agencies, eliminating separate tools for candidates and clients.
  • Automated resume parsing extracts structured candidate data—contact details, work history, skills—into searchable profiles instantly.
  • Native placement and split-billing model handles contract staffing workflows including start/end dates and overtime rules.
  • Bullhorn Recruitment Cloud Marketplace offers 100+ pre-validated third-party integrations spanning the full recruiting lifecycle.
  • 24/7 global support coverage from 350+ support staff with dedicated account management included at all tiers.

Weaknesses

  • Widely regarded as old and bloated with an unintuitive interface and steep learning curve for new recruiters.
  • Slow page loads and performance lag cited in over 200 verified G2 reviews during high-volume recruiting periods.
  • Pricing is opaque—custom-negotiated per organization with significant upfront implementation fees that vary by deal.
  • ATS Growth edition excludes API access entirely, preventing automated data export without upgrading first.

Complexity grading

How hard is this migration?

Standard HRMS migration. 1 of 7 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Breathe and Bullhorn ATS & CRM.

  • Object compatibility

    B

    1 of 7 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Breathe: Not publicly documented.

  • Data volume sensitivity

    B

    Breathe doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Breathe to Bullhorn ATS & CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Breathe to Bullhorn ATS & CRM data migrations

Answers to the questions buyers ask most during Breathe to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Breathe to Bullhorn ATS & CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts with fewer than 500 employees, straightforward absence histories, and no performance review history requiring a custom object. Migrations with large absence records (over 5,000 entries), performance review cycles requiring a custom Bullhorn object design, complex Breathe tier-gated modules requiring data audit, or staffing firms with placement-based remuneration data move to eight to twelve weeks because of custom schema design, leave balance verification, and multi-phase reconciliation.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Breathe.
Land in Bullhorn ATS & CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day