HRMS migration

Migrate from Occupop to Bullhorn ATS & CRM

Field-level mapping, validation, and rollback between Occupop and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.

Occupop logo

Occupop

Source

Bullhorn ATS & CRM

Destination

Bullhorn ATS & CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Occupop and Bullhorn ATS & CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Occupop to Bullhorn is a shift from an SMB-focused ATS with unlimited user seats and 1-click job distribution to an enterprise staffing platform with a CRM layer, configurable pipeline stages, and a REST API built for high-volume data movement. Occupop organizes hiring around Jobs, Candidates, and Workflow Stages; Bullhorn adds a separate Lead object, Client Corporations, and Placements. We resolve the Occupop Workflow Stage sequence by mapping it to Bullhorn JobOrder custom fields and Note records, and we preserve AI screening scores from Occupop as a custom numeric field on the Candidate. Job board distribution history (Indeed, LinkedIn, Reed, and others) is exported as a structured list per Job and handed off as a CSV so the customer's admin can re-create distributions in Bullhorn. Occupop's offer and onboarding data is excluded from migration scope because it now lives in Cezanne HR's broader suite post-acquisition. Bullhorn's Custom Object limits vary by edition (2 for Bullhorn ATS, 10 for Front Office Growth/Enterprise), which constrains how many Occupop custom field groups can land as native Bullhorn Custom Objects versus structured Note fields.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Occupop logo

Occupop

What's pushing teams away

  • Advanced reporting and deep analytics lag behind enterprise HCM platforms, frustrating People teams that need custom dashboards or cross-pipeline trend analysis.
  • Occupop's feature set narrows as hiring needs scale beyond mid-market volume, pushing fast-growing companies toward platforms like Greenhouse, Lever, or Workday ATS.
  • Integration catalogue is smaller than competitors — teams with established HRIS, payroll, or background-check tools may face manual re-entry or custom integration work.
  • The acquisition by Cezanne HR (March 2025) introduces uncertainty about roadmap direction, pricing continuity, and long-term product independence, prompting some customers to evaluate alternatives proactively.

Choosing

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

What's pulling them in

  • Agencies choose Bullhorn because it combines ATS and CRM in one platform, eliminating the need to switch between separate tools for candidate management and client relationship tracking.
  • The resume parser extracts contact details, work history, and skills into structured, searchable candidate profiles automatically without manual data entry, reportedly driving 24% more placements per recruiter.
  • Bullhorn's placement and split-billing model natively supports contract staffing workflows, handling start/end dates, overtime rules, and multi-party pay/charge rates in a single record.
  • The platform offers extensive third-party integrations through its Recruitment Cloud Marketplace, connecting with back-office, onboarding, and payroll systems used by staffing agencies.
  • 72% of Bullhorn customers are teams with fewer than 10 users, and Bullhorn's implementation team handles setup and data migration for small agencies going live within weeks.

Object mapping

How Occupop objects map to Bullhorn ATS & CRM

Each row shows how a Occupop 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.

Occupop

Candidate

maps to

Bullhorn ATS & CRM

Candidate

1:1
Fully supported

Occupop Candidate records map directly to Bullhorn Candidate. We extract name, email, phone, CV file reference, stage history, AI screening score, and any custom field key-value pairs. The Occupop custom field schema is tenant-specific with no fixed definition; we inspect the export during scoping, build a per-field map, and land values as Bullhorn custom fields on the Candidate record. Bullhorn's entity-level custom field limits apply: Bullhorn ATS allows 2 Custom Objects, ATS Growth allows none, and Front Office Growth/Enterprise allow 10. We pre-create the required Bullhorn Custom Objects (with Bullhorn Support for the initial setup) before migration and fall back to structured Note records when Custom Object capacity is exhausted.

Occupop

Job (Position)

maps to

Bullhorn ATS & CRM

JobOrder

1:1
Fully supported

Occupop Jobs map to Bullhorn JobOrder. We export job title, description, department, location, status (active/closed), and original Occupop job ID preserved as a custom field. The Bullhorn jobPublished flag is set based on the Occupop active/closed state. JobOrder is created before the Candidate import so that the Candidate-to-Job reference (candidateSubmissions in Bullhorn) is satisfied at import time.

Occupop

Workflow Stage

maps to

Bullhorn ATS & CRM

JobOrder Custom Fields + Note

lossy
Fully supported

Occupop tracks an ordered sequence of stages per Job (Applied, Screening, Interview, Offer, etc.). Bullhorn JobOrder does not have a native stage sequence object. We map each Occupop stage name to a Bullhorn custom field on JobOrder and preserve the full stage list as a structured Note attached to the JobOrder. Interview stage definitions and stage-specific feedback are stored as separate Note records with a category tag so the customer's Bullhorn admin can re-create the pipeline view using Bullhorn's built-in pipeline kanban.

