[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Find and submit matching candidates in Bullhorn

> Match a new Bullhorn job to candidates by its description, read the records and submit your picks to the job owner without clicking through each one.

Source: https://cotlet.dev/integrations/bullhorn-api-mcp-server/submit-matching-candidates

A new job lands on a recruiter's desk, and the first hour goes on searching the database, opening records one by one and submitting the right people.

Cotlet does it in your own Bullhorn account with get\_job, find\_matching\_candidates, get\_candidate and add\_submission, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=bullhorn) [All Bullhorn tools](https://cotlet.dev/integrations/bullhorn-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Bullhorn do this on its own?

Bullhorn's Find Matching Candidates action does the search inside the app, and Bullhorn Automation has a separate Match Candidates step (checked 23 Oct 2026). Neither reads the records for you or decides who fits, and the API is a partner contract for technology vendors.

## How you do it in Bullhorn today

1. Open the job record and choose Find Matching Candidates.
2. If the job has a file attachment to search, select it and click Next, then add criteria such as skills or Radius and click Search.
3. Open the candidates in the result list one by one and read their records.
4. To submit several candidates, tick them in the search results, open the Selected drop-down, choose Add Submission, type the job in the Jobs field and click Save.
5. For a single candidate, start from the job record: Actions > Add Submission, pick a Submission Template to fill Comments, enter the candidate in Candidates and click Save.

## How to find and submit matching candidates in Bullhorn

Prompt

```
For job 77314, find matching candidates within 20 miles, read the top five records and tell me who fits. After my OK, submit the ones I pick.
```

1. 01  
### Read the job first  
get\_job returns the title, client, owner and location. The agent checks that the job is the one you meant before it searches.
2. 02  
### Run the match  
find\_matching\_candidates applies the same rule as the app: keywords from the job description and the job's zip code with a radius. You can widen the radius or pass your own keywords when the description is short.
3. 03  
### Read the records  
get\_candidate opens the best matches and returns occupation, current company, status and existing submissions. The agent drops anyone already submitted to this job.
4. 04  
### Propose a shortlist  
The agent gives each pick one line of reasoning from the record. It submits nobody until you name the people to submit.
5. 05  
### Submit the picks  
add\_submission sends your picks to the job in one call, with the comment you approve. Bullhorn sets the status to Submitted and the submission goes to the job owner.

### What you get back

Example data

```
Job 77314: Senior Data Analyst, Northwind Logistics
Matches within 20 miles: 31
Shortlist:
- Priya Raman: 6 years SQL and dbt, contract
- Marcus Lee: BI lead, permanent
Already submitted to this job: 2, left out
Submitted after your OK: 2 (status Submitted)
```

### Other ways to ask

- Match job 77314 with a 50 mile radius and the keywords "dbt" and "Snowflake", and show me the count only.
- Every Monday, run a match for each of my open jobs and list the five best new candidates per job.
- Submit Priya Raman to jobs 77314 and 77502 with the comment "Available from 3 Nov".

## What Bullhorn allows, and what to know first

- When a Bullhorn job description has more than 250 words, Find Matching Candidates takes keywords from it, at most 10 keywords, and uses the job zip code with a default radius of 20 miles.
- Bullhorn starts a submission from the job record because the job and the job owner then fill in on their own.
- After saving, Bullhorn sets the submission status to Submitted and the submission goes to the job owner, usually a sales rep, for review.
- Submitting several candidates at once is allowed in Bullhorn only if your company's policies permit it.
- A candidate submitted by mistake is deleted from the job's Submissions tab, but a candidate the job owner rejects stays and gets the status Sales Rep Rejected.

add\_submission asks for your OK by default. To run it on a schedule without you, switch confirmation off for that tool in your dashboard.

Sources: [Bullhorn Help: Matching Candidates and Jobs](https://kb.bullhorn.com/ats/Content/BHATS/Topics/matchingCandidatesJobs.htm) · [Bullhorn Help: Submitting a Candidate to a Job](https://kb.bullhorn.com/ats/Content/BHATS/Topics/submittingCandidateToJobInternalSubmission.htm) · [Bullhorn Help: Match Candidates Step (Automation)](https://kb.bullhorn.com/automation/Content/Automation/Topics/matchCandidatesStep.htm)

## Call add\_submission from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/bullhorn/jobs/77314/submissions \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"candidate_ids":[4821907,4830112],"comments":"Both have dbt and Snowflake and can start in November."}'
```

Example response

```
{
"submissions": [
{
"submission_id": 905601,
"candidate_id": 4821907,
"status": "Submitted"
},
{
"submission_id": 905602,
"candidate_id": 4830112,
"status": "Submitted"
}
]
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is bullhorn\_write → add\_submission. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/bullhorn-api-mcp-server.md#automations)

## Bullhorn tools this automation uses

__Cotlet Bullhorn tools used to find and submit matching candidates in Bullhorn__
| Tool | Parameters |
| -------------------------- | ---------------------------------------- |
| get\_job | job\_id |
| find\_matching\_candidates | job\_id, keywords, radius\_miles, cursor |
| get\_candidate | candidate\_id |
| add\_submission | job\_id, candidate\_ids, comments |

[All 9 Bullhorn tools with descriptions](https://cotlet.dev/integrations/bullhorn-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Bullhorn to Cotlet?

Yes. You sign in to Bullhorn yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Bullhorn once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Bullhorn automations

- [Log screening notes on Bullhorn candidate records](https://cotlet.dev/integrations/bullhorn-api-mcp-server/log-screening-notes.md)
- [Clean up stale Bullhorn submissions](https://cotlet.dev/integrations/bullhorn-api-mcp-server/clean-up-stale-submissions.md)
- [Bullhorn API and MCP server: every tool](https://cotlet.dev/integrations/bullhorn-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Bullhorn.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Bullhorn.

[Sign up free](https://cotlet.dev/app/signup?app=bullhorn)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet.dev is built by Bart Krawczyk and Jake Slugocki, the founders of Take Group sp. z o.o., ul. Wincentego Janasa 4, 40-855 Katowice, Poland. KRS 0000871398, NIP 6342984273, VAT EU: PL6342984273. [About us](https://cotlet.dev/about.md)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.
