HRMS migration
Field-level mapping, validation, and rollback between eRecruiter and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
eRecruiter
Source
Bullhorn ATS & CRM
Destination
Compatibility
6 of 12
objects map 1:1 between eRecruiter and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from eRecruiter to Bullhorn is a transition from a Polish-market ATS focused on candidate tracking and GDPR compliance to a global staffing and recruitment CRM that combines ATS and sales pipeline management in one platform. The most significant structural difference is that eRecruiter models each candidate-to-job pair as a single Application record, while Bullhorn uses JobOrder (job), Candidate (person), and JobSubmission (the relationship between them) as three distinct entities. We resolve that 1:N split during transformation, creating one JobSubmission per eRecruiter Application row against the resolved Candidate and JobOrder references in Bullhorn. Bullhorn's custom object limits are edition-gated (ATS Growth: none, Bullhorn ATS: 2, Front Office Growth/Enterprise: 10) and must be confirmed before migration scope is finalized. Workflows and automation logic in eRecruiter do not migrate; we deliver a written inventory of every active rule for the customer's Bullhorn admin to rebuild in Bullhorn Automation or Herefish.
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 eRecruiter 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.
eRecruiter
Candidate
Bullhorn ATS & CRM
Candidate
1:1eRecruiter Candidates map directly to Bullhorn Candidate records via the Bullhorn REST API. We use email as the primary dedupe key, falling back to a composite of firstName + lastName + phone when email is absent. Contact info, skills, employment history, and answers to application questions transfer to Bullhorn Candidate fields. eRecruiter CV Parsing output stored as candidate profile fields migrates as Bullhorn custom fields or custom object entries depending on the destination edition. GDPR consent flags transfer to Bullhorn's compliance fields (GDPRConsentDate, GDPRConsentSource) if configured in the destination org.
eRecruiter
Application
Bullhorn ATS & CRM
JobSubmission
1:manyEach eRecruiter Application row generates one Bullhorn JobSubmission record linking an existing Candidate to an existing JobOrder. The eRecruiter applicationStatus (e.g., applied, screening, interview, rejected, hired) maps to the corresponding Bullhorn JobSubmission status value. If one eRecruiter Candidate has applied to multiple Jobs, each application generates a separate JobSubmission. The mapping requires that both Candidate and JobOrder are migrated and their Bullhorn IDs are resolved before JobSubmission records are inserted. We use the ExternalId from eRecruiter to track the original application reference in a custom field on the JobSubmission.
eRecruiter
Job
Bullhorn ATS & CRM
JobOrder
1:1eRecruiter Jobs map to Bullhorn JobOrder records. Title, description (HTML preserved), location (city, region, country), employment type, and department transfer directly. The eRecruiter publication status (published, draft, closed) maps to JobOrder status. JobOrder.address, JobOrder.city, JobOrder.state, and JobOrder.country populate from eRecruiter location fields. If eRecruiter Jobs have associated custom fields, those map to JobOrder custom fields or custom object entries. We flag any eRecruiter Jobs with status 'closed' or 'cancelled' and discuss with the customer whether to migrate them as archived JobOrders or exclude them from the active Bullhorn instance.
eRecruiter
Company
Bullhorn ATS & CRM
ClientCorporation
1:1eRecruiter Company entities map to Bullhorn ClientCorporation records. We use the Company Import API endpoint in Bullhorn (which supports ExternalId matching) for bulk company creation and updates. Company name becomes ClientCorporation.name, and the company website domain assists with deduplication. If eRecruiter Companies have associated custom fields, those map to ClientCorporation custom fields within the applicable edition limit. Address and industry data transfers to the corresponding ClientCorporation address and business sector fields.
eRecruiter
User
Bullhorn ATS & CRM
User
1:1eRecruiter User records (name, email, role, department) map to Bullhorn User records by email match. Role naming differs between platforms, so we capture the eRecruiter role name in a custom User field for the customer's admin to remap during Bullhorn setup. Users without a matching Bullhorn User account are held in a reconciliation queue; the customer's Bullhorn admin provisions any missing accounts before production migration. Inactive eRecruiter Users may be migrated as inactive Bullhorn Users to preserve historical assignment data.
eRecruiter
Department
Bullhorn ATS & CRM
Team
lossyeRecruiter Departments map to Bullhorn Teams. Bullhorn Teams are a grouping mechanism for User membership rather than a hierarchical org chart. We migrate the department name as the Team name and note that team membership assignment is a post-migration admin task because Bullhorn does not automatically associate Users to Teams based on department metadata from an external source.
eRecruiter
Attachment
Bullhorn ATS & CRM
ContentDocumentLink
1:1Candidate and Application attachments in eRecruiter are identified by DocumentTypeName, Filename, and the parent record's ID. Bullhorn does not have a standalone document download endpoint without parent context. We transfer binary attachments only after the parent Candidate and JobOrder records are present in Bullhorn, using the Bullhorn REST API to create ContentDocument and ContentDocumentLink records linked to the migrated Candidate or JobSubmission. We flag any eRecruiter attachments where the parent Application or Candidate is absent; those documents are held in a reconciliation report for the customer to resolve before migration resumes.
eRecruiter
Scorecard / Rating
Bullhorn ATS & CRM
Custom Object or Note
lossyeRecruiter structured evaluation ratings stored on Applications map to Bullhorn custom object entries on the corresponding JobSubmission. On Front Office Growth and Enterprise editions, up to 10 custom objects with 55 fields each are available. On Bullhorn ATS (2 custom objects) and ATS Growth (none), rating data migrates as structured Note records or Bulletins linked to the JobSubmission. The mapping type depends on the customer's active Bullhorn edition, which we confirm during scoping.
eRecruiter
Custom Field (Candidate)
Bullhorn ATS & CRM
Custom Field or Custom Object
lossyeRecruiter custom fields on Candidates map to Bullhorn Candidate custom fields (customObject1-10 or typed custom fields via Admin > Field Mappings). Bullhorn editions determine how many custom objects are available. We pre-create the destination custom field schema during the sandbox phase, deploy it via Bullhorn Support ticket, and validate that all migrated custom field values land in the correct Bullhorn fields. eRecruiter CV Parsing output is treated as custom field data and follows the same mapping path, with field names validated against the destination schema before migration.
eRecruiter
Custom Field (Application)
Bullhorn ATS & CRM
Custom Field or Custom Object on JobSubmission
lossyeRecruiter custom fields on Applications map to Bullhorn JobSubmission custom fields or custom object entries. The Bullhorn custom field creation workflow requires an Admin > Field Mappings setup per entity. Bullhorn ATS is limited to 2 custom objects, Front Office Growth/Enterprise supports 10. For migrations requiring more custom objects than the edition supports, we prioritize the highest-impact fields for migration and document the remainder for post-migration admin configuration. Bullhorn Support must create custom objects before data can be written to them via API.
eRecruiter
Location
Bullhorn ATS & CRM
JobOrder address fields
1:1eRecruiter location data (city, region, country) on Jobs transfers to Bullhorn JobOrder.city, JobOrder.state, JobOrder.country, and JobOrder.address. If eRecruiter Jobs support multiple location values, each location generates a separate JobOrder with the same title and description, which is the standard Bullhorn pattern for multi-location job postings.
eRecruiter
GDPR / Consent Data
Bullhorn ATS & CRM
GDPR fields on Candidate
lossyeRecruiter's native GDPR and RODO compliance features including consent tracking, data retention metadata, and candidate rights management transfer to Bullhorn's GDPR compliance fields on the Candidate record. GDPRConsentDate and GDPRConsentSource populate from eRecruiter consent date and consent type fields. If the customer requires CCPA compliance for U.S. operations, we map eRecruiter consent data to Bullhorn's CCPA fields (HasOptedOutOfEmail, HasOptedOutOfPhone) alongside the GDPR fields.
| eRecruiter | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Application | JobSubmission1:many | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Company | ClientCorporation1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Department | Teamlossy | Fully supported | |
| Attachment | ContentDocumentLink1:1 | Fully supported | |
| Scorecard / Rating | Custom Object or Notelossy | Fully supported | |
| Custom Field (Candidate) | Custom Field or Custom Objectlossy | Fully supported | |
| Custom Field (Application) | Custom Field or Custom Object on JobSubmissionlossy | Fully supported | |
| Location | JobOrder address fields1:1 | Fully supported | |
| GDPR / Consent Data | GDPR fields on Candidatelossy | 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.
eRecruiter gotchas
No native bulk candidate export endpoint
Documents require linked parent records
CV Parsing output requires field mapping
Pricing requires direct sales contact
Bullhorn ATS & CRM gotchas
ATS Growth edition has no API access
Attachments excluded from CSV bulk exports
Custom Object limits vary sharply by edition
Opportunity pipeline stages are recruitment-specific
Resume parse quality varies by document format
Pair-specific challenges
Migration approach
Discovery and migration scope definition
We audit the source eRecruiter instance via REST API to enumerate Candidates, Applications, Jobs, Companies, Users, custom field schemas, and attachment counts. We confirm the Bullhorn destination edition (ATS Growth, Bullhorn ATS, or Front Office Growth/Enterprise) because it directly determines the custom object budget available for migration. We discuss GDPR consent migration requirements, decide whether closed or cancelled eRecruiter Jobs migrate as archived JobOrders, and define the record date filters if the customer chooses to exclude historical data. The discovery output is a written migration scope document covering record counts per entity, custom field inventory, and a Bullhorn edition recommendation if the customer's custom object needs exceed the current edition limit.
Schema design and custom object provisioning
We design the Bullhorn destination schema: Bullhorn Support creates custom objects (up to the edition limit) via the Custom Object Setup Sheet ticket. We configure standard Bullhorn Candidate, JobOrder, JobSubmission, ClientCorporation, and User fields to receive mapped data. For eRecruiter CV Parsing fields and scorecard data that exceed the custom object budget, we agree on a fallback mapping to Bullhorn Note records or fields on the parent entity. The schema design is deployed to a Bullhorn sandbox for validation before any production data moves. We also confirm whether the customer's Bullhorn instance is on Salesforce (requiring SFDC OAuth) or standalone Bullhorn to set the correct API authentication path.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox using a representative sample of production data. The customer's recruitment operations lead reviews 30-50 randomly sampled records per entity type against the source eRecruiter data, checking field-level accuracy and verifying that application status values map correctly to Bullhorn JobSubmission status. The sandbox run validates the Application-to-JobSubmission split logic, confirms custom object field visibility, and produces a row-count reconciliation report. Any mapping corrections are made before production migration begins. We also test the attachment migration phase in sandbox to confirm that parent-record dependencies resolve correctly.
Source extraction with concurrent API reads
We extract all entities from eRecruiter via REST API using concurrent reads with exponential backoff to handle rate-limit responses. We paginate through the API using eRecruiter's documented cursor or offset parameters and log each record's external ID for traceability. Application records are extracted last and stored with their parent Candidate and Job references so the JobSubmission split can be computed as a transformation step before Bullhorn insert. We also extract GDPR consent metadata, CV Parsing field values, and custom field data as part of the candidate record payload. The extraction phase produces structured JSON or CSV files organized by entity type in the migration staging environment.
Transformation and Application split
We transform eRecruiter data into Bullhorn schema in dependency order: ClientCorporation records first (from eRecruiter Companies), then JobOrder records (from eRecruiter Jobs), then Candidate records, then JobSubmission records (one per eRecruiter Application row, with resolved Candidate and JobOrder IDs). Custom field values are mapped to their Bullhorn field equivalents, with CV Parsing fields handled per the agreed schema. GDPR consent data populates the corresponding Bullhorn compliance fields. We resolve eRecruiter User IDs to Bullhorn User IDs by email match; any unresolved owners go to a reconciliation queue for the customer's admin to provision before production insert. The transformation output is a set of Bullhorn API-ready payloads per entity type.
Production migration in dependency order
We run production migration into Bullhorn in strict dependency order: ClientCorporation (Companies), JobOrder (Jobs), User validation, Candidate, JobSubmission (split Applications), then attachments (ContentDocument + ContentDocumentLink). Each phase emits a row-count reconciliation report before the next phase begins. We use Bullhorn's REST API with batch insert where supported, and handle Bullhorn API rate limits with exponential backoff. Validation rules and required-field constraints in Bullhorn are temporarily relaxed or extended with a migration-context bypass during insert, then restored by the customer's Bullhorn admin after migration. Attachment migration is the final phase, running only after all parent Candidate and JobSubmission records are confirmed present in Bullhorn.
Cutover, validation, and automation inventory handoff
We freeze eRecruiter 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 perform a post-migration reconciliation comparing record counts in Bullhorn against the source extraction totals and flag any discrepancy exceeding 0.5 percent for investigation. We deliver a written inventory of every active eRecruiter workflow rule, automation trigger, and workflow condition to the customer's Bullhorn admin, with recommended Bullhorn Automation equivalents for each. We do not rebuild eRecruiter automations as Bullhorn Automation or Herefish workflows inside the migration scope; that is a separate engagement. We support a one-week post-cutover hypercare window for reconciliation issues.
Platform deep dives
eRecruiter
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. 1 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across eRecruiter and Bullhorn ATS & CRM.
Object compatibility
1 of 7 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
7-object category — typical timelines run 2–7 days end-to-end.
API constraints
eRecruiter: Not publicly documented.
Data volume sensitivity
eRecruiter 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 eRecruiter to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your eRecruiter 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 eRecruiter
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.