Skip to main content

Implementation Overview

Implementation Type: Kombo-based Integration
Note Format: HTML
Status: Production Ready

Configuration

PropertyValue
Provider Enumbullhorn
Note FormatHTML
Disposition ReasonsSupported
All Application StagesSupported
Passthrough URL/passthrough/bullhorn/default

Feature Summary

All core ATS features are supported through Kombo’s unified API with extensive custom implementations for Bullhorn-specific functionality.

Streaming Operations (All Supported)

  • Stream Jobs (Inherited)
  • Stream Applications (Inherited)
  • Stream Candidates (Inherited)
  • Move to Stage (Inherited)
  • Get/Use Rejection Reasons (Inherited)
  • Reject Applications (Single & Bulk) (Inherited)
  • Create Applications (Inherited)
  • Get All Stages (Inherited)
  • Get Job by ID (Inherited)
  • Get Enhanced Job (Custom Implementation)
  • Batch Job Operations (Supported)
  • Get Candidate by ID (Inherited)
  • Find by Details (Inherited)
  • Get Resume (Inherited)
  • Application Notes (Inherited)
  • Candidate Notes (Inherited)
  • Application Attachments (Inherited)
  • Candidate Attachments (Inherited)
  • Application Custom Fields (Inherited)
  • Candidate Custom Fields (Custom Implementation)
  • Job Custom Fields (Custom Implementation)

Updatable Candidate Fields

Bullhorn supports updating these standard candidate fields through AI extraction:
  • Desired Salary (salary) - Candidate’s salary expectations in USD
  • Current Pay Rate (hourlyRateLow) - Candidate’s current hourly rate
  • Current Company (companyName) - Name of candidate’s current employer
  • Date Available (dateAvailable) - When candidate can start work
  • Employment Preference (employmentPreference) - Direct Hire, Contract, or Contract To Hire
These fields can be automatically extracted from interview transcripts and updated in Bullhorn.

Bullhorn-Specific Features

Custom Field Querying

When fetching jobs, we automatically query 64 custom fields from Bullhorn:
  • Custom Date Fields: customDate1 through customDate3 (3 fields)
  • Custom Float Fields: customFloat1 through customFloat3 (3 fields)
  • Custom Integer Fields: customInt1 through customInt8 (8 fields)
  • Custom Text Fields: customText1 through customText40 (40 fields)
  • Custom Text Block Fields: customTextBlock1 through customTextBlock5 (5 fields)
This ensures we capture all possible custom data configured in any Bullhorn instance.

Note Action Types

We use custom action types when adding notes to candidates and applications. Bullhorn restricts action names to 30 characters:
  • TZ - Call Summary - General call summaries
  • TZ - Call Summary - Passed - Successful screenings
  • TZ - Call Summary - Failed - Failed screenings
  • TZ - Inbound SMS - Incoming text messages
  • TZ - Outbound SMS - Outgoing text messages
  • TZ - Inbound Email - Incoming emails
  • TZ - Outbound Email - Outgoing emails
  • Tenzo:Not Interested - Candidate declined
  • TZ - Note - Generic notes

Placements

Custom implementation for Bullhorn placement records:
  • Stream placements with pagination
  • Track placement dates (dateAdded, dateBegin)
  • Parse placement status and candidate/job associations
  • Filter by timestamp for incremental syncing

Tearsheets (Hotlists)

Support for Bullhorn tearsheet functionality:
  • Stream tearsheets with pagination
  • Handle large tearsheets (500+ candidates/jobs per tearsheet)
  • Retrieve candidate and job IDs from tearsheets
  • Filter private/deleted tearsheets automatically

Job Creation

Custom implementation for creating jobs in Bullhorn:
  • Create JobOrder entities via passthrough API
  • Support for custom field values on job creation
  • Returns Bullhorn job ID for immediate use

Implementation Notes

Custom Data Models

  • BullhornJob: Extended job model with custom field values (includes all 64 custom fields)
  • BullhornCandidate: Candidate model with category, owner, status metadata
  • BullhornPlacement: Placement records with submission tracking, dates, and status
  • BullhornTearsheet: Tearsheet linking candidates to jobs with pagination support

Field Type Mappings

Bullhorn field types are mapped to generic types via BULLHORN_FIELD_MAPPINGS:
  • BigDecimalfloat
  • Integerinteger
  • Stringstring
  • Timestampdate
  • Booleanboolean

Candidate Field Updates

We can update both standard fields and custom fields on candidates:
  • Standard fields: Updated via POST /entity/Candidate/{id} with automatic type conversion
  • Custom fields: Updated via custom field update endpoints with schema validation

Job Caching

Job data is cached in-memory to avoid repeated API calls when processing multiple applications for the same job. Cache can be cleared with clear_caches() method.

Pagination Limits

Bullhorn has a maximum record request count of 500 records per request (BULLHORN_RECORD_REQUEST_COUNT_MAX). All streaming operations handle this automatically with proper pagination.
  • Implementation: server/ats/bullhorn_ats_client.py
  • Field Mappings: server/ats/field_type_mapper.py (BULLHORN_FIELD_MAPPINGS)
  • Base Class: server/ats/base_kombo_ats_client.py

See Also