FlowRunner
PricingContact
Theme
Start Free

Bullhorn Automation

HR

Connect AI agents to Bullhorn Automation, formerly Herefish, the recruiting automation platform for staffing firms. Agents add or update contacts, manage list membership, sync placements, and match candidates to jobs so recruiting outreach stays current automatically.

Verified 7 actions API key available
A requisition is marked urgent and needs a redeployment shortlist the same day
Agent runs Get Candidates for Job to pull the ranked candidate IDs from the matching engine
Agent resolves each ID against the applicant tracking system to get names, availability, and last placement
Agent removes anyone currently on assignment, recently contacted, or opted out of outreach
Recruiter receives the shortlist, the list name it would be enrolled into, and the sequence that list starts
Recruiter approves the enrollment before Add or Update Contact adds anyone to the list

What This Integration Enables

Bullhorn Automation, formerly Herefish, is the outreach engine that sits beside a staffing firm's applicant tracking system rather than inside it. The distinction matters when you build on it: this is a separate product from the core Bullhorn ATS and CRM, which is covered by the Bullhorn connector. Records here exist to drive automations, not to be the system of record.

That shapes the whole surface. Add or Update Contact creates or updates a person, deduplicated by email address, and when a list name is supplied it adds them to that list. Because automations in Bullhorn Automation are triggered by list membership, that single call is not a tag operation, it is an enrollment: the person begins receiving whatever sequence the list drives. Remove Contact from List is the counterpart, taking someone out of a named list without deleting the contact, which is how an agent stops list-triggered outreach for one person. Get Contact reads a stored contact by its Bullhorn Automation ID.

Add or Update Placement keeps the assignment picture current, linking a candidate to a job with a start date and status, deduplicated by ATS placement ID. Placements are what drive redeployment, contractor care, and anniversary automations, so a stale placement record is not a reporting problem, it is a sequence firing at the wrong person on the wrong day. Three matching operations round out the connector: Get Candidates for Job returns ranked candidate IDs for a requisition, Get Jobs for Candidate returns ranked job IDs for a person, and Find Similar Jobs returns openings closest to a given one, each capped at fifty results. All three return identifiers from your applicant tracking system rather than full records, so a flow resolves them against the ATS to get names, availability, and history before doing anything with them.

Without FlowRunner

Redeployment depends on recall Whether a contractor finishing an assignment gets a call depends on who remembers them
Nurture lists built by export Candidates are pulled to a spreadsheet, filtered, and pasted back into a marketing tool
Placement data lags the automations Anniversary and contractor care sequences fire against a record that is weeks out of date

With FlowRunner

Redeployment starts from the match Get Jobs for Candidate and Find Similar Jobs surface alternatives while the assignment is still running
Nurture lists built from the source Add or Update Contact enrolls people directly, deduplicated by email, with no export step
Placement data arrives with the change Add or Update Placement syncs candidate, job, start date, and status as the assignment changes

Use Case Scenarios

Redeployment Before the Assignment Ends

A contractor's assignment has three weeks left. On a schedule the agent finds placements approaching their end date, runs Get Jobs for Candidate to pull ranked openings that match each person, and runs Find Similar Jobs against their current assignment to catch near matches the first call missed. It resolves the returned job IDs against the applicant tracking system for title, location, pay rate, and start date, then assembles a per contractor shortlist and posts it to their recruiter. The recruiter decides who to approach and with what. The value here is timing: the conversation happens while the person is still working, not after they have already accepted something else.

Keeping the Automation Layer in Step With the ATS

Placements change constantly: start dates move, assignments extend, statuses flip. The agent watches the applicant tracking system for those changes and runs Add or Update Placement for each one, passing the ATS placement ID so an existing record is updated in place rather than duplicated. Because status, type, and employment type are free text that mirror the values used in the ATS, the agent passes them through unchanged rather than mapping them to an invented vocabulary. Contractor care and anniversary sequences then fire against dates that are actually true.

Sourced Candidate Into the Right Nurture Track

Candidates arrive from job boards, referrals, and events with wildly different levels of qualification. Rather than dropping everyone into one list, the agent classifies each new contact against the specialism and seniority captured during sourcing, writes the person with Add or Update Contact so the email deduplication catches anyone already known, and proposes the list that matches their track. When a candidate later accepts a placement, the agent runs Remove Contact from List to take them off the active outreach track so they stop receiving job alerts while they are working, then adds them back when the assignment ends.

Human-in-Loop Highlight

In Bullhorn Automation, adding a contact to a list is not a filing action. Lists trigger automations, so supplying a list name in Add or Update Contact enrolls that person into a live sequence, and the first message can be on its way before anyone reviews the batch. The undo, Remove Contact from List, only stops what has not been sent yet. Combine that with the matching operations, which return ranked ATS identifiers and nothing else, and the risk becomes concrete: an agent can enroll fifty people it has never actually read the records of. So the agent resolves the IDs first, filters out anyone on assignment, recently contacted, or opted out, and then stops before the enrollment: "Get Candidates for Job returned 62 matches for [requisition]. After filtering, 34 remain. Adding them to list [name] starts the [sequence name] outreach, and only unsent messages can be stopped. Here are the 34 names with last contact date and current status. Approve, remove names, or hold." Placement syncs, contact updates without a list name, and match retrieval all run unattended, because none of them reach a candidate. Starting outreach to real people is where the human-in-the-loop belongs.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

7 actions

Contacts

3
  • Add or Update Contact Creates or updates a contact, a candidate or sales contact, and when a list name is supplied adds that contact to the list. Contacts are matched and deduplicated by email address, so an existing record with the same email is updated in place rather than duplicated. Because list membership triggers automations, supplying a list name enrolls the person in a live sequence, so this call is routed for sign-off when it targets a list.
  • Remove Contact from List Removes a contact from a specific list, identified by email address and list name. The contact record itself is not deleted, only its membership in the named list, which is how a flow stops list-triggered outreach for one person.
  • Get Contact Retrieves a single contact record by its Bullhorn Automation contact ID, returning stored fields such as name, email, status, and location. Used to read the current state of a contact that was previously created or synced.

Placements

1
  • Add or Update Placement Creates or updates a placement linking a candidate to a job with a start date and status. Placements drive redeployment, contractor care, and anniversary automations. An existing placement with the same applicant tracking system placement ID is updated in place rather than duplicated.

Matching

3
  • Get Candidates for Job Returns a ranked list of candidate IDs that best match a specific job in your applicant tracking system, using Bullhorn Automation's matching engine. Optionally scopes results to the candidate pool of a specific automation. Returns identifiers only, so resolve them against the ATS before acting.
  • Find Similar Jobs Returns a ranked list of job IDs most similar to a specified job in your applicant tracking system, up to fifty results. Used to suggest alternative openings to a candidate or to widen a redeployment search.
  • Get Jobs for Candidate Returns a ranked list of job IDs that best match a specific candidate in your applicant tracking system, up to fifty results. Used to recommend openings to a candidate or to power redeployment automations.

Frequently Asked Questions

What can FlowRunner do with Bullhorn Automation?

FlowRunner agents can run Add or Update Contact, Remove Contact from List, and Get Contact in Bullhorn Automation, plus 4 more actions.

Does connecting Bullhorn Automation to FlowRunner require OAuth?

No. Bullhorn Automation connects to FlowRunner with an API key, no OAuth flow required.

Can Bullhorn Automation trigger a FlowRunner workflow automatically?

Bullhorn Automation doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with Bullhorn Automation

$100 in credits. No card required. Connect in minutes.