Occupop

User (Hiring Team Member)

maps to

Bullhorn ATS & CRM

User

1:1
Fully supported

Occupop Users (Admin, Hiring Manager, Recruiter, Viewer roles) map to Bullhorn User records by email match. We export all users with their role assignments and flag any Occupop role that has no direct Bullhorn equivalent. Bullhorn's role model (Admin, Standard, Limited) is applied as a mapping during scoping, and the customer's Bullhorn admin confirms the final role assignment before migration.

Occupop

CV and Attachment

maps to

Bullhorn ATS & CRM

Candidate Document (ContentDocument)

1:1
Fully supported

CV files are exported as raw binary files from Occupop and re-attached to the Bullhorn Candidate record via Bullhorn's ContentDocument and ContentDocumentLink objects. We preserve the original filename and the linkedCandidate relationship. Bullhorn's resume parsing is triggered post-import if the Bullhorn edition includes that feature.

Occupop

Interview Feedback and Notes

maps to

Bullhorn ATS & CRM

Note + Task

1:1
Mapping required

Occupop interview notes and scorecard responses are stored per Candidate per stage. Bullhorn does not have a native interview-feedback object; we export the full text and scores and land them as Note records with a category tag (e.g., Interview Feedback) linked to the Candidate. If the customer requires a structured scorecard format, we use Bullhorn Custom Objects with a Bullhorn Support ticket to pre-create the schema.

Occupop

Score and Ranking Data

maps to

Bullhorn ATS & CRM

Candidate Custom Numeric Field

1:1
Fully supported

Occupop's AI screening score (0-100 or similar scale depending on tenant configuration) and the Candidate's rank within the Job's candidate pool are exported as numeric fields. We create a custom numeric field on the Bullhorn Candidate object (occupop_ai_score__c) and populate it during import. The rank is stored as occupop_rank_in_job__c. These fields are available for Bullhorn reporting and sorting post-migration.

Occupop

Job Posting Distribution History

maps to

Bullhorn ATS & CRM

Note (structured list, no native equivalent)

1:1
Mapping required

Occupop tracks which job boards a Job was distributed to (Indeed, LinkedIn, Reed, Glassdoor, niche boards) and the posting date. Bullhorn has no standard field for board-distribution history. We export this as a structured CSV per Job (job_title, board, posting_date, status) and attach it as a Note to the Bullhorn JobOrder. The customer's Bullhorn admin uses this inventory to re-create distributions through Bullhorn's job board integrations or manually post to the relevant boards post-migration.

Occupop

Custom Fields

maps to

Bullhorn ATS & CRM

Custom Fields + Custom Objects

lossy
Mapping required

Occupop Custom Fields are arbitrary tenant-defined key-value pairs on Candidate records. During scoping we inspect the source tenant's full custom field definitions, classify each as a scalar value (maps to a Bullhorn custom field) or structured data (maps to a Bull Object), and build a per-field type map. Bullhorn entity-level custom field limits (2-10 Custom Objects depending on edition) are verified with the customer before migration. Values that cannot fit within Bullhorn's Custom Object capacity are stored as structured text in Note records with a field-label prefix.

Occupop

Lead (from Bullhorn side)

maps to

Bullhorn ATS & CRM

Lead

lossy
Fully supported

Bullhorn includes a separate Lead object for unqualified prospects. Occupop has no Lead concept—all applicants are Candidates. We do not create Bullhorn Lead records from the Occupop migration unless the customer specifically requests it as part of their Bullhorn onboarding process. If Lead creation is requested, unqualified Candidates (e.g., applicants who never reached an interview stage) are segmented into Lead records with the original Occupop source tagged in a custom field.

Occupop

Client Corporation (Bullhorn CRM layer)

maps to

Bullhorn ATS & CRM

ClientCorporation

1:1
Fully supported

Bullhorn's CRM layer includes ClientCorporation records that represent staffing firms' client companies. Occupop does not have a client CRM object. If the customer uses Bullhorn's CRM features, we assist in scoping whether ClientCorporation records need to be created (as new records in Bullhorn, not migrated from Occupop) or whether the staffing firm's client relationships are tracked differently.

Occupop

Placement

maps to

Bullhorn ATS & CRM

Placement

1:1
Fully supported

Bullhorn Placement records track hired candidates and are a core object in the staffing use case. Occupop does not have a Placement object (offer and onboarding data moved to Cezanne HR post-acquisition). Placement records are not migrated from Occupop. The customer creates Bullhorn Placement records as they make placements post-migration, using the migrated Candidate and JobOrder records as the basis.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Occupop logo

