Zorexo Free hit list
Systems

How to connect Clay and Bullhorn for recruitment BD

Clay finds the companies with a hiring need. Bullhorn is where your consultants work. Here is how to connect the two without making a mess.

TLDR

  • Sync target companies, hiring managers and the signal note from Clay into Bullhorn, and pull clients and open job orders back as an exclusion list.
  • Use a small automation layer like n8n or Make to handle Bullhorn OAuth and session refresh.
  • Always search before you write, so Bullhorn never fills with duplicates.

Most recruitment agencies run Bullhorn for the candidate side and do BD somewhere else. A spreadsheet, a sales tool, someone's inbox. Clay is great at finding companies with a hiring need, but if those leads never reach Bullhorn, your consultants work from two lists and nobody trusts either.

This guide covers what to sync between Clay and Bullhorn, how the connection works, and the mistakes that make agencies give up on it.

Before you start: Bullhorn API access isn't switched on by default. You request API credentials from Bullhorn, and what you can access depends on your contract. Check this first, it's the step that takes longest.

Why connect Clay and Bullhorn at all

  • One source of truth. Consultants see new BD targets in the system they already live in.
  • No double outreach. Clay can check Bullhorn before anyone sends, so you never cold email an existing client or a contact a colleague is already talking to.
  • Signals on the record. The reason you reached out (a new CTO, a funding round) is saved as a note, so the next consultant knows the context.
  • Real reporting. When replies and meetings are logged in Bullhorn, you can see which signals turn into job orders.

What to sync, and which way

DataDirectionBullhorn record
Target companiesClay to BullhornClientCorporation
Hiring managersClay to BullhornClientContact (or Lead, if you use Leads)
The signal and first messageClay to BullhornNote on the contact
Existing clients and contactsBullhorn to ClayUsed to exclude or flag before outreach
Open job ordersBullhorn to ClayJobOrder, used to skip companies you already work with

How the connection works

Bullhorn has a REST API. Clay can call any API through an HTTP API column, so in theory Clay can talk to Bullhorn directly. In practice, most agencies put a small automation layer in between.

  1. AuthenticateBullhorn uses OAuth. You exchange your credentials for an access token, then log in to get a session token and the REST URL for your account. Sessions expire, so something needs to refresh them.
  2. Look up before you writeSearch Bullhorn for the company and contact first, usually by domain and email. If they exist, update them. If not, create them. This is what stops duplicates.
  3. Create or update the recordsWrite the company, then the contact linked to it, then a note with the signal and the message that went out.
  4. Pull exclusions back into ClayOn a schedule, pull current clients, open job orders and do-not-contact flags into a Clay table, and filter your outreach list against it.

The automation layer is usually n8n, Make or Zapier. It handles the token refresh, so Clay just sends a webhook with the row and the automation does the Bullhorn work. This is more reliable than managing tokens inside Clay.

A simple version of the flow looks like this:

Clay row (company, contact, signal, message) -> webhook to n8n -> refresh Bullhorn session if needed -> search ClientCorporation by domain found? update : create -> search ClientContact by email found? update : create (linked to the company) -> add Note: "Signal: new VP Engineering (Sep). First email sent." -> send the Bullhorn IDs back to Clay

Mistakes to avoid

  • Writing before searching. The fastest way to fill Bullhorn with duplicates. Always look up first.
  • Syncing everyone. Only push contacts you actually plan to reach. Bullhorn isn't a dumping ground for every enrichment result.
  • Skipping the exclusion list. The whole point is never emailing a live client by mistake. Build this before your first send.
  • No owner field. Assign each new contact to a consultant, or nobody follows up.
  • Ignoring status values. Use your agency's existing contact statuses so reports still make sense.

Where to start this week

  1. Ask Bullhorn about API access for your account.
  2. Export your current clients and contacts into Clay as an exclusion table.
  3. Build one signal list, such as companies with a new engineering leader in the last 90 days.
  4. Connect just two actions first: create contact and add note. Add the rest once that works.

Not on Bullhorn? The same approach works with Recruiterflow, where the BD side is built in but most agencies never switch it on. If you'd rather have this set up for you, that's part of Zorexo's lead generation for recruitment agencies.

Want this running for your agency?

Get a free client hit list: 10 companies hiring in your niche right now, the hiring manager at each one, and the exact first message to send. Walked through on a 30-minute call.

Get my free hit list

Keep reading