HRMS migration

Migrate from E-Staff to Bullhorn ATS & CRM

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

E-Staff logo

E-Staff

Source

Bullhorn ATS & CRM

Destination

Bullhorn ATS & CRM logo

Compatibility

67%

8 of 12

objects map 1:1 between E-Staff and Bullhorn ATS & CRM.

Complexity

CModerate

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

E-Staff combines standard HR objects (Employee, Department, Payroll) with staffing-specific objects (Candidate, Placement, JobOrder, Client) in a single system, while Bullhorn separates its ATS schema (Candidate, JobOrder, Placement, ClientCorporation, ClientContact) from its HRMS and back-office modules. We map E-Staff's unified object model to Bullhorn's relational ATS schema by first auditing the full field inventory via CSV export, then routing each object to its Bullhorn equivalent. Custom fields added by the staffing agency are flagged during scoping and mapped explicitly, since E-Staff allows user-defined fields with no enforced naming convention and Bullhorn enforces type and edition limits per Custom Object. Effective-dated compensation and benefits rows from E-Staff migrate as custom fields on the Bullhorn Placement record with their original effective dates preserved. Bullhorn caps its REST API at 1,500 requests per minute, so we use batch chunking, exponential backoff, and parent-record lookup resolution throughout. Workflows, forms, and reports do not migrate; we deliver a written inventory of these 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

E-Staff logo

E-Staff

What's pushing teams away

  • Windows-only desktop deployment limits remote work and mobile access compared to cloud-native ATS competitors like Recruit CRM, Recruiterflow, and Loxo.
  • Very limited public review footprint and no published roadmap — Datex Software is small and the product has not received user reviews on major directories like SourceForge.
  • Russian-Federation vendor base creates procurement risk for non-Russian organizations and may run into sanctions/export-control screening at multinational customers.
  • No publicly documented REST API or developer portal, complicating modern integration with downstream HRIS, payroll, or business intelligence tools.
  • No publicly listed pricing — pricing requires direct sales contact, which slows comparison shopping against transparent competitors.

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

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

E-Staff

Candidate

maps to

Bullhorn ATS & CRM

Candidate

1:1
Fully supported

E-Staff Candidate records map directly to Bullhorn Candidate. E-Staff stores candidate contact info, skills, employment history, and staffing status in its Candidate object. We preserve the candidate's original record ID as a custom field e_staff_candidate_id__c for cross-system audit. Bullhorn's Candidate is the parent record for all subsequent JobSubmission and Placement objects, so it must insert first. E-Staff custom fields on Candidate are audited during scoping and mapped to Bullhorn standard fields or Custom Objects depending on Bullhorn edition limits.

E-Staff

JobOrder

maps to

Bullhorn ATS & CRM

JobOrder

1:1
Fully supported

E-Staff JobOrder records map to Bullhorn JobOrder. JobOrder in Bullhorn represents an open req with fields for title, description, status, and pay/compensation range. The E-Staff job classification or skill requirement maps to Bullhorn's skills or custom fields. Bullhorn's JobOrder is the parent record for JobSubmission records, so it inserts before any candidate submission records. If E-Staff tracks multiple job statuses, we configure Bullhorn JobOrder Status values during the schema phase.

E-Staff

Placement

maps to

Bullhorn ATS & CRM

Placement

1:1
Fully supported

E-Staff Placement records map to Bullhorn Placement. Placement is the core staffing transaction record representing a candidate placed at a client. E-Staff stores effective start date, end date, pay rate, bill rate, and assignment status in this object. We map effective-dated compensation rows as Bullhorn custom fields on the Placement record: placement_effective_date__c, placement_base_pay__c, placement_bill_rate__c, and placement_pay_rate__c preserve the staffing history audit trail. Bullhorn ATS Growth edition may have limited placement fields; Front Office Growth and Enterprise support Custom Objects for additional staffing attributes.

E-Staff

Client

maps to

Bullhorn ATS & CRM

ClientCorporation

1:1
Fully supported

E-Staff Client records map to Bullhorn ClientCorporation. ClientCorporation is Bullhorn's company record representing the hiring client. The E-Staff client name, address, industry classification, and account manager fields map to Bullhorn ClientCorporation standard fields. ClientCorporation must insert before any Placement or JobOrder referencing it, so that the Bullhorn clientID foreign key resolves at migration time. If E-Staff stores client-specific custom fields (preferred industries, MSA status, tier classification), these map to Bullhorn ClientCorporation custom fields.

