---
title: "Bullhorn API"
description: "Bullhorn API: the OAuth REST API into one staffing agency's ATS and CRM, the agency job boards where postings are public, and one call for the same roles."
canonical: https://jobspipe.dev/sources/bullhorn
---

# Bullhorn API

The Bullhorn REST API is an OAuth-authenticated API into one staffing agency's candidates, contacts, job orders and placements, usually through the Marketplace partner program, not a public feed across agencies; the agencies' own job boards are public. JobsPipe does not collect Bullhorn; the same employers' openings reach one search endpoint through the boards JobsPipe does collect, in one record shape across 30+ sources.

> Bullhorn has no public cross-employer jobs API, and JobsPipe does not collect Bullhorn. This page explains what Bullhorn exposes and how to reach the same employers through the boards JobsPipe does collect.

**Canonical URL:** https://jobspipe.dev/sources/bullhorn

## Coverage

JobsPipe does not collect Bullhorn. This page explains what Bullhorn exposes publicly and how to reach the same postings where they are also published on a board JobsPipe does collect (LinkedIn, Indeed, Y Combinator, Naukri, Workday, Greenhouse, Workable, SmartRecruiters, Ashby, Lever, Paylocity).

## Why Bullhorn jobs data is confusing

The Bullhorn REST API is an OAuth-authenticated API into one staffing agency's ATS and CRM: candidates, contacts, job orders, placements. Access needs the agency's credentials and usually the Bullhorn Marketplace partner program. It is not a public feed of postings across agencies.

Bullhorn powers the public job boards of many staffing agencies through its career portal and partner job-board products. Each board is public HTML per agency; there is no endpoint that enumerates agencies or merges their postings. JobsPipe does not collect Bullhorn. Agencies and firms that run Bullhorn distribute their roles to LinkedIn and Indeed, which JobsPipe collects. Filter POST /v1/jobs/search by company_name_partial_match_or or job_title_or to reach them, and read sources[0].provider to see which board each record came from.

## Workarounds

### Use the Bullhorn REST API

Reads one agency's data with their OAuth credentials. Not a path across agencies.

### Scrape individual agency job boards

Possible per agency you already know. Public HTML, no directory.

### What JobsPipe offers instead

JobsPipe does not collect Bullhorn. Search the same employers by name across the boards JobsPipe does collect (LinkedIn, Indeed, Workday, Greenhouse, Workable, SmartRecruiters, Ashby, Lever and Paylocity); sources[0].provider on each record names the board it came from.

## Fields available on every record

- `id`
- `job_title`
- `company`
- `company_domain`
- `url`
- `date_posted`
- `discovered_at`
- `last_seen_at`
- `verified_at`
- `status`
- `closed_at`
- `closed_reason`
- `ghost_score`
- `seniority`
- `cities`
- `state_code`
- `min_annual_salary_usd`
- `max_annual_salary_usd`
- `technology_slugs`
- `keyword_slugs`
- `esco_skills`
- `sources`

## FAQ

### Do I need the Bullhorn Marketplace partner program to use the REST API?

Usually, yes. The Bullhorn REST API is OAuth-authenticated and needs the staffing agency's own credentials, and access typically runs through the Bullhorn Marketplace partner program. Even with approval, the credentials reach one agency's ATS and CRM, so the API is not a public feed of postings.

### Can the Bullhorn API read job orders from other staffing agencies?

No. The REST API reads one agency's candidates, contacts, job orders and placements with that agency's OAuth credentials. There is no endpoint that enumerates Bullhorn agencies or merges their postings, so data across agencies would need separate credentials from each one.

### How do I find staffing agencies that use Bullhorn?

Bullhorn powers the public job boards of many staffing agencies through its career portal and partner job-board products, but each board is public HTML per agency and there is no directory. You can read boards for agencies you already know. Agencies on Bullhorn also distribute their roles to LinkedIn and Indeed, which is the practical place to reach them.

### How do I search Bullhorn agency jobs without API access?

Search LinkedIn and Indeed, where agencies running Bullhorn distribute their roles. JobsPipe collects both boards: filter POST /v1/jobs/search by company_name_partial_match_or or job_title_or, and read sources[0].provider to see which board each record came from. Records include status, ghost_score, seniority, discovered_at and last_seen_at.

## Does Bullhorn have an API?

The Bullhorn REST API is an OAuth-authenticated API into one staffing agency's ATS and CRM: candidates, contacts, job orders, placements. Access needs the agency's credentials and usually the Bullhorn Marketplace partner program. It is not a public feed of postings across agencies. Bullhorn powers the public job boards of many staffing agencies through its career portal and partner job-board products. Each board is public HTML per agency; there is no endpoint that enumerates agencies or merges their postings.

## What JobsPipe returns for Bullhorn

Nothing under "source_or": ["bullhorn"]: JobsPipe does not collect Bullhorn. Agencies and firms that run Bullhorn distribute their roles to LinkedIn and Indeed, which JobsPipe collects. Filter POST /v1/jobs/search by company_name_partial_match_or or job_title_or to reach them, and read sources[0].provider to see which board each record came from. Each record comes back with sources[0].provider, status, ghost_score, discovered_at, last_seen_at, seniority, and min_annual_salary_usd and max_annual_salary_usd when the posting states a range.

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/bullhorn.

---
Building this integration yourself? The steps above work. The alternative is one API over this source and 30+ others, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -X POST https://api.jobspipe.dev/v1/sandbox/jobs/search \
  -H "Content-Type: application/json" \
  -d '{"job_title_or":["software engineer"],"limit":5}'
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin