> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kombo.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Bullhorn ATS Integration

> Bullhorn connector for Kombo's ATS API

The Bullhorn ATS integration allows you to sync ATS data between Bullhorn and your application through Kombo's unified API. The tool slug for this connector is `bullhorn`.

## Guides and Resources

<CardGroup cols={2}>
  <Card title="Connection Setup Guide" icon="link" href="https://help.kombo.dev/hc/en-us/articles/17847586001297-How-do-I-link-my-Bullhorn-account-">
    Step-by-step instructions to connect your Bullhorn account to Kombo.
  </Card>

  <Card title="View Candidate Sources" icon="eye" href="https://help.kombo.dev/hc/en-us/articles/22537230486801-Bullhorn-How-to-view-a-candidates-source">
    How to view and manage candidate sources in Bullhorn.
  </Card>

  <Card title="How to setup screening questions in Bullhorn" icon="book" href="https://help.kombo.dev/hc/en-us/articles/24274854500753-Bullhorn-How-to-setup-a-custom-object-as-screening-questions">
    Additional documentation and guides for Bullhorn.
  </Card>
</CardGroup>

## Supported Features & Coverage

<Tabs>
  <Tab title="Models">
    <Accordion title="Users">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | first\_name         |       |
      | last\_name          |       |
      | email               |       |
      | remote\_data        |       |
    </Accordion>

    <Accordion title="Jobs">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | name                |       |
      | description         |       |
      | weekly\_hours       |       |
      | employment\_type    |       |
      | status              |       |
      | visibility          |       |
      | category            |       |
      | experience\_level   |       |
      | salary\_amount      |       |
      | salary\_period      |       |
      | location            |       |
      | custom\_fields      |       |
      | integration\_fields |       |
      | closed\_at          |       |
      | remote\_created\_at |       |
      | remote\_updated\_at |       |
      | remote\_data        |       |
    </Accordion>

    <Accordion title="Candidates">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | first\_name         |       |
      | last\_name          |       |
      | company             |       |
      | title               |       |
      | source              |       |
      | phone\_numbers      |       |
      | email\_addresses    |       |
      | social\_media       |       |
      | location            |       |
      | custom\_fields      |       |
      | integration\_fields |       |
      | remote\_created\_at |       |
      | remote\_updated\_at |       |
      | remote\_data        |       |
    </Accordion>

    <Accordion title="Application Stages">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | name                |       |
    </Accordion>

    <Accordion title="Applications">
      | Field                   | Notes |
      | ----------------------- | ----- |
      | id                      |       |
      | remote\_id              |       |
      | changed\_at             |       |
      | remote\_deleted\_at     |       |
      | outcome                 |       |
      | rejection\_reason\_name |       |
      | current\_stage\_id      |       |
      | job\_id                 |       |
      | candidate\_id           |       |
      | custom\_fields          |       |
      | integration\_fields     |       |
      | remote\_created\_at     |       |
      | remote\_updated\_at     |       |
      | remote\_data            |       |
    </Accordion>

    <Accordion title="Screening questions">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | title               |       |
      | description         |       |
      | format              |       |
    </Accordion>

    <Accordion title="Rejection reasons">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | name                |       |
    </Accordion>

    <Accordion title="Roles">
      | Field               | Notes |
      | ------------------- | ----- |
      | id                  |       |
      | remote\_id          |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
      | remote\_label       |       |
      | scope               |       |
      | unified\_type       |       |
    </Accordion>

    <Accordion title="Job-specific application stages">
      | Field               | Notes |
      | ------------------- | ----- |
      | index               |       |
      | job\_id             |       |
      | stage\_id           |       |
      | id                  |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
    </Accordion>

    <Accordion title="Job-specific screening questions">
      | Field                      | Notes |
      | -------------------------- | ----- |
      | index                      |       |
      | required                   |       |
      | precondition\_question\_id |       |
      | precondition\_options      |       |
      | job\_id                    |       |
      | question\_id               |       |
      | id                         |       |
      | changed\_at                |       |
      | remote\_deleted\_at        |       |
    </Accordion>

    <Accordion title="Job user role assignments">
      <Note>
        Bullhorn exposes two user relations per job.

        * **clientContact** (shown as "Contact" in the UI) maps to `HIRING_MANAGER`
        * **owner** (shown as "Consultant" in the UI) maps to `RECRUITER`
      </Note>

      | Field               | Notes |
      | ------------------- | ----- |
      | job\_user\_id       |       |
      | role\_id            |       |
      | id                  |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
    </Accordion>

    <Accordion title="Job hiring team members">
      | Field               | Notes |
      | ------------------- | ----- |
      | roles               |       |
      | job\_id             |       |
      | user\_id            |       |
      | id                  |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
    </Accordion>

    <Accordion title="User roles">
      <Note>
        Bullhorn assigns each CorporateUser a `userType` object with an id and name. ClientContact users are external contacts and have no system role synced.

        * `Administrator` maps to unified type `ADMIN`
        * All other userType names sync without a unified type.
      </Note>

      | Field               | Notes |
      | ------------------- | ----- |
      | user\_id            |       |
      | role\_id            |       |
      | id                  |       |
      | changed\_at         |       |
      | remote\_deleted\_at |       |
    </Accordion>
  </Tab>

  <Tab title="Actions">
    <Accordion title="Create candidate">
      <Note>
        Screening question answers are stored on the candidate, not the submission. Therefore, if a candidate applies to multiple jobs it will not be apparent in the UI which screening question answer set belongs to which submission.
      </Note>

      | Input Field                               | Notes |
      | ----------------------------------------- | ----- |
      | candidate.first\_name                     |       |
      | candidate.last\_name                      |       |
      | candidate.email\_address                  |       |
      | candidate.company                         |       |
      | candidate.title                           |       |
      | candidate.phone\_number                   |       |
      | candidate.location.city                   |       |
      | candidate.location.country                |       |
      | candidate.location.zip\_code              |       |
      | candidate.gender                          |       |
      | candidate.availability\_date              |       |
      | candidate.salary\_expectations.period     |       |
      | candidate.salary\_expectations.amount     |       |
      | candidate.social\_links.url               |       |
      | application.job\_id                       |       |
      | application.stage\_id                     |       |
      | screening\_question\_answers.question\_id |       |
      | screening\_question\_answers.answer       |       |
      | attachments.name                          |       |
      | attachments.content\_type                 |       |
      | attachments.data\_url                     |       |
      | attachments.data                          |       |
      | attachments.type                          |       |
      | source.name                               |       |
      | source.unified\_key                       |       |
      | source.id                                 |       |
      | sourced\_by.user\_id                      |       |
    </Accordion>

    <Accordion title="Create application">
      <Note>
        Screening question answers are stored on the candidate, not the submission. Therefore, if a candidate applies to multiple jobs it will not be apparent in the UI which screening question answer set belongs to which submission.
      </Note>

      | Input Field                               | Notes |
      | ----------------------------------------- | ----- |
      | candidate.first\_name                     |       |
      | candidate.last\_name                      |       |
      | candidate.email\_address                  |       |
      | candidate.company                         |       |
      | candidate.title                           |       |
      | candidate.phone\_number                   |       |
      | candidate.location.city                   |       |
      | candidate.location.country                |       |
      | candidate.location.zip\_code              |       |
      | candidate.gender                          |       |
      | candidate.availability\_date              |       |
      | candidate.salary\_expectations.period     |       |
      | candidate.salary\_expectations.amount     |       |
      | candidate.social\_links.url               |       |
      | application.job\_id                       |       |
      | application.stage\_id                     |       |
      | screening\_question\_answers.question\_id |       |
      | screening\_question\_answers.answer       |       |
      | attachments.name                          |       |
      | attachments.content\_type                 |       |
      | attachments.data\_url                     |       |
      | attachments.data                          |       |
      | attachments.type                          |       |
      | source.name                               |       |
      | source.unified\_key                       |       |
      | source.id                                 |       |
      | sourced\_by.user\_id                      |       |
    </Accordion>

    <Accordion title="Add attachment to application">
      <Note>
        This action will fall back to the "Add attachment to candidate" action. Therefore, there could be cases where the attachment may not be added to the application but rather to the candidate.
      </Note>

      | Input Field              | Notes |
      | ------------------------ | ----- |
      | application\_id          |       |
      | attachment.name          |       |
      | attachment.content\_type |       |
      | attachment.data\_url     |       |
      | attachment.data          |       |
      | attachment.type          |       |
    </Accordion>

    <Accordion title="Move application to stage">
      | Input Field     | Notes |
      | --------------- | ----- |
      | application\_id |       |
      | stage\_id       |       |
    </Accordion>

    <Accordion title="Reject application">
      | Input Field           | Notes |
      | --------------------- | ----- |
      | application\_id       |       |
      | rejection\_reason\_id |       |
      | note                  |       |
    </Accordion>

    <Accordion title="Add result link to application">
      | Input Field                         | Notes |
      | ----------------------------------- | ----- |
      | application\_id                     |       |
      | label                               |       |
      | url                                 |       |
      | details.custom\_field\_name\_prefix |       |
      | details.attributes.key              |       |
      | details.attributes.value            |       |
    </Accordion>

    <Accordion title="Add note to application">
      | Input Field     | Notes |
      | --------------- | ----- |
      | application\_id |       |
      | content         |       |
    </Accordion>

    <Accordion title="Get application attachments">
      <Note>
        In Bullhorn an applications may be deleted when a position is filled. Consider calling [get candidate attachments](/ats/v1/get-candidates-candidate-id-attachments) instead, because it will return attachments related to a candidate, including all attachments from all of their applications.
      </Note>

      | Input Field     | Notes |
      | --------------- | ----- |
      | application\_id |       |
    </Accordion>

    <Accordion title="Get candidate attachments">
      | Input Field   | Notes |
      | ------------- | ----- |
      | candidate\_id |       |
    </Accordion>

    <Accordion title="Add attachment to candidate">
      | Input Field              | Notes |
      | ------------------------ | ----- |
      | candidate\_id            |       |
      | attachment.name          |       |
      | attachment.content\_type |       |
      | attachment.data\_url     |       |
      | attachment.data          |       |
      | attachment.type          |       |
    </Accordion>

    <Accordion title="Add result link to candidate">
      | Input Field                         | Notes |
      | ----------------------------------- | ----- |
      | candidate\_id                       |       |
      | label                               |       |
      | url                                 |       |
      | details.custom\_field\_name\_prefix |       |
      | details.attributes.key              |       |
      | details.attributes.value            |       |
    </Accordion>
  </Tab>

  <Tab title="Features">
    | Feature                        | Notes                                                                                                                                                  |
    | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | Source Writing                 |                                                                                                                                                        |
    | Sync Only Created Applications |                                                                                                                                                        |
    | Connection Guide               |                                                                                                                                                        |
    | Prerequisites                  |                                                                                                                                                        |
    | Create credentials             |                                                                                                                                                        |
    | Candidate Cutoff Filtering     |                                                                                                                                                        |
    | Roles                          |                                                                                                                                                        |
    | System roles (e.g. Admin)      | Bullhorn assigns each CorporateUser a `userType` object with an id and name. ClientContact users are external contacts and have no system role synced. |

    * `Administrator` maps to unified type `ADMIN`
    * All other userType names sync without a unified type. |
      \|   Job roles (e.g. Hiring Manager) | Bullhorn exposes two user relations per job.
    * **clientContact** (shown as "Contact" in the UI) maps to `HIRING_MANAGER`
    * **owner** (shown as "Consultant" in the UI) maps to `RECRUITER` |
      \| OAuth |  |
      \| API Passthrough |  |
      \| Delta Syncs |  |
  </Tab>
</Tabs>

## Integration Variants

**Current connector:** Choose this variant to use OAuth-based authentication (recommended)

For **Bullhorn**, we also offer the following other connector variants:

<CardGroup cols={2}>
  <Card title="Bullhorn Login" icon="https://storage.googleapis.com/kombo-assets/integrations/bullhornlogin/icon.svg" href="/ats/connectors/bullhornlogin">
    Legacy login-based variant. This variant is deprecated and merged into the regular Bullhorn integration
  </Card>

  <Card title="Bullhorn Assessment" icon="https://storage.googleapis.com/kombo-assets/integrations/bullhorn/icon.svg" href="/assessment/connectors/bullhorn">
    Bullhorn for the Assessment category
  </Card>
</CardGroup>

<Note>You can only use one variant at a time.</Note>