E-Staff

ClientContact

maps to

Bullhorn ATS & CRM

ClientContact

1:1
Fully supported

E-Staff client contact records map to Bullhorn ClientContact. ClientContact represents the hiring manager or procurement contact at the client company. E-Staff stores contact name, email, phone, title, and relationship status in this object. We resolve the ClientCorporation reference by matching client name, then set the corporationID on ClientContact to the newly inserted Bullhorn ClientCorporation. ClientContact must insert after ClientCorporation to satisfy Bullhorn's required corporationID lookup.

E-Staff

Employee

maps to

Bullhorn ATS & CRM

Candidate

1:many
Fully supported

E-Staff Employee records (standard HRMS object) and Candidate records (staffing object) are distinct in E-Staff's unified schema. Both map to Bullhorn Candidate because Bullhorn uses Candidate to represent both temporary workers and direct-hire employees on the same record type. We split by E-Staff record type: Employee records flagged as internal staff map to Bullhorn Candidate with a custom field record_origin__c = 'E-Staff Employee'; Candidate records map with record_origin__c = 'E-Staff Candidate'. The origin field preserves the E-Staff object lineage for reporting.

E-Staff

Department

maps to

Bullhorn ATS & CRM

Department

1:1
Fully supported

E-Staff Department records map to Bullhorn Department if the destination Bullhorn org includes Bullhorn Middle Office. Bullhorn Middle Office handles the back-office org structure including departments and cost centers. If the customer's Bullhorn deployment does not include Middle Office, we map Department to a Bullhorn custom field or flag it as out-of-scope for the admin to configure post-migration.

E-Staff

PayrollHistory

maps to

Bullhorn ATS & CRM

Placement custom fields

lossy
Fully supported

E-Staff payroll history rows (effective-dated compensation records) do not map to a standalone Bullhorn object. Bullhorn stores payroll and timesheet data in Bullhorn Middle Office, which is a separate module from the ATS. We map effective-dated payroll rows to custom fields on the Bullhorn Placement record: effective_date__c, pay_rate__c, billing_rate__c, overtime_eligible__c. Each payroll row becomes a separate Placement insert with historical dates, preserving the compensation audit trail. Customers needing full payroll history in Bullhorn should consider adding Middle Office; we flag this as a separate scope recommendation during scoping.

E-Staff

Custom Fields

maps to

Bullhorn ATS & CRM

Custom Objects

lossy
Mapping required

E-Staff allows user-defined custom fields with no enforced naming convention, so every E-Staff custom field must be audited, typed, and explicitly mapped during scoping. Bullhorn's Custom Object system requires Bullhorn Support to create each Custom Object, with field-type limits per object (up to 20 checkbox/dropdown/picker fields and up to 20 text fields). Bullhorn ATS Growth has 0 Custom Objects; Bullhorn ATS caps at 2; Front Office Growth and Enterprise allow 10 Custom Objects with 55 fields each. We pre-create the destination schema before migration, configuring Bullhorn Custom Objects via support ticket, and then map E-Staff custom field values into the typed Bullhorn fields. Any E-Staff custom fields that exceed Bullhorn's edition limit are flagged for the customer to either upgrade or consolidate into fewer Bullhorn standard fields.

E-Staff

Engagement (notes, calls, emails)

maps to

Bullhorn ATS & CRM

Task, Event, Note

1:1
Fully supported

E-Staff engagement records (internal notes, call logs, email threads attached to a Candidate or Placement) map to Bullhorn Task, Event, and Note records. Call engagements map to Bullhorn Task with TaskSubtype = Call; email threads map to Bullhorn Task or Note depending on content type; internal recruiter notes map to Bullhorn Note. The Bullhorn REST API supports these as entity types with bulk insert capability. Parent-record resolution (linking tasks to the correct Candidate, JobOrder, or Placement) is resolved by matching E-Staff's foreign key references to the newly inserted Bullhorn IDs before each batch commits.

E-Staff

User (E-Staff staff accounts)

maps to

Bullhorn ATS & CRM

User (Bullhorn)

1:1
Fully supported

