hyreflow docshyreflow docsDocumentation
Integrations

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

ToolDoesCost
searchLucene search over indexed entities (Candidate, JobOrder, ClientContact, ClientCorporation…)Free
querySQL-style where query over non-indexed entitiesFree
get_entityFetch a single record by entity + idFree
create_entityCreate a record (e.g. a Candidate)Free
update_entityUpdate a record by idFree
get_candidate_cvA candidate's CV as text: Bullhorn's parsed CV, else the CV fileFree
list_candidate_filesList a candidate's files (CVs and other attachments)Free
get_candidate_fileRead one file's text (PDF, DOCX or TXT), up to 10 MBFree
pingVerify the session (safe read-only pilot)Free

Guidance

  • search vs query: search is Lucene over indexed entities; query is SQL-style where for 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 its text as the candidate's profile.about to hyreflow_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 its name: with no file marked as a CV it may be a cover letter. list_candidate_files and get_candidate_file read one specific file. Reading files needs Candidate access on your Bullhorn API user, and private attachments need Bullhorn's private-file entitlement; without it get_candidate_cv skips the private file and get_candidate_file returns Bullhorn's 403.
  • Production ATS writes: create_entity/update_entity hit 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.