HRMS migration
Field-level mapping, validation, and rollback between Eddy and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Eddy
Source
Bullhorn ATS & CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Eddy and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Migrating from Eddy to Bullhorn is an HRMS-to-ATS/CRM move that consolidates employee and contact records into Bullhorn's staffing-focused platform. Eddy's core employee objects (name, contact, job title, department, hire date, employment status) map to Bullhorn Candidate or Contact records with custom fields capturing Eddy-specific properties like employment type and termination date. PTO balances, onboarding workflow step counts, and training completion dates migrate as custom object data or custom fields on the Employee-equivalent record. Document file names and blob references transfer; the actual file blobs are extracted and re-associated at the destination. Bullhorn's REST API enforces a Fair Use Policy that requires explicit written authorization for bulk extraction to third-party tools—FlitStack AI coordinates this authorization as part of scoping. We do not migrate Eddy's onboarding workflow logic or training curriculum as configurable objects; we deliver a written inventory of what was active for the customer's admin to rebuild in Bullhorn's onboarding module.
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 Eddy 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.
Eddy
Employee
Bullhorn ATS & CRM
Candidate and ClientContact (tier-dependent)
1:manyEddy Employee records map to Bullhorn Candidate (for active candidates in the recruiting pipeline) or ClientContact (for existing client relationships). The split is determined during scoping: candidates with a Bullhorn JobOrder association go to Candidate; contacts representing hiring managers or client contacts go to ClientContact. Eddy employment status (active, on_leave, terminated) maps to a Bullhorn custom field; termination date maps to a custom date field since Bullhorn Candidate lacks a native termination date field. Job title, department, and location from Eddy map to Bullhorn custom fields on both Candidate and ClientContact.
Eddy
Company Settings (Departments)
Bullhorn ATS & CRM
ClientCorporation + Department Custom Field
1:1Eddy department records (names, cost center codes, reporting hierarchy) map to Bullhorn ClientCorporation records with a department custom field, or to a Bullhorn custom object for org-chart reporting. We flag whether the customer needs ClientCorporation as the legal entity or as the business unit and configure the mapping accordingly. Locations and addresses from Eddy map to Bullhorn ClientCorporation Address fields.
Eddy
PTO Balances
Bullhorn ATS & CRM
Custom Object (PTO Balance) on Candidate
1:1Eddy PTO balances (accrued, used, available, carry-forward) do not have a Bullhorn native equivalent. We create a Bullhorn custom object with fields for pto_type, accrued_balance, used_balance, available_balance, and carry_forward_days, linked to the Employee-equivalent Candidate record. We preserve balance snapshots as of the migration date. Bullhorn ATS tier limits custom objects to 2; ATS Growth has 0. We confirm the customer's Bullhorn edition during scoping and recommend Front Office Growth or Enterprise if custom objects are required.
Eddy
Documents
Bullhorn ATS & CRM
ContentDocument + ContentDocumentLink
1:1Eddy employee documents (offer letters, contracts, signed agreements) migrate as Bullhorn ContentDocument records. We extract file names, file types, upload dates, and blob references. Bullhorn's document storage attaches files to Candidate or ClientContact via ContentDocumentLink. PDF and standard document formats are fully supported. Rich-text document content is preserved. We flag that Eddy's document export may require CSV-assisted extraction if the API export path is incomplete for certain file types.
Eddy
Onboarding Workflows
Bullhorn ATS & CRM
Custom Fields or Custom Object on Candidate
lossyEddy onboarding step checklists and task assignment counts map to Bullhorn custom fields (step_1_status, step_2_status, etc.) or a Bullhorn custom object capturing completed onboarding steps and dates. Bullhorn does not replicate Eddy's guided onboarding workflow builder. We document each active onboarding workflow, its step count, the assigned approver, and the completion status for each employee so the customer's Bullhorn admin can rebuild the workflow in Bullhorn's onboarding module or document it as a standard operating procedure.
Eddy
Training Records
Bullhorn ATS & CRM
Custom Fields or Custom Object on Candidate
1:1Eddy training completion records (course name, completion date, expiry date, certification status) map to Bullhorn custom fields on the Candidate record or a training custom object. Bullhorn does not have a native LMS or training certification tracking module. We extract training history and completion dates from Eddy and preserve them in Bullhorn custom fields. Customers with extensive training compliance requirements may need to maintain a separate LMS; we document the training record count during scoping to inform that decision.
Eddy
Employee Directory
Bullhorn ATS & CRM
ClientContact with Directory-Specific Custom Fields
1:1The Eddy employee directory view is derived from employee records. We migrate the underlying employee data that populates the directory into Bullhorn ClientContact records with custom fields for directory-specific attributes (photo URL, phone extension, reporting manager, office location). We preserve organizational hierarchy information via Bullhorn ClientContact custom fields for manager_id reference. Bullhorn's org chart is a community or portal feature; we note this during the handoff.
Eddy
Payroll Data
Bullhorn ATS & CRM
Custom Fields or Custom Object on Candidate (flag only)
1:1Eddy's HR and payroll modules are not fully integrated per reviewer feedback, and payroll data export requires manual steps or CSV export. We extract available pay-related records (pay rate, pay frequency, last pay date) as Bullhorn custom fields on the Candidate record for staffing operations that use Bullhorn's payroll module (Bullhorn Pay). We flag that full pay run history requires manual export from Eddy before migration scoping finalizes, as automated extraction may be incomplete.
Eddy
Company Settings (Locations)
Bullhorn ATS & CRM
ClientCorporation Address
1:1Eddy location records (addresses, location names, regional codes) map to Bullhorn ClientCorporation Address records. Multiple Eddy locations per company map to multiple ClientCorporation Address records with address type differentiation (primary, branch, remote). We preserve the location-to-employee association via custom fields on the Employee-equivalent Candidate record.
Eddy
Eddy Custom Properties
Bullhorn ATS & CRM
Bullhorn Custom Fields (per entity)
lossyEddy stores industry-specific HR data as custom fields. We map these to Bullhorn custom fields on the appropriate entity (Candidate, ClientContact, ClientCorporation). Bullhorn limits custom fields per entity depending on edition. Bullhorn ATS supports a limited number of custom fields; Front Office Growth and Enterprise allow custom objects with up to 55 fields each. We audit the Eddy custom property count during scoping and confirm whether the customer's Bullhorn edition has sufficient capacity before migration.
Eddy
Employee Status (active/inactive)
Bullhorn ATS & CRM
Candidate Status + Custom Employment Status Field
lossyEddy employment status (active, on_leave, terminated) maps to Bullhorn Candidate status (Active, Day Labor, On Hold, Placed, etc.) plus a custom field edy_employment_status__c capturing the original Eddy value for audit. Terminated employee records migrate as Day Labor or Inactive Candidate records with the termination date preserved in a custom field. Active employee records migrate as Active Candidate records.
Eddy
Hire Date and Employment Tenure
Bullhorn ATS & CRM
Date Fields + Custom Tenure Calculation
1:1Eddy hire_date maps to Bullhorn date fields on the Candidate record. We compute tenure in months and store it in a custom field for reporting. Anniversary dates and probation end dates from Eddy migrate as custom date fields. These are used in Bullhorn reporting for tenure-based filtering.
| Eddy | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Employee | Candidate and ClientContact (tier-dependent)1:many | Fully supported | |
| Company Settings (Departments) | ClientCorporation + Department Custom Field1:1 | Fully supported | |
| PTO Balances | Custom Object (PTO Balance) on Candidate1:1 | Fully supported | |
| Documents | ContentDocument + ContentDocumentLink1:1 | Fully supported | |
| Onboarding Workflows | Custom Fields or Custom Object on Candidatelossy | Mapping required | |
| Training Records | Custom Fields or Custom Object on Candidate1:1 | Mapping required | |
| Employee Directory | ClientContact with Directory-Specific Custom Fields1:1 | Fully supported | |
| Payroll Data | Custom Fields or Custom Object on Candidate (flag only)1:1 | Mapping required | |
| Company Settings (Locations) | ClientCorporation Address1:1 | Fully supported | |
| Eddy Custom Properties | Bullhorn Custom Fields (per entity)lossy | Fully supported | |
| Employee Status (active/inactive) | Candidate Status + Custom Employment Status Fieldlossy | Fully supported | |
| Hire Date and Employment Tenure | Date Fields + Custom Tenure Calculation1:1 | 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.
Eddy gotchas
Contract data cannot be exported via API
Reporting limitations require workarounds
Payroll and HR integration is incomplete
Per-employee pricing counts all employees including inactive
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
Scoping and Bullhorn edition confirmation
We audit the Eddy portal for employee count, custom property count, document volume, PTO balance types, training record count, and onboarding workflow complexity. We confirm the customer's Bullhorn edition (ATS, ATS Growth, Front Office Growth, Enterprise) and verify that custom object and custom field capacity meets the Eddy data requirements. We coordinate Bullhorn API Fair Use Policy written authorization during this phase. The scoping output is a written migration scope document specifying record counts per object, custom field count, document count, and a Bullhorn edition recommendation if the current edition cannot accommodate the migration.
Destination schema design and Bullhorn custom object creation
We design the Bullhorn destination schema based on the object mapping plan. This includes provisioning custom objects for PTO balances and training records, creating custom fields on Candidate and ClientContact for employment status, termination date, hire date, and tenure, and configuring Bullhorn custom objects via the Bullhorn Admin Field Mappings interface or API. Bullhorn requires support tickets for initial custom object setup via their Custom Object Setup Sheet spreadsheet. We submit this as part of the schema phase. The schema is deployed into a Bullhorn Sandbox or test company first for validation before production migration begins.
Eddy data extraction and transformation
We extract Eddy data using available API endpoints and CSV-assisted extraction where API access is incomplete. For document blobs, we run separate extraction for file names, types, and upload dates, then re-upload blobs to Bullhorn ContentDocument after metadata mapping. For payroll data, we flag available records and defer to manual extraction for any pay run history that cannot be retrieved programmatically. We transform employee records into the Lead-Contact-Candidate model based on the scoping-defined split rule. Custom fields are type-mapped (date fields, text fields, picklists) to match Bullhorn field types. The transformation output is a staged dataset ready for Bullhorn API insertion.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn Sandbox or test company using production-like data volume. The customer's operations lead reconciles record counts (Candidates in, ClientContacts in, custom object records in, documents attached), spot-checks 25-50 random records against the Eddy source, and validates that PTO balances, training dates, and document associations appear correctly in Bullhorn. Any field mapping corrections, custom object configuration changes, or data transformation fixes happen here before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: ClientCorporation records (company entities and addresses), then Candidate records (with Bullhorn-edition-compliant custom fields and custom object links), then ClientContact records for directory-specific entries, then custom object data (PTO balances, training records), then document ContentDocument records with ContentDocumentLink associations. Bullhorn ATS API rate limits are managed via exponential backoff and batch chunking. Each phase emits a row-count reconciliation report before the next phase begins. Bullhorn API Fair Use Policy compliance is maintained throughout; we do not exceed documented API call volumes or bulk transfer thresholds.
Cutover, final delta, and onboarding workflow handoff
We freeze Eddy write access 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 onboarding workflow inventory document specifying each active Eddy workflow, its step count, assigned approvers, completion statuses, and recommended Bullhorn equivalent (Bullhorn onboarding module configuration or documented standard operating procedure). We support a one-week hypercare window where we resolve reconciliation issues. Bullhorn's own onboarding team (or their premium implementation partners) handle Bullhorn-specific configuration as a separate scope.
Platform deep dives
Eddy
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between Eddy and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Eddy and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between Eddy and Bullhorn ATS & CRM.
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
Eddy: Not publicly documented..
Data volume sensitivity
Eddy 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 Eddy to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Eddy 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 Eddy
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.