E-Staff staff user accounts map to Bullhorn User records. We match by email address during the migration. Any E-Staff Owner referenced on Candidate, Placement, or JobOrder records is resolved to a Bullhorn User by email lookup before the referencing records insert. Owners without a matching Bullhorn User go to a reconciliation queue; the customer's Bullhorn admin provisions missing Users before record import resumes. Bullhorn supports active and inactive User states; we map the E-Staff active/inactive flag to the Bullhorn isActive field.

E-Staff

Candidate Status History

maps to

Bullhorn ATS & CRM

CandidateCustomObject or custom fields

lossy
Fully supported

E-Staff tracks candidate status transitions (e.g., New, Screening, Interview, Placed, Archived) as audit rows or effective-dated fields. Bullhorn Candidate does not natively store status history as separate records. We map the current candidate status to Bullhorn's Candidate status field and store the most recent prior status in a custom field last_legacy_status__c. If the customer requires full status history for compliance or audit purposes and the Bullhorn edition supports Custom Objects, we create a CandidateCustomObject with status and effective_date fields for each transition row.

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.

E-Staff logo

E-Staff gotchas

High

Catalog URL refers to an unrelated US IT staffing agency (eStaff LLC, Texas)

High

Windows-desktop architecture complicates remote extraction

High

No public API — vendor-assisted exports are the norm

Medium

Russian-vendor sanctions/export-control screening

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

  • E-Staff custom fields have no naming convention to map from

    E-Staff allows user-defined custom fields without enforcing a naming pattern, field type, or per-object limit. Bullhorn enforces field types (text, number, checkbox, dropdown, picker), edit types, and per-object limits. We audit every E-Staff custom field during scoping, assign a Bullhorn-compatible type, and then route each to either a Bullhorn standard custom field or a Custom Object. Bullhorn ATS Growth cannot accept custom fields beyond the standard ones, and Bullhorn ATS caps at 2 Custom Objects. Migrations that skip this audit end up with fields truncated, dropped, or rejected by Bullhorn's validation rules.

  • E-Staff and Bullhorn use different object boundaries for staffing records

    E-Staff combines HR (Employee, Department, Payroll) and ATS (Candidate, Placement, JobOrder, Client) objects in one schema. Bullhorn separates ATS records (Candidate, JobOrder, Placement, ClientCorporation, ClientContact) from its Middle Office HR/payroll module. We split E-Staff's unified model into Bullhorn's ATS objects first, then map HR payroll history to custom fields on the Placement record as a staging step. If the customer wants full payroll history in Bullhorn, Middle Office must be licensed and provisioned separately; we flag this during scoping.

  • Bullhorn API rate limit of 1,500 requests per minute requires batch chunking

    Bullhorn's REST API caps at 1,500 requests per minute per corporate token. Large E-Staff migrations with tens of thousands of records exceed this limit if run as a raw sequential import. We chunk records into batches of 200-500 rows, implement exponential backoff on 429 responses, and use pagination for entity queries. For record sets over 100,000 rows, we consider Bullhorn's Bulk API path if the destination edition supports it, with batch size tuned to avoid timeout errors.

  • Effective-dated compensation history requires multi-row Placement inserts

    E-Staff stores compensation history as effective-dated rows (e.g., a placement with start date 2023-01-01 at $25/hr, updated to $28/hr on 2024-06-01). Bullhorn's Placement record has a single start date and pay rate, not a history table. We handle this by inserting one Placement per effective-dated row, each with its own effective_date__c, pay_rate__c, and bill_rate__c custom fields. This preserves the audit trail but multiplies the Placement record count and requires the customer to understand the resulting history view in Bullhorn. We document this decision clearly in the mapping specification before migration.

  • Workflows, forms, and reports do not migrate as functional code

    E-Staff workflows, E-Staff forms, and E-Staff reports are not exported as executable code that runs in Bullhorn. Bullhorn has its own automation model (Bullhorn Automation with Tasks, Outreach, and Data Quality actions) and its own reporting engine. We deliver a written inventory of every active E-Staff workflow, form, and report with its trigger, conditions, and recommended Bullhorn equivalent. The customer's Bullhorn admin rebuilds these post-migration. This is a key scope limitation that affects the post-migration adoption timeline.

Migration approach

