HRMS migration

Migrate from Darwinbox to Bullhorn ATS & CRM

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

Darwinbox logo

Darwinbox

Source

Bullhorn ATS & CRM

Destination

Bullhorn ATS & CRM logo

Compatibility

77%

10 of 13

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

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Darwinbox to Bullhorn is a cross-domain migration. Darwinbox centres on a unified Employee record covering the full hire-to-retire lifecycle with native modules for recruitment, attendance, leave, payroll, and performance. Bullhorn separates Candidate records (for job seekers in the ATS/CRM) from Employee records (for staff in Bullhorn HCM), and does not have a direct equivalent for Darwinbox's effective-dated compensation rows, multi-policy leave structures, or performance review cycles. We extract Darwinbox's employee data and split it into Bullhorn Candidate and Employee records based on employment status at migration time, preserving original Darwinbox identifiers as custom fields for audit. We load leave balances as Bullhorn time-off entries and map shift-policy references to Bullhorn's time-tracking configuration. We do not migrate document blobs (not accessible via Darwinbox API), workflows, automations, or recruitment-to-employee transition logic as code; we deliver written inventories for the customer's admin to rebuild in Bullhorn.

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

Darwinbox logo

Darwinbox

What's pushing teams away

  • Slow page load times and performance lag when running large reports, analytics, or processing high-volume attendance data—affecting daily productivity for recruiters and admins.
  • Limited report customisation and occasional analytics inaccuracies force reliance on manual exports or engineering help for complex workforce reporting.
  • Integration friction with niche or legacy systems; off-the-shelf connectors exist but custom integrations require engineering effort and vendor support tickets.
  • Opaque quote-based pricing without published tiers makes budgeting difficult and renewal costs can surprise smaller organisations.
  • Support response delays and intermittent bugs are cited in verified reviews, often requiring multiple follow-up tickets to reach resolution.

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 Darwinbox objects map to Bullhorn ATS & CRM

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

Darwinbox

Employee

maps to

Bullhorn ATS & CRM

Candidate and/or Employee (split required)

1:many
Fully supported

Darwinbox's unified Employee record does not map directly to a single Bullhorn object. We split based on employment status at migration time: active employees become Bullhorn Employee records (in the HCM module), former employees or applicants without an employment record become Bullhorn Candidate records, and current applicants still in the recruitment pipeline become Bullhorn Candidate records with status preserved. The original Darwinbox employee ID migrates as a custom field darwinbox_id__c on both Bullhorn Candidate and Employee for audit traceability. The split rule is defined during discovery and reviewed with the customer before migration day.

Darwinbox

Organisation / Org Structure

maps to

Bullhorn ATS & CRM

Corporate Structure

1:1
Fully supported

Darwinbox organisational units, cost centres, and location hierarchies map to Bullhorn Corporate Structure using the corporateCorporationID and parentID fields. The top-level org unit becomes the root CorporateCorporation record in Bullhorn, and child departments map as child CorporateCorporation records with the appropriate parent references. Cost-centre assignments from Darwinbox migrate as custom fields on each CorporateCorporation record. Location data maps to Bullhorn's Address object linked via the CorporateCorporation.

Darwinbox

Attendance Records

maps to

Bullhorn ATS & CRM

TimeTracking / Punch Records

1:1
Mapping required

Darwinbox attendance punch logs (employee ID, timestamp, in/out status, machine ID, shift-date reference) map to Bullhorn TimeTracking records. Darwinbox shift policies and weekly-off names are extracted alongside attendance data and mapped to Bullhorn's time-tracking configuration before punch records are loaded. Each punch record receives a shift-policy mapping tag so that records remain auditable against Darwinbox's original shift rules. We flag any punch records that reference shift policies not representable in Bullhorn's model for customer review.

Darwinbox

Leave Balances

maps to

Bullhorn ATS & CRM

Time-Off / PTO

1:1
Mapping required

Darwinbox leave types (annual, sick, maternity, paternity, unpaid) and per-employee accrual balances map to Bullhorn Time-Off entries with accrual-type rules. We extract each employee's leave entitlement by type with the accrual rate, balance, and policy name, and create Bullhorn time-off entries with the corresponding accrual category. Darwinbox's multiple leave policies per org unit require a policy-mapping step before bulk leave loading. Leave that does not have a direct Bullhorn equivalent (for example, Darwinbox-specific leave types) migrates as a custom field on the Employee record.