Occupop gotchas

Medium

Cezanne HR acquisition may change data residency and contract terms

Medium

Offer and onboarding data lives outside Occupop's ATS scope

Low

Custom Fields schema varies by tenant and may require mapping

Low

Job posting board-distribution history does not map to standard ATS fields

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM gotchas

High

ATS Growth edition has no API access

High

Attachments excluded from CSV bulk exports

Medium

Custom Object limits vary sharply by edition

Medium

Opportunity pipeline stages are recruitment-specific

Low

Resume parse quality varies by document format

Pair-specific challenges

  • Bullhorn Custom Objects require a support ticket to create

    Bullhorn Custom Objects (the entity that can hold up to 55 custom fields per object) cannot be self-provisioned by the admin—Bullhorn Support must create them initially. Bullhorn ATS is limited to 2 Custom Objects, ATS Growth has none, and Front Office Growth/Enterprise allow 10. During scoping we identify every Occupop custom field group that needs a Bullhorn Custom Object, confirm the customer's Bullhorn edition, submit a Bullhorn Support ticket on the customer's behalf, and wait for Custom Object creation before beginning data import. This adds 3-5 business days to the timeline and must happen before any import run touches the custom field data.

  • Occupop's Cezanne HR acquisition excludes offer and onboarding data

    Occupop was acquired by Cezanne HR in March 2025. Offer letters, employment contracts, and onboarding workflow state now live in Cezanne HR's broader suite and are not accessible via Occupop's ATS export. Bullhorn Onboarding (formerly Able) is available as a separate module for managing offer and onboarding in Bullhorn, but it is not populated from Occupop. We explicitly exclude these from migration scope and direct customers to export offer and onboarding data directly from Cezanne HR before initiating migration. This is a pair-specific data gap, not a generic data-loss risk.

  • Bullhorn's Lead-Contact-Candidate model differs from Occupop's flat Candidate model

    Occupop treats all applicants as Candidates within a Job pipeline. Bullhorn separates unqualified prospects (Lead), qualified candidates (Candidate), and placed hires (Contact + Placement). We do not auto-convert Occupop Candidates to Bullhorn Leads during migration unless the customer explicitly requests a Lead strategy. The mapping is designed around Bullhorn Candidate as the primary record, and any Lead creation request adds a segmentation step during scoping. Bullhorn's Lead and Contact Convert workflow is documented for the customer's admin to apply post-migration as needed.

  • Job board distribution history has no Bullhorn native equivalent

    Occupop tracks every job board a Job was distributed to (Indeed, LinkedIn, Reed, Glassdoor, niche boards) with posting dates. Bullhorn has no standard field or object that captures board-distribution history. We export this as a structured per-Job CSV and attach it as a Note to the Bullhorn JobOrder. The customer's Bullhorn admin must re-create distributions through Bullhorn's job board integrations or manually after migration. We flag this as a manual-rebuild item and deliver the distribution inventory as part of the migration handoff package.

  • Bullhorn field character limits and type constraints require pre-import validation

    Bullhorn custom fields have edit-type constraints (e.g., some fields are limited to 100 characters, others support rich text). Occupop custom fields have no such constraints. We analyze Occupop field lengths during scoping and flag any value that exceeds Bullhorn's field-type limits. We either truncate at the Bullhorn maximum, split long text into multiple fields, or fall back to a Note record with a field-label prefix. This validation step prevents silent truncation during import that could corrupt data quality.

Migration approach

