HRMS migration
Field-level mapping, validation, and rollback between Greenhouse and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.
Greenhouse
Source
Bullhorn ATS & CRM
Destination
Compatibility
7 of 12
objects map 1:1 between Greenhouse and Bullhorn ATS & CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Greenhouse to Bullhorn is a shift from an in-house structured-hiring ATS to a staffing-agency CRM-first ATS platform. Greenhouse organizes hiring around structured interview scorecards, job requisitions, and pipeline stages; Bullhorn organizes around Candidates, Clients, JobOrders, and Placements with a built-in CRM for candidate and client relationship tracking. The most significant schema difference is that Greenhouse's interview scorecards are first-class nested objects, while Bullhorn has no native scorecard entity — we migrate scorecard ratings and interviewer feedback into Bullhorn custom fields on the Candidate or JobSubmission record. We preserve every Candidate, Application, Job, Offer, and custom field value through Bullhorn's REST API with batch chunking, and we handle the multi-week parallel-run window that Greenhouse's documented historical migration process requires.
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 Greenhouse 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.
Greenhouse
Candidate
Bullhorn ATS & CRM
Candidate
1:1Greenhouse Candidate records map to Bullhorn Candidate. We preserve all standard fields (firstName, lastName, email, phone, social URLs) and custom field values across Greenhouse value types (single_select, multi_select, currency, date, user reference). Phone number formatting is normalized to E.164 before insert. Tags migrate as Bullhorn Tags. Active candidate records require manual export from Greenhouse for bulk import if the customer is on Core tier; Plus and Pro customers can use the Greenhouse bulk import method guided by our exported CSV template.
Greenhouse
Application
Bullhorn ATS & CRM
JobSubmission
1:1Greenhouse Application records (linking Candidate to Job) map to Bullhorn JobSubmission. We preserve application date, rejection or hire status, current stage, and all stage history timestamps. Rejection reasons migrate to a custom field on JobSubmission. The migration of interviewer feedback and notes requires a separate decision: either entered in the bulk import spreadsheet at import time or added manually post-import; Greenhouse's documentation states this is a customer-performed step.
Greenhouse
Job
Bullhorn ATS & CRM
JobOrder
1:1Greenhouse Job records map to Bullhorn JobOrder. We preserve job title, department, office location, open/closed status, opening date, and job description. Job posting URLs migrate as reference links rather than republished postings. Bullhorn JobOrder has a different stage model from Greenhouse: Greenhouse stages are application-stage steps while Bullhorn stages track placement workflow. We map Greenhouse stages to Bullhorn JobOrder status values and document any unaligned stage names for the customer's Bullhorn admin to configure post-migration.
Greenhouse
Scorecard
Bullhorn ATS & CRM
Custom Fields (Candidate or JobSubmission)
lossyGreenhouse scorecards are nested objects under Applications containing structured evaluator ratings and interview kit questions. Bullhorn has no native scorecard entity. We flatten each scorecard into named custom fields on the Candidate or JobSubmission record: one field per rating (e.g., technical_skills_rating, communication_rating) and one field for overall recommendation. We use Bullhorn's custom field API (customObject1s through customObject10s or custom fields on Candidate) based on the customer's Bullhorn edition. The interview kit structure (questions, rubric, scoring scale) is preserved as a JSON blob in a long-text custom field for admin reference. Scorecard migration requires Bullhorn Support to create any custom fields beyond standard Candidate fields.
Greenhouse
Offer
Bullhorn ATS & CRM
Custom Fields (JobSubmission)
lossyGreenhouse Offers store compensation packages attached to an Application: start date, salary, equity, and custom offer fields. Bullhorn has no native offer entity for the ATS tier; offers are tracked through custom fields or, in Bullhorn Growth/Enterprise, through custom objects. We migrate start date, base salary, equity values, and custom offer fields into Bullhorn custom fields on JobSubmission. Bullhorn Support must create these custom fields before migration. Offer status (pending, accepted, declined, retracted) migrates as a picklist field.
Greenhouse
User / Hiring Team
Bullhorn ATS & CRM
User
1:1Greenhouse Users (recruiters, hiring managers, admins) map to Bullhorn User records. We resolve owners by email match against the Bullhorn destination org. Users without a matching Bullhorn User go to a reconciliation queue for the customer's Bullhorn admin to provision. Role and permission mapping (Greenhouse permission levels to Bullhorn role-based security) is documented in the migration scope but not enforced programmatically.
Greenhouse
Custom Fields
Bullhorn ATS & CRM
Custom Fields / Custom Objects
lossyGreenhouse custom fields across all value types (short_text, long_text, yes_no, single_select, multi_select, currency, number, date, url, user_reference) migrate to Bullhorn equivalent field types. Bullhorn editions limit custom objects: ATS Growth = 0, Bullhorn ATS = 2 custom objects (55 fields each), Growth/Enterprise = 10 custom objects (55 fields each). We validate the customer's Bullhorn edition during scoping and route custom field mapping accordingly. Fields beyond the custom object limit require the customer to upgrade their Bullhorn edition before migration.
Greenhouse
Office and Department
Bullhorn ATS & CRM
Business Sector / Category
lossyGreenhouse's flat Office/Department structure (Core tier) maps to Bullhorn's Category or Business Sector taxonomy. Greenhouse's hierarchical tiered offices and departments (Plus/Pro) have no direct Bullhorn equivalent and require flattening into a single-level structure or a custom object hierarchy. We flag tiered structures during scoping and document the flattening strategy for the customer's Bullhorn admin to configure.
Greenhouse
Candidate Documents (Resumes, Attachments)
Bullhorn ATS & CRM
Attachment (Candidate)
1:1Resume files, cover letters, and portfolio attachments on Greenhouse Candidates and Applications migrate as Bullhorn Attachment records linked to the corresponding Candidate. We handle file type detection, preserve file names, and map binary blobs to Bullhorn's attachment storage. Bullhorn's file size limits apply (typically 25 MB per attachment); files exceeding the limit are flagged for the customer's admin to handle manually.
Greenhouse
Tag
Bullhorn ATS & CRM
Tag
1:1Tags on Greenhouse Candidates and Applications migrate as Bullhorn Tags. Greenhouse allows unlimited tags; Bullhorn supports tags on Candidate, ClientContact, ClientCorporation, JobOrder, Opportunity, and Placement. We preserve tag labels as-is and map them to Bullhorn's tag entity. Tagset groupings from Greenhouse are not natively supported in Bullhorn and are flattened into the candidate record as individual tags.
Greenhouse
Candidate Source Tracking
Bullhorn ATS & CRM
Source Custom Field (Candidate)
1:1Greenhouse tracks candidate source (referral, job board, direct apply) as a field on Application. We preserve source attribution as a custom field on Bullhorn Candidate. Sourcing campaign UTM data stored in Greenhouse custom fields migrates alongside as text fields. Source history (multiple sources per candidate over time) is preserved as a comma-separated or JSON-formatted string in the source field if Bullhorn's data model does not support multi-value source tracking.
Greenhouse
Pipeline Stage
Bullhorn ATS & CRM
JobOrder Status / Stage
lossyGreenhouse pipeline stages define the hiring workflow for each Job. Bullhorn JobOrder has a stage/status model but with different semantics. We map Greenhouse stage names to Bullhorn JobOrder status values and document any stage-specific scorecards or requirements for the Bullhorn admin to recreate in Bullhorn's workflow configuration. Custom stage names and stage-dependent scorecards are preserved as metadata in our migration scope document.
| Greenhouse | Bullhorn ATS & CRM | Compatibility | |
|---|---|---|---|
| Candidate | Candidate1:1 | Fully supported | |
| Application | JobSubmission1:1 | Fully supported | |
| Job | JobOrder1:1 | Fully supported | |
| Scorecard | Custom Fields (Candidate or JobSubmission)lossy | Fully supported | |
| Offer | Custom Fields (JobSubmission)lossy | Fully supported | |
| User / Hiring Team | User1:1 | Fully supported | |
| Custom Fields | Custom Fields / Custom Objectslossy | Mapping required | |
| Office and Department | Business Sector / Categorylossy | Fully supported | |
| Candidate Documents (Resumes, Attachments) | Attachment (Candidate)1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Candidate Source Tracking | Source Custom Field (Candidate)1:1 | Fully supported | |
| Pipeline Stage | JobOrder Status / Stagelossy | 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.
Greenhouse gotchas
Bulk candidate import requires Plus or Pro tier
Active candidate migration is entirely manual
Historical migration takes 4–6 weeks for Greenhouse to process
Developer sandbox and audit log are Pro-only
CRM event limits in Core tier constrain activity history
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 edition validation
We audit the source Greenhouse portal across tier (Core/Plus/Pro), active job count, candidate volume, application history depth, custom field count and value types, scorecard and interview kit configurations, office/department hierarchy, and offer field structure. We pair this with Bullhorn edition validation: confirming the customer's Bullhorn tier, reviewing existing custom object configuration (if any), and identifying which custom objects Bullhorn Support must create before migration. The discovery output is a written migration scope document with object counts, custom field inventory, and Bullhorn edition gap analysis.
Scorecard and custom field schema design
We design the destination schema in Bullhorn for all custom fields that cannot map to standard Bullhorn entities. This includes identifying the correct Bullhorn entity for each Greenhouse scorecard rating field (Candidate vs JobSubmission), mapping Greenhouse custom field value types to Bullhorn field types (single_select to picklist, multi_select to multi-select picklist, currency to currency field), and submitting the Bullhorn Custom Object Setup Spreadsheet to Bullhorn Support for any custom object creation. Bullhorn Support turnaround is typically 5-10 business days and must complete before any migration data writes to custom fields.
Sandbox migration and reconciliation
We run a full migration into a Bullhorn sandbox environment using production-like data volume. The customer's Bullhorn admin reconciles record counts (Candidates in, Applications in, Jobs in, Scorecards in), spot-checks 25-50 random candidate records against Greenhouse source, and validates scorecard field population in Bullhorn. Any custom field mapping corrections, stage mapping issues, or attachment failures are resolved in sandbox before production migration begins. Scorecard transformation is validated here by comparing Greenhouse scorecard ratings against Bullhorn custom field values.
Owner and user reconciliation
We extract every distinct Greenhouse User (recruiter, hiring manager) referenced on Candidate, Application, Job, and Offer records and match by email against Bullhorn User records. Users without a matching Bullhorn User are held in a reconciliation queue for the customer's Bullhorn admin to provision. Bullhorn role-based security is documented for each mapped user but is not enforced programmatically during migration; the customer's admin configures Bullhorn permissions post-migration.
Production migration in dependency order
We run production migration in record-dependency order: Bullhorn Users (validated, not created by migration), JobOrders (from Greenhouse Jobs), Candidates (with tags, custom fields, and source attribution), JobSubmissions (linked to Candidate and JobOrder with stage history), custom field data (scorecards, offers) on Candidate or JobSubmission, attachments (resumes, cover letters), and custom objects (after Bullhorn Support has confirmed setup). Each phase emits a row-count reconciliation report before the next phase begins. The Greenhouse historical migration runs concurrently; we coordinate the cutover date to capture any records created during the 4-6 week window.
Cutover, validation, and automation rebuild handoff
We freeze Greenhouse writes at cutover and run a final delta migration of any Greenhouse records created or modified during the migration window, including any active candidate records the customer imported via bulk import. We enable Bullhorn as the system of record and deliver the scorecard transformation documentation, workflow inventory, and automation rebuild guide to the customer's Bullhorn admin. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild Greenhouse interview kits, scorecard templates, or automations as Bullhorn configurations; those are documented for the customer's admin to rebuild.
Platform deep dives
Greenhouse
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 Greenhouse 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
Greenhouse: Not publicly documented with specific numbers; rate limits are applied separately for custom integrations and partner integrations with separate policies for each.
Data volume sensitivity
Greenhouse exposes a bulk API — large-volume migrations stream efficiently.
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 Greenhouse to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.
Walk through your Greenhouse 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 Greenhouse
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.