Darwinbox

Payroll / Compensation History

maps to

Bullhorn ATS & CRM

JobSubmission / Employee Custom Fields

1:1
Mapping required

Darwinbox effective-dated compensation rows (salary, bonus, deductions, tax codes) map to Bullhorn as historical records on the Employee object. Each effective-dated row becomes a dated entry in a custom compensation history object we pre-create in Bullhorn, with fields for effective_date, salary_amount, currency, bonus_amount, and deduction_type. The most recent effective-dated row becomes the active compensation on the Bullhorn Employee record. We sequence compensation rows chronologically and flag any overlapping effective dates for customer review before applying.

Darwinbox

Recruitment / Candidates

maps to

Bullhorn ATS & CRM

Candidate

1:1
Mapping required

Darwinbox recruitment candidate profiles, applicant-stage history, sourcing information, feedback, and offer data export as Bullhorn Candidate records. The Darwinbox candidate ID migrates as a custom field darwinbox_candidate_id__c on Bullhorn Candidate for cross-reference. Applicant-stage history (applied, screening, interview, offer, hired, rejected) maps to Bullhorn's CandidateStatus field, and custom stage names are mapped to Bullhorn status values during the pre-migration schema review. Offer letters migrate as content document attachments on the Candidate record.

Darwinbox

Performance Reviews

maps to

Bullhorn ATS & CRM

Custom Object (PerformanceReview)

lossy
Mapping required

Darwinbox performance review cycles, ratings, goals, and manager feedback have no direct Bullhorn standard object equivalent. We pre-create a Bullhorn custom object (PerformanceReview__c) with fields for cycle_name, employee_id, reviewer_id, rating_value, rating_scale, goal_content, and feedback_text. Each review migrates as a PerformanceReview__c record linked to the Bullhorn Employee record via a lookup field. Rating scale values are normalised to a consistent numeric range defined during discovery.

Darwinbox

Users / Roles

maps to

Bullhorn ATS & CRM

User

1:1
Mapping required

Darwinbox users carrying admin, manager, or employee roles map to Bullhorn User records with the corresponding Bullhorn permission set or role hierarchy. We extract user-role assignments from Darwinbox and map them to Bullhorn's role and permission-set model during the migration. Any Darwinbox user without a matching Bullhorn User email is placed in a reconciliation queue for the customer's Bullhorn admin to provision before record import resumes.

Darwinbox

Custom Fields

maps to

Bullhorn ATS & CRM

Custom Fields

lossy
Mapping required

Darwinbox tenant-specific custom fields (text, number, boolean, date, predefined-list types) require Bullhorn custom field creation before migration. We introspect the Darwinbox tenant's custom field registry during discovery to build the complete field list, then pre-create matching Bullhorn custom fields on the corresponding Bullhorn objects (Candidate, Employee, CorporateCorporation) using the Bullhorn Custom Object framework. Field types are mapped: Darwinbox text becomes Bullhorn String, number becomes Numeric, boolean becomes Boolean, date becomes Date, and predefined-list becomes a Bullhorn picklist.

Darwinbox

Engagement / Recognition

maps to

Bullhorn ATS & CRM

Activity / Note

1:1
Mapping required

Darwinbox recognition events (peer awards, reward points, social recognition) with timestamps and point values map to Bullhorn Activity records (type = Note or Custom) on the Employee record. Recognition content migrates as a Note attached to the Employee with the point value stored in a custom field. Bullhorn does not have a native rewards/recognition module, so recognition history is preserved as an audit trail rather than as a functional module.

Darwinbox

Job Postings

maps to

Bullhorn ATS & CRM

JobOrder

1:1
Fully supported

Open and historical job postings from Darwinbox migrate to Bullhorn JobOrder records. Fields including job_title, department, employment_type, location, and description migrate directly. Status (open, closed, on-hold) maps to Bullhorn JobOrder status. JobOrder ID is stored as a cross-reference field for any candidate applications linked to the original Darwinbox job posting.

Darwinbox

Documents / HR Files

maps to

Bullhorn ATS & CRM

ContentDocument (Attachment)

1:1
Not supported