Six steps for a successful E-Staff to Bullhorn ATS & CRM data migration

  1. Discovery and E-Staff schema audit

    We extract the full E-Staff field inventory via CSV export, identifying every standard and custom field on Candidate, Placement, JobOrder, Client, ClientContact, Employee, Department, and PayrollHistory. We determine which objects carry business value for Bullhorn (staffing records migrate; internal-only HR records may be archived or flagged for the admin). We audit E-Staff's custom field naming, assign Bullhorn-compatible types, and map each to either a Bullhorn standard field, a Custom Object, or a custom field on the Placement record. We also extract engagement records and user accounts at this stage.

  2. Bullhorn schema design and Custom Object provisioning

    We design the destination Bullhorn schema based on the E-Staff audit. This includes identifying which Bullhorn edition the customer has licensed, provisioning Custom Objects via Bullhorn Support ticket (for Front Office Growth and Enterprise), and mapping E-Staff custom fields to typed Bullhorn fields. We configure JobOrder Status values, Candidate status picklists, and Placement record type defaults. Bullhorn edition limits are enforced at this stage: if E-Staff has more custom fields than Bullhorn ATS Growth can hold, we flag the edition upgrade requirement before proceeding.

  3. Staging environment migration and reconciliation

    We run a full migration into a Bullhorn Sandbox or staging environment using production-like data volume. The customer's operations lead reconciles record counts, spot-checks 25-50 Candidate, Placement, and JobOrder records against the E-Staff source, and validates that effective-dated compensation rows are represented as separate Placement inserts with historical dates. Any mapping corrections happen in staging, not in production. The staging run also surfaces missing User accounts (no matching Bullhorn user for a given E-Staff owner email) for the admin to provision.

  4. Production migration in dependency order

    We run production migration in record-dependency order: ClientCorporation (from E-Staff Client), then ClientContact (with corporationID resolved), then JobOrder (parent to JobSubmission), then Candidate (parent to Placement), then Placement (with ClientCorporationID and CandidateID resolved), then engagement history (Tasks, Events, Notes linked by foreign key to the newly inserted Bullhorn IDs). Payroll history rows insert as additional Placement records with their effective-dated custom fields. Each phase emits a row-count reconciliation report before the next phase begins. Bullhorn's 1,500 req/min API limit is managed via batch chunking and exponential backoff throughout.

  5. Cutover, delta migration, and workflow inventory handoff

    We freeze E-Staff writes during cutover, run a final delta migration of any records modified during the migration window, then designate Bullhorn as the system of record. We deliver the E-Staff workflow, form, and report inventory document to the customer's Bullhorn admin with a recommended Bullhorn Automation equivalent for each workflow entry. We support a one-week hypercare window to resolve reconciliation issues raised by the recruiting team. We do not rebuild E-Staff workflows as Bullhorn Automation inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

E-Staff logo

E-Staff

Source

Strengths

  • Combined ATS + CRM in one Windows desktop application
  • Strong contact-history tracking when contacts move between client companies
  • Document attachment with keyword search for client and candidate files
  • Targets multiple verticals including staffing agencies, HR departments, government, and nonprofits
  • Resume import and interview/event scheduling cover the core recruiting workflow

Weaknesses

  • Windows desktop-only — no cloud or mobile-first deployment
  • No publicly indexed REST API or developer portal
  • No public pricing or self-serve trial mechanism
  • Vendor (Datex Software, Russia) presents procurement/sanctions risk for multinational customers
  • Negligible public review footprint on major SaaS directories
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?

Moderate HRMS migration. 1 of 7 objects need a manual workaround.

C

Overall complexity

Moderate migration

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

  • Object compatibility

    C

    1 of 7 objects need a manual workaround.

  • 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

    E-Staff: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your E-Staff 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 two and four weeks for agencies with under 10,000 records and no custom objects or staffing-specific custom fields. Migrations with large Candidate and Placement rosters (over 50,000 records), extensive custom field inventories, or multi-division E-Staff instances move to six to ten weeks because of schema splitting, effective-dated compensation mapping, and parent-record resolution work. Bullhorn's own documentation notes that small staffing firms typically go live in two weeks and mid-size agencies in two to six weeks, excluding the data migration work that FlitStack AI performs.

Adjacent paths

Related migrations to explore

Ready when you are

Move from E-Staff.
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