Bullhorn
Recruiting ATS/CRM: search/query entities and create/update records. 3-leg OAuth; production writes, so pilot one record first.
Use Bullhorn to read jobs, contacts and companies from the ATS, and to push enriched candidates back in.
Free on hyreflow (0 credits), runs on your own Bullhorn credentials. Connect it self-serve from Integrations (or hyreflow byok set bullhorn) with the four values Bullhorn issues an API user: Client ID, Client Secret, API username and API password. Hyreflow finds your Bullhorn datacenter from the username, so there is no host or redirect URI to configure.
Capabilities
| Tool | Does | Cost |
|---|---|---|
search | Lucene search over indexed entities (Candidate, JobOrder, ClientContact, ClientCorporation…) | Free |
query | SQL-style where query over non-indexed entities | Free |
get_entity | Fetch a single record by entity + id | Free |
create_entity | Create a record (e.g. a Candidate) | Free |
update_entity | Update a record by id | Free |
get_candidate_cv | A candidate's CV as text: Bullhorn's parsed CV, else the CV file | Free |
list_candidate_files | List a candidate's files (CVs and other attachments) | Free |
get_candidate_file | Read one file's text (PDF, DOCX or TXT), up to 10 MB | Free |
ping | Verify the session (safe read-only pilot) | Free |
Guidance
searchvsquery:searchis Lucene over indexed entities;queryis SQL-stylewherefor non-indexed entities. Pick by entity type.- Datacenter caveat: auth/rest hosts can be cluster-specific; the client re-logs in once on a 401.
- Screening on CVs: call
get_candidate_cv(candidate_id)and pass itstextas the candidate'sprofile.abouttohyreflow_shortlist, so the screen reads the CV, not just the job title. It reads Bullhorn's own parsed CV first (which also covers.doc/.rtf), then the CV file (PDF, DOCX or TXT, up to 10 MB) when the description is empty or a short stub. When it returns a file, check itsname: with no file marked as a CV it may be a cover letter.list_candidate_filesandget_candidate_fileread one specific file. Reading files needs Candidate access on your Bullhorn API user, and private attachments need Bullhorn's private-file entitlement; without itget_candidate_cvskips the private file andget_candidate_filereturns Bullhorn's 403. - Production ATS writes:
create_entity/update_entityhit live data; pilot one record, confirm, then bulk. - Handoff: enriched candidates →
create_entity("Candidate", …).
hyreflow tools execute bullhorn search \
--payload '{"entity":"JobOrder","query":"isOpen:true","fields":"id,title,clientCorporation"}'Run ping as a zero-cost pilot to confirm the OAuth session resolves before issuing any reads or writes.
Rate limits & bulk writes
Bullhorn is limited to 1,500 requests / minute per OAuth Client ID. Use create_candidates_batch,
create_client_contacts_batch, create_client_corporations_batch and create_job_orders_batch for large
pushes: they pace calls automatically and collect per-row failures. See Bulk pushes to ATS / recruiting
CRM for limits across all CRMs.