Employee documents (contracts, IDs, certifications) stored in Darwinbox's document management module cannot be accessed via the Darwinbox public REST API and are not migratable programmatically. We extract document metadata (filename, document type, attached employee ID, upload date) as a written inventory list that the customer's admin uses to manually upload files into Bullhorn or a linked document store post-migration. This step is flagged as out-of-scope for the automated migration.

Darwinbox

Workflows / Approvals

maps to

Bullhorn ATS & CRM

Workflow (not migrated)

1:1
Not supported

Darwinbox approval chains, routing rules, and workflow logic are platform-stored automation configurations rather than data records and cannot be exported as structured objects. These do not migrate. We deliver a written inventory of every active Darwinbox workflow and approval chain with its trigger, conditions, actions, and assigned approvers. Bullhorn's own workflow and automation rebuild is a separate engagement or internal admin task documented in the handoff package.

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.

Darwinbox logo

Darwinbox gotchas

High

API access is privileged and request-only

Medium

Custom fields are tenant-specific and not in public schema

Medium

Attendance records require shift-policy alignment

Medium

Effective-dated compensation rows need careful sequencing

High

Document blobs are not accessible via public API

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

  • Document blobs are not accessible via Darwinbox API

    Employee documents (contracts, certificates, government IDs, offer letters) stored in Darwinbox's document management module are not exposed via the public REST API. Manual export or a vendor-assisted export must be arranged separately. We cannot migrate these records programmatically and flag them as an out-of-scope step requiring manual handling or a bespoke vendor export engagement. Document metadata (filename, type, attached employee ID) migrates as a written inventory so the customer's admin can manually upload to Bullhorn after cutover.

  • Candidate versus Employee split requires design decision

    Darwinbox maintains a single Employee record across the hire-to-retire lifecycle. Bullhorn separates Candidate records (ATS, for job seekers and applicants) from Employee records (HCM, for staff on payroll). We apply a split rule at migration time based on employment status: active Darwinbox employees become Bullhorn Employee records, and former employees or active applicants become Bullhorn Candidate records. Migrations that skip this design step create orphaned records with no Candidate or Employee parent in Bullhorn, breaking downstream reporting and placement workflows.

  • Leave and attendance schema does not map directly

    Darwinbox supports multiple leave policies per org unit with flexible accrual rules and shift definitions that vary by tenant. Bullhorn's time-off and attendance modules use a different policy structure and accrual model. We extract Darwinbox leave types, accrual rules, and shift policies during discovery, then run a policy-mapping step before loading leave balances or attendance punch records. Any Darwinbox leave type without a Bullhorn equivalent is migrated as a custom field rather than a native time-off entry. Attendance punch records require shift-date alignment before bulk loading.

  • Bullhorn API rate limits require chunking and backoff

    Bullhorn's REST API enforces per-user rate limits on standard endpoints. Large record sets (employee populations over 2,000, candidate pools over 10,000, or multi-year attendance histories) require batch chunking, Bulk API usage for activity records, and exponential backoff on rate-limit responses. We implement adaptive rate-limit handling and retry logic for all Bullhorn API calls. A dry-run migration in a Bullhorn sandbox establishes the safe batch size before production migration begins.

  • Effective-dated compensation rows must be sequenced

    Darwinbox stores multiple effective-dated compensation rows per employee representing salary changes, promotions, bonuses, and deductions. Loading these out of chronological order produces incorrect current compensation values in Bullhorn. We extract compensation rows in reverse-chronological order, validate no overlapping effective dates exist, and load the most recent row as the active compensation on the Bullhorn Employee record. All historical rows migrate as a custom compensation history object. Overlapping dates are flagged for customer review before applying.