Six steps for a successful Occupop to Bullhorn ATS & CRM data migration

  1. Discovery and Bullhorn edition selection

    We audit the source Occupop tenant across custom field definitions, Job count, Candidate volume, stage sequences per Job, User count with role assignments, CV and attachment file counts, interview feedback volume, and any AI screening score data. We pair this with a Bullhorn edition assessment: Bullhorn ATS ($99/user/mo base) covers basic candidate and job management; Bullhorn Front Office Growth ($199/user/mo) unlocks up to 10 Custom Objects and API access; Enterprise adds advanced reporting and unlimited storage. The discovery output is a written migration scope, a Custom Object requirement list for Bullhorn Support tickets, and a Bullhorn edition recommendation.

  2. Custom Object creation via Bullhorn Support

    We submit Bullhorn Support tickets to create any Custom Objects required for Occupop custom field groups that cannot fit into Bullhorn's entity-level custom fields. Bullhorn Support must provision Custom Objects initially; they cannot be self-created by the admin. We track ticket status, confirm Custom Object names and field structures with the customer, and validate that the Bullhorn edition supports the required count before proceeding to the export phase.

  3. Occupop data export and field mapping

    We extract all Occupop records via the platform's export capabilities, including Candidates with custom fields, Jobs with stage sequences, Users with roles, CV file references, interview feedback, AI screening scores, and board distribution history. We build a field mapping table for each object class, classifying Occupop custom field key-value pairs as scalar (Bullhorn custom field), structured (Bullhorn Custom Object), or overflow (Note with prefix). Bullhorn field character limits and type constraints are validated against the export data during this phase.

  4. 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, Jobs in, Users in, Notes in), spot-checks 25-50 random Candidate records against the Occupop source for field-level accuracy, confirms custom field values are populated, and signs off the mapping before production migration begins. Any Custom Object schema corrections and field mapping adjustments happen here, not in production.

  5. Production migration in dependency order

    We run production migration in record-dependency order: JobOrder (Jobs) first, then Candidate records with the Occupop AI score and rank populated in Bullhorn custom fields, then User records with role assignments, then CV files attached via ContentDocumentLink, then interview feedback as Note records, then board distribution history as structured Notes. Each phase emits a row-count reconciliation report before the next phase begins. Bullhorn's REST API is used with rate-limit handling and batch chunking for large candidate sets.

  6. Cutover, validation, and manual-rebuild handoff

    We freeze Occupop 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 the board-distribution inventory CSV, the active stage-sequence mapping table, and the Bullhorn Workflow rebuild inventory (for any pipeline automations the customer wants to document for their admin). We support a one-week hypercare window for reconciliation issues. We do not rebuild Bullhorn workflows, job board integrations, or Bullhorn Onboarding configurations inside the migration scope; these are separate engagements or admin tasks.

Platform deep dives

Context on both ends of the pair

Occupop logo

Occupop

Source

Strengths

  • Unlimited user seats regardless of plan, eliminating per-seat cost surprises for growing hiring teams.
  • AI screening scores and ranks candidates against job descriptions, reducing manual CV triage for high-volume roles.
  • 1-click multi-channel job posting consolidates distribution to Indeed, LinkedIn, Glassdoor, and niche boards in a single action.
  • Clean, centralized dashboard surfaces every step of each open role's pipeline without switching views.
  • 2-week free trial with no credit card lowers evaluation friction for SMB buyers.

Weaknesses

  • Reporting and analytics lack the depth needed by People teams accustomed to custom BI dashboards or cross-pipeline trend views.
  • Smaller integration catalogue than enterprise competitors; customers on niche HRIS or background-check tools may need custom workarounds.
  • Advanced features (custom workflows, advanced analytics, some API capabilities) are gated behind higher tiers or future roadmap items.
  • Post-acquisition roadmap uncertainty may concern customers who need long-term product stability guarantees.
Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

Destination

Strengths

  • Unified ATS and CRM on one platform purpose-built for staffing agencies, eliminating separate tools for candidates and clients.
  • Automated resume parsing extracts structured candidate data—contact details, work history, skills—into searchable profiles instantly.
  • Native placement and split-billing model handles contract staffing workflows including start/end dates and overtime rules.
  • Bullhorn Recruitment Cloud Marketplace offers 100+ pre-validated third-party integrations spanning the full recruiting lifecycle.
  • 24/7 global support coverage from 350+ support staff with dedicated account management included at all tiers.

Weaknesses

  • Widely regarded as old and bloated with an unintuitive interface and steep learning curve for new recruiters.
  • Slow page loads and performance lag cited in over 200 verified G2 reviews during high-volume recruiting periods.
  • Pricing is opaque—custom-negotiated per organization with significant upfront implementation fees that vary by deal.
  • ATS Growth edition excludes API access entirely, preventing automated data export without upgrading first.

Complexity grading

How hard is this migration?

Standard HRMS migration. 1 of 7 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Occupop and Bullhorn ATS & CRM.

  • Object compatibility

    B

    1 of 7 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Occupop: Not publicly documented.

  • Data volume sensitivity

    B

    Occupop doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Occupop to Bullhorn ATS & CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Occupop to Bullhorn ATS & CRM data migrations

Answers to the questions buyers ask most during Occupop to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Occupop to Bullhorn ATS & CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between two and four weeks for accounts under 10,000 Candidates and 500 Jobs with straightforward custom field mapping and no Custom Object creation backlog. Bullhorn edition upgrades (requiring Custom Object provisioning via Bullhorn Support) and large interview feedback histories extend the timeline to six to ten weeks. Bullhorn's own guidance is two weeks for small staffing firms and two to six weeks for larger agencies, which aligns with the data migration portion of our scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Occupop.
Land in Bullhorn ATS & CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day