HRMS migration
Field-level mapping, validation, and rollback between 100Hires and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
100Hires
Source
Bullhorn ATS & CRM
Destination
Compatibility
14 of 14
objects map 1:1 between 100Hires and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from 100Hires to Bullhorn is a migration from a small-team ATS with a generous free tier to an enterprise recruitment CRM built for agencies and staffing firms managing 11 or more users across multiple offices. The data model shift is significant: 100Hires treats Companies as sub-objects under Candidates, while Bullhorn separates ClientCorporation (account), Candidate, and Job into three distinct entities with independent REST endpoints. We resolve this schema dependency during scoping, creating Bullhorn ClientCorporation records first so that Candidate.clientCorporation can be populated before import. 100Hires custom evaluation scorecards, in-flight nurture campaigns, and the career site URL require explicit handling because they do not have direct Bullhorn equivalents. Bullhorn's open data model supports integrations with finance systems and custom reporting stacks, which is a primary driver for teams moving off 100Hires onto Bullhorn for multi-office data sharing. We do not migrate workflows, automation rules, or career site configurations; we deliver a written inventory of these for the customer's Bullhorn admin to rebuild.
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 100Hires 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.
100Hires
Job
Bullhorn ATS & CRM
Job
1:1100Hires Jobs migrate directly to Bullhorn Job records. We preserve job title, description, employment type, pay rate, and status. Bullhorn Job requires a ClientCorporation reference, so we create or look up the ClientCorporation first and attach it before job insert. Job publishing status (active/paused/closed) maps to Bullhorn's status field; any job board distribution settings in 100Hires are documented for manual re-configuration in Bullhorn JobAd Distribution.
100Hires
Candidate
Bullhorn ATS & CRM
Candidate
1:1100Hires Candidates map to Bullhorn Candidate records. The primary email is the dedupe key. Bullhorn Candidate requires a clientCorporation reference (unlike 100Hires where Company is a sub-object), so we create a default ClientCorporation placeholder or map to an existing Bullhorn ClientCorporation if a company-level record exists. Candidate name, phone, address, and custom properties migrate as typed fields. We run email-based deduplication before insert to resolve records imported via 100Hires Chrome extension that may duplicate manually entered profiles.
100Hires
Company
Bullhorn ATS & CRM
ClientCorporation
1:1100Hires Company records (stored as sub-objects on Candidate) are extracted as distinct rows and mapped to Bullhorn ClientCorporation. We use company name as the primary field and populate address, industry, and phone from 100Hires. ClientCorporation is inserted before Candidate import so that Candidate.clientCorporationID is satisfied at the moment of Candidate insert. If 100Hires candidates share a company without a formal Company record, we aggregate by domain or company name string before insert.
100Hires
Application
Bullhorn ATS & CRM
CandidateJobOrder (JobSubmission)
1:1100Hires Application records (linking Candidate to Job with pipeline stage, timestamps, and rejection reasons) map to Bullhorn CandidateJobOrder (JobSubmission). We preserve the full pipeline stage history as CandidateJobOrder status changes with timestamps, and migration reason from 100Hires becomes a custom field on CandidateJobOrder. The CandidateID and JobID references are resolved from the preceding migration phases.
100Hires
Interview
Bullhorn ATS & CRM
CandidateInterview
1:1100Hires Interviews (scheduled dates, times, interviewers, interview types, calendar integration status) map to Bullhorn CandidateInterview records linked to the CandidateJobOrder. We preserve interview type, scheduled date and time, interviewer user references (resolved via User mapping), and the G Suite calendar integration status as a custom field noting re-authentication is required in Bullhorn.
100Hires
Evaluation
Bullhorn ATS & CRM
CandidateReference (or custom object)
1:1100Hires custom evaluation scorecards (with custom criteria and submitted scores) are exported with their form definitions. Bullhorn's standard reference check feature does not cover general interview evaluations, so we either populate custom fields on CandidateInterview (if criteria count is low) or create a Bullhorn custom object for evaluations with a lookup to Candidate. The scoring rubric (e.g., 1-5 scale vs pass/fail) must be explicitly mapped; we flag any unresolvable custom criteria in the pre-migration audit and document them for Bullhorn admin reconfiguration.
100Hires
Note
Bullhorn ATS & CRM
Note
1:1100Hires Notes attached to Candidates or Applications migrate to Bullhorn Note records linked via BULLHORN entity associations. Note body, author (resolved to Bullhorn User by email), and creation timestamp are preserved. Bullhorn Note uses a body field and a commentCount field; we map the original author as a custom field if the Bullhorn Note author attribution behavior differs from the source.
100Hires
Message
Bullhorn ATS & CRM
Note (with type flag)
1:1100Hires email conversations (Message objects tied to Candidates or Applications) migrate to Bullhorn Note records with a message-type indicator. Email subject, body, sender, and recipient are preserved. External email threads that originated in Gmail or LinkedIn and were imported into 100Hires via Chrome extension may require thread-context reconciliation; we flag these in the audit report.
100Hires
User
Bullhorn ATS & CRM
User
1:1100Hires Users (recruiters and team members) map to Bullhorn User records by email address. Role and permission assignments in 100Hires do not map directly to Bullhorn role-based access control because Bullhorn permissions are structured around Bullhorn-specific permission sets. We document the 100Hires role assignments for the customer's Bullhorn admin to reconfigure permissions post-migration.
100Hires
Attachment
Bullhorn ATS & CRM
CandidateAttachment (or ContentDocument)
1:1100Hires Attachments (resumes, cover letters, portfolio files) linked to Candidates or Applications migrate to Bullhorn CandidateAttachment records. We download binary files from 100Hires, preserve filenames and parent record associations, and re-upload to Bullhorn with the appropriate entity reference. Large portfolio files are chunked for re-upload if the Bullhorn attachment API enforces size limits.
100Hires
Taxonomy: Skills
Bullhorn ATS & CRM
Skill
1:1100Hires Skills taxonomy is exported as a flat list and mapped to Bullhorn Skill records. Bullhorn Skill is a standard object linked to Candidate via CandidateSkill. We deduplicate skill names during export (normalizing case and removing duplicates) before bulk-inserting into Bullhorn. Skills with no exact match are flagged for admin review.
100Hires
Taxonomy: Departments
Bullhorn ATS & CRM
Custom field or Category
1:1100Hires Departments taxonomy maps to a Bullhorn custom picklist field on Job (or to a Category object if the Bullhorn edition supports it). We export department names as distinct values and populate the destination field during job import. If no equivalent exists, we document the department list for Bullhorn admin to configure as a custom field.
100Hires
Taxonomy: Locations
Bullhorn ATS & CRM
Custom field or address components
1:1100Hires Locations taxonomy is exported and mapped to Bullhorn Job location fields (city, state, country) or a custom location field. We parse the 100Hires location string and split into structured address components for Bullhorn's address model.
100Hires
Email Template
Bullhorn ATS & CRM
Bullhorn Email Template
1:1100Hires Email Templates (body content, subject lines, placeholder tokens) migrate as Bullhorn EmailTemplate records. We export templates as raw text with token syntax preserved and document the placeholder format differences between 100Hires and Bullhorn token syntax so the customer's Bullhorn admin can update template tokens post-migration.
| 100Hires | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Job | Job1:1 | Fully supported | |
| Candidate | Candidate1:1 | Fully supported | |
| Company | ClientCorporation1:1 | Fully supported | |
| Application | CandidateJobOrder (JobSubmission)1:1 | Fully supported | |
| Interview | CandidateInterview1:1 | Fully supported | |
| Evaluation | CandidateReference (or custom object)1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Message | Note (with type flag)1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Attachment | CandidateAttachment (or ContentDocument)1:1 | Fully supported | |
| Taxonomy: Skills | Skill1:1 | Fully supported | |
| Taxonomy: Departments | Custom field or Category1:1 | Fully supported | |
| Taxonomy: Locations | Custom field or address components1:1 | Fully supported | |
| Email Template | Bullhorn Email Template1: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.
100Hires gotchas
Free tier candidate cap resets monthly and limits pipeline stages
Email nurture campaigns cannot be exported mid-flight
Custom evaluation forms require manual schema alignment
Chrome extension imports may duplicate Candidate records
Career Site public URL is not transferable across accounts
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 export window coordination
We audit the 100Hires account for total record counts across Jobs, Candidates, Applications, Interviews, Evaluations, Notes, Attachments, and taxonomy objects. We confirm the candidate cap status (free tier limit of 100/month) and arrange a temporary paid tier activation to lift the cap for the export window. We identify any Chrome-extension-imported candidates that may have duplicates and document the 100Hires API access credentials. The discovery output is a written migration scope with record counts per object, a deduplication report, and a confirmed export window date.
ClientCorporation extraction and deduplication
We extract 100Hires Company records as distinct rows from Candidate sub-objects, normalizing company name strings and deduplicating by exact name match. We identify shared companies across candidates and aggregate to a single ClientCorporation per unique company name. This phase must complete before Candidate export begins because Bullhorn Candidate requires a valid ClientCorporationID at insert time.
Bullhorn schema pre-configuration
We configure the Bullhorn destination: custom fields on Candidate and CandidateJobOrder matching 100Hires custom properties, custom picklist values for Department and Location, custom evaluation object (if required), and taxonomy Skill records. We deploy these to a Bullhorn Sandbox org for validation before any data moves. Bullhorn User provisioning is confirmed by email match against 100Hires Users; any unmatched 100Hires owners go to a reconciliation queue for admin provisioning.
Sandbox migration and reconciliation
We run a full migration into Bullhorn Sandbox using production data volumes. The customer's Bullhorn admin reviews record counts, spot-checks 25-50 Candidate and Application records against the 100Hires source, and validates that ClientCorporation links are correct. Any missing custom field mappings, taxonomy gaps, or evaluation schema issues are corrected in this phase. Sandbox sign-off gates production migration.
Production migration in dependency order
We run production migration in strict dependency order: ClientCorporation records first, then Candidates (with ClientCorporationID resolved), Jobs (with ClientCorporationID resolved), CandidateJobOrder (Applications) with CandidateID and JobID resolved, CandidateInterview records, Evaluation data mapped to custom fields, Notes, Attachments, Skills via Bullhorn bulk insert, and Email Templates last. Each phase emits a row-count reconciliation report before the next phase begins. The Bullhorn Bulk API handles large record batches with rate-limit handling and retry logic.
Cutover, validation, and automation rebuild handoff
We freeze 100Hires writes during cutover, run a final delta migration for any records modified during the migration window, then enable Bullhorn as the system of record. We deliver the Nurture Campaign inventory document, the Evaluation Form rubric mapping notes, and the workflow automation inventory for Bullhorn admin to rebuild using Bullhorn Automation. We support a one-week hypercare window for reconciliation issues. We do not rebuild 100Hires automations as Bullhorn Automation inside the migration scope; that is a separate engagement.
Platform deep dives
100Hires
Source
Strengths
Weaknesses
Bullhorn ATS & CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard HRMS migration. All 7 core objects map 1:1 between 100Hires and Bullhorn ATS & CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across 100Hires and Bullhorn ATS & CRM.
Object compatibility
All 7 core objects map 1:1 between 100Hires 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
100Hires: Not publicly documented on the official API reference page.
Data volume sensitivity
100Hires 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 100Hires to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your 100Hires 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 100Hires
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.