Migration approach

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

  1. Discovery and Bullhorn product selection

    We audit the Darwinbox tenant across all modules in scope: employee count, organisational hierarchy depth, leave policy count and accrual rules, attendance record volume and shift-policy configuration, recruitment candidate volume and stage history, compensation history row count, performance review cycle data, and the full tenant-specific custom field registry. We pair this with a Bullhorn product-scope decision: whether the destination uses Bullhorn ATS only, Bullhorn ATS plus CRM, or the full Bullhorn HCM stack. The discovery output is a written migration scope document with record counts per object, a custom field inventory, a leave-policy mapping table, and a Bullhorn product recommendation.

  2. Schema design and Candidate-Employee split rule

    We design the destination Bullhorn schema including pre-creation of any custom objects (PerformanceReview__c, CompensationHistory__c), custom fields on Candidate and Employee objects, Corporate Structure hierarchy, and the Candidate-Employee split rule based on the customer's employment status taxonomy. Schema is deployed into a Bullhorn sandbox first for validation. We also map Darwinbox leave policy names to Bullhorn time-off accrual categories and Darwinbox shift policy references to Bullhorn time-tracking configuration during this step.

  3. Sandbox migration and reconciliation

    We run a full migration into a Bullhorn sandbox using a representative data volume. The customer's HR and recruiting leads reconcile record counts (Employees in, Candidates in, Leave balances in, Attendance records in, Compensation rows in, Performance reviews in), spot-check 25-50 records against the Darwinbox source, and sign off the schema, mapping, and split rule before production migration begins. Mapping corrections happen in sandbox, not in production.

  4. User reconciliation and Bullhorn User provisioning

    We extract every distinct Darwinbox user and match by email against the Bullhorn destination's User table. Users without a matching Bullhorn User record are placed in a reconciliation queue for the customer's Bullhorn admin to provision before record import resumes. Migration cannot proceed past this step because User references are required for activity ownership and role assignment on most Bullhorn records.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Corporate Structure hierarchy first (establishing the org root), then Employees (as split into Bullhorn Employee records for active staff), then Candidates (for applicants and former employees), then Compensation history (as custom records linked to Employee), then Leave balances (as time-off entries), then Attendance punch records (after shift-policy mapping), then Performance reviews (as custom object records), then Recruitment data (JobOrders and Candidates with applicant history), then Activity history (recognition events via Bulk API), then custom field data. Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, validation, and handoff

    We freeze Darwinbox 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 validate record counts, spot-check key employee and candidate records, and confirm leave balance totals and attendance record continuity. We deliver the workflow and automation inventory document and the document-migration manual checklist to the customer's admin team. We support a one-week hypercare window for reconciliation issues raised by the HR or recruiting team. We do not rebuild Darwinbox workflows, automations, or Bullhorn Compose sequences inside the migration scope; those are separate engagements.

  7. Post-migration reporting and cleanup

    We deliver a post-migration reconciliation report showing record counts by object, a list of any unmapped fields with reasons, a list of records placed in the reconciliation queue with resolution instructions, and the document metadata inventory. We recommend the customer's Bullhorn admin reviews record-level permissions, role assignments, and Bullhorn user-seat allocation post-migration. Any Bullhorn workflow or automation rebuild is scoped as a separate engagement with the inventory document as the starting brief.

Platform deep dives

Context on both ends of the pair

Darwinbox logo

Darwinbox

Source

Strengths

  • Comprehensive end-to-end HCM coverage from recruitment through payroll on a single platform.
  • Mobile-first design with AI assistant, facial-recognition attendance, and WhatsApp/MS-Teams integration.
  • High configurability via custom fields and no-code workflow builder without IT dependency.
  • Native global payroll capabilities across multiple country statutory footprints.
  • Predictable PEPM pricing model aligned to headcount growth with tiered module options.

Weaknesses

  • Performance degrades with large employee populations and complex analytics workloads.
  • Opaque pricing with no publicly documented tier details makes budgeting and vendor comparison difficult.
  • Reporting and analytics dashboards require heavy customisation for non-standard workforce insights.
  • Integration ecosystem limited for niche or legacy third-party systems beyond major ERP connectors.
  • Support response times and bug resolution are recurring pain points cited in verified reviews.
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 Darwinbox 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

    Darwinbox: Enforced via Istio service mesh policies; specific quotas not publicly published.

  • Data volume sensitivity

    A

    Darwinbox exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Darwinbox 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 Darwinbox to Bullhorn ATS & CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Straightforward migrations covering up to 3,000 employees with no recruitment history, standard leave policies, and no custom objects land between four and six weeks. Migrations with large candidate pools (over 10,000 records), multiple leave policies per org unit, multi-year attendance histories, effective-dated compensation rows, or custom performance-review schemas move to ten to sixteen weeks because of Candidate-Employee split design, shift-policy mapping, and Bulk API chunking.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Darwinbox.
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