HRMS migration
Field-level mapping, validation, and rollback between RippleHire and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
RippleHire
Source
Bullhorn ATS & CRM
Destination
Compatibility
7 of 12
objects map 1:1 between RippleHire and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
RippleHire and Bullhorn serve different geographic and operational niches: RippleHire targets enterprise hiring teams in India and Southeast Asia with a gamified referral engine, India-specific BGV and Aadhaar compliance, and high-volume seasonal hiring workflows; Bullhorn is the dominant global ATS for staffing and recruitment agencies with a mature REST API, an app marketplace of 350+ integrations, and tiered licensing from Starter at $99/user/month through Enterprise with unlimited users. The migration from RippleHire to Bullhorn requires coordinating data export through RippleHire's implementation team (no public API), parsing the proprietary gamified referral reward schema into Bullhorn custom fields, mapping India-native BGV status flags to Bullhorn custom objects, and carrying offer approval-chain outcomes as notes rather than reconstructing RippleHire's maker-checker workflow engine. Bullhorn's custom object tier limits (Front Office Growth/Enterprise: 10 with 55 fields each; ATS Growth: none; Bullhorn ATS: 2) govern how much RippleHire custom field data fits natively. We do not migrate RippleHire's gamified reward workflows, offer approval chains, or onboarding task configurations as functional code; we deliver a written inventory for the 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 RippleHire 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.
RippleHire
Job
Bullhorn ATS & CRM
JobOrder
1:1RippleHire Jobs (requisitions) map directly to Bullhorn JobOrder. JobOrder.title, description, and address map from RippleHire job name, description, and location. We preserve the sourcing channel attribution (referral, agency, job board) as a custom field sourcing_channel__c since Bullhorn's standard jobOrder does not have a dedicated sourcing attribution field. Job board posting status and external job ID migrate as Bullhorn custom fields if the customer has configured them in RippleHire.
RippleHire
Candidate
Bullhorn ATS & CRM
Candidate
1:1RippleHire Candidate records map to Bullhorn Candidate by firstName, lastName, and email. RippleHire's candidate status (applied, screening, interview, offer, hired, rejected) maps to Bullhorn's candidateStatus field values. Stage progression timestamps migrate as Bullhorn dateCustomText fields; if the customer requires a full pipeline stage history, we create a Bullhorn custom object with stage-name and timestamp columns per candidate.
RippleHire
Referral
Bullhorn ATS & CRM
Candidate (referral segment)
lossyRippleHire Referral records attach to a Candidate and carry the referrer identity, referral status, and reward eligibility fields in a proprietary gamification schema. We extract the full referral record including reward_eligible, reward_status, referral_bonus_amount, and referrer_name fields and map them to Bullhorn Candidate custom fields (referral_referrer__c, referral_status__c, referral_bonus__c, referral_reward_eligible__c). Bullhorn's Front Office Growth or Enterprise tier supports up to 10 custom objects with 55 fields each, enough to hold the referral reward schema. ATS Growth tier has no custom objects and cannot natively store gamified referral data; we flag this constraint during scoping.
RippleHire
Offer
Bullhorn ATS & CRM
Opportunity
1:1RippleHire Offer records map to Bullhorn Opportunity as the closest equivalent. RippleHire offer fields (offered_salary, offer_status, offered_position, joining_date) map to Opportunity.amount, custom opportunity fields, title, and a date field. The Bullhorn Placement object is created from the Opportunity after migration if the offer is accepted. Offer acceptance or decline status migrates as a custom opportunity field; Bullhorn does not have a native offer acceptance workflow so the outcome is recorded as a note on the Opportunity.
RippleHire
Offer Approval Chain
Bullhorn ATS & CRM
Opportunity (approval notes)
lossyRippleHire's maker-checker approval workflow captures who approved an offer, at which stage, and under which policy rule. These approval-chain records carry meaningful audit context but do not map to Bullhorn Opportunity fields. We carry the approval chain as Bullhorn Note records attached to the Opportunity, with note.title set to 'Offer Approval: [Stage]' and note.body containing the approver name, timestamp, and policy rule. Bullhorn Automation or Bullhorn Canvas is used post-migration to rebuild the approval routing logic.
RippleHire
Background Verification (BGV)
Bullhorn ATS & CRM
Candidate Custom Object
lossyRippleHire BGV records store verification status against Aadhaar and other India-specific checks tied to Candidates. Bullhorn has no native BGV object, so we create a Bullhorn custom object bgv_status__c with fields for verification_provider__c, bgv_status__c, aadhaar_verified__c, bgv_completion_date__c, and bgv_report_url__c. The Bullhorn custom object limit (10 on Front Office Growth/Enterprise, 2 on Bullhorn ATS) governs whether the full BGV schema fits natively or requires a third-party BGV integration partner.
RippleHire
Onboarding
Bullhorn ATS & CRM
Placement
lossyRippleHire Onboarding records (post-offer engagement, BGV completion, day-one scheduling) map to Bullhorn Placement with custom fields capturing onboarding_status__c, day_one_start_date__c, and task_completion_flags. RippleHire's onboarding task list is not a migratable object; we deliver a written inventory of onboarding tasks and their completion status as Bullhorn custom fields or a Bullhorn Placement custom object, and the customer rebuilds the onboarding workflow in Bullhorn's onboarding module or Bullhorn Canvas.
RippleHire
User (Hiring Team)
Bullhorn ATS & CRM
User
1:1RippleHire Users (recruiters, hiring managers, admins with role-based access) map to Bullhorn User by email address. Role-based permissions from RippleHire (recruiter, hiring_manager, admin) map to Bullhorn User role and permissions if the customer's Bullhorn edition supports granular role configuration. Bullhorn User must be provisioned in the destination org before any record import; we reconcile RippleHire owners against Bullhorn Users during the owner reconciliation step and flag missing Users for the customer's Bullhorn admin to create before record migration begins.
RippleHire
Custom Fields
Bullhorn ATS & CRM
Custom Fields / Custom Objects
lossyRippleHire supports custom fields on Jobs and Candidates for industry-specific attributes. We map these to Bullhorn custom fields on JobOrder and Candidate respectively, with field type mapping (RippleHire text to Bullhorn text, picklist to Bullhorn DDL, date to Bullhorn date). Picklist value dependencies from RippleHire map to Bullhorn DDL values; any conditional-logic dependencies that cannot be enforced through Bullhorn field-level rules are flagged as post-migration admin tasks. Bullhorn's field edit-type limits (up to 20 checkboxes/dropdowns/radios per custom object) apply if custom fields are housed in a Bullhorn custom object.
RippleHire
Talent Sourcing Channel
Bullhorn ATS & CRM
Candidate Custom Field
1:1RippleHire unifies referrals, vendor/agency, and job board sources under a single sourcing attribution per Candidate. Bullhorn's standard Candidate object does not have a dedicated sourcing channel field. We preserve source attribution by creating a Bullhorn Candidate custom field sourcing_channel__c and populating it from RippleHire's source field (referral, agency, jobboard, direct, internal). Vendor-specific pipeline stages may require a Bullhorn ClientCorporation record to represent the agency as a client in Bullhorn.
RippleHire
Decline Analysis
Bullhorn ATS & CRM
None
1:1RippleHire's Decline Analysis is an aggregated reporting artifact summarizing offer decline trends across the hiring pipeline. It is not a transactional data record and has no migratable data rows. We exclude it from migration scope and flag it as a reporting gap: the customer's Bullhorn admin rebuilds decline analysis as a Bullhorn Analytics report or an external BI dashboard using Bullhorn Opportunity data post-migration.
RippleHire
Reports and Dashboards
Bullhorn ATS & CRM
None
1:1RippleHire shared dashboards (offer status, pipeline analytics, decline insights) are BI-layer artifacts tied to RippleHire's data warehouse and do not export as structured data records. We exclude them from migration scope. We deliver a written catalog of the dashboards with their metric definitions and filter logic for the customer's Bullhorn admin to rebuild in Bullhorn Analytics or connect to an external BI tool (Tableau, Power BI, Metabase).
| RippleHire | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Job | JobOrder1:1 | Fully supported | |
| Candidate | Candidate1:1 | Fully supported | |
| Referral | Candidate (referral segment)lossy | Fully supported | |
| Offer | Opportunity1:1 | Fully supported | |
| Offer Approval Chain | Opportunity (approval notes)lossy | Fully supported | |
| Background Verification (BGV) | Candidate Custom Objectlossy | Fully supported | |
| Onboarding | Placementlossy | Mapping required | |
| User (Hiring Team) | User1:1 | Fully supported | |
| Custom Fields | Custom Fields / Custom Objectslossy | Mapping required | |
| Talent Sourcing Channel | Candidate Custom Field1:1 | Fully supported | |
| Decline Analysis | None1:1 | Not supported | |
| Reports and Dashboards | None1:1 | Not 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.
RippleHire gotchas
No publicly documented REST API or bulk export endpoint
Gamified referral data lives in a proprietary reward schema
Offer approval chains use maker-checker workflow that is source-system specific
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 RippleHire data export coordination
We audit the RippleHire instance across Jobs, Candidates, Referrals, Offers, Onboarding, BGV records, and Users. Because RippleHire has no public API, we coordinate directly with RippleHire's implementation team to schedule structured CSV exports or a direct-database export. We capture the full referral reward schema (including reward_eligible, referral_status, and referral_bonus fields), the maker-checker approval chain outcomes, and the BGV status flags. We pair the RippleHire audit with a Bullhorn edition review: Bullhorn Starter ($99/user) covers basic ATS; Core ($165/user) adds App Marketplace access; Enterprise is required if the customer needs advanced reporting or high-volume placement workflows.
Bullhorn schema design and custom object provisioning
We design the Bullhorn destination schema including Bullhorn JobOrder, Candidate, Opportunity, and Placement standard objects. For RippleHire referral reward data, we create Bullhorn Candidate custom fields (referral_referrer__c, referral_status__c, referral_bonus__c, referral_reward_eligible__c). For RippleHire BGV data, we create a Bullhorn custom object bgv_status__c with the fields needed for India-compliance flags. Bullhorn requires a support ticket to create custom objects; we prepare the Custom Object Setup Spreadsheet per Bullhorn's published template and submit it to Bullhorn Support during schema design so the objects are provisioned before data migration begins.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox using production-like data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, JobOrders in, Opportunities in, Placement records in), spot-checks 25-50 random records against the RippleHire source exports, and validates that referral reward fields and BGV status flags land in the correct Bullhorn custom fields. Any mapping corrections happen in sandbox, not in production. Bullhorn's REST API sandbox access is provided with every Bullhorn account; we use it for validation before production migration.
Owner reconciliation and User provisioning
We extract every distinct RippleHire User (recruiter, hiring manager, admin) referenced on Candidate, Job, and Offer records and match by email against the Bullhorn destination User table. Any RippleHire User without a matching Bullhorn User goes to a reconciliation queue. The customer's Bullhorn admin provisions missing Bullhorn Users before record migration begins. Migration cannot proceed past the JobOrder and Candidate import because Bullhorn requires OwnerId on those records.
Production migration in dependency order
We run production migration in record-dependency order: Bullhorn Users (validated by admin), JobOrders (from RippleHire Jobs with sourcing_channel__c), Candidates (with referral reward custom fields populated, BGV status linked to bgv_status__c custom object), Opportunities (from RippleHire Offers with approval-chain notes attached), Placement records (from RippleHire Onboarding where offers are accepted), and Activity history (tasks, appointments, notes via Bullhorn Bulk API 2.0 with chunking and exponential backoff on rate limits). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow rebuild handoff
We freeze RippleHire 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 deliver a written inventory of RippleHire's maker-checker approval workflows and referral gamification rules for the Bullhorn admin to rebuild in Bullhorn Automation or Bullhorn Canvas. We deliver a BGV document inventory listing any files too large for Bullhorn CandidateAttachments with instructions for manual retrieval. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's recruiting team.
Platform deep dives
RippleHire
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 RippleHire 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
RippleHire: Not publicly documented.
Data volume sensitivity
RippleHire 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 RippleHire to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your RippleHire 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 RippleHire
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.