Bullhorn automation · runs weekly

Clean up stale Bullhorn submissions

Submissions pile up at Submitted while the job owner has already answered by email, and the pipeline of every job overstates what is alive.

Cotlet does it in your own Bullhorn account with get_job, list_job_submissions and update_submission_status, called by your AI agent, an n8n workflow or a script.

Hosted · nothing to install or maintain

Can Bullhorn do this on its own?

Bullhorn has no rule in the app that moves a submission because it sat too long, and its API is a partner contract for technology vendors (checked 23 Oct 2026). Bullhorn Automation, a separate product, lists steps and criteria for submissions.

How you do it in Bullhorn today

  1. Open the job record and click the Submissions tab, which is laid out like a funnel with the stages Submissions, Interviewing, Rejected and Confirmed.
  2. Expand Submissions and read the status in each candidate's row.
  3. Click a candidate's current status and choose the new one from the drop-down.
  4. On the Change Status screen, optionally set Internal Email Notification or a Distribution List, pick an action and save.
  5. Repeat for every job. Clicking All shows the full history of the job, so a stale row is easy to miss.

How to clean up stale Bullhorn submissions

Prompt

For my open jobs, list submissions still in Submitted for more than 14 days. Move the ones the job owner rejected to Sales Rep Rejected and list the rest for me.
  1. 01

    List your open jobs

    get_job reads each job you name, so the agent knows the title, the client and the job owner behind every submission it finds.

  2. 02

    Pull the Submissions stage

    list_job_submissions with stage submissions returns the rows still in the first stage with their status and date. The agent keeps rows older than your limit, 14 days in the example.

  3. 03

    Find the answer

    A row is moved only when its comments or the job owner's note say the candidate was rejected. Rows without an answer go on your list with their age and owner.

  4. 04

    Move the rejected ones

    update_submission_status sets the status to Sales Rep Rejected, never deletes the row, and keeps the history. The status must exist in your account's list.

  5. 05

    Report by job

    The agent returns one block per job: moved, still waiting and who owns each waiting row, so you can chase the owner.

What you get back

Example data

Jobs checked: 4
Submitted for more than 14 days: 9
Moved to Sales Rep Rejected: 3
- Marcus Lee on Senior Data Analyst (rejected by the job owner)
Still waiting: 6
- Priya Raman on Senior Data Analyst, 19 days, owner Jonas Weber

Other ways to ask

  • Do the same for interviews: list submissions in Interviewing for more than 21 days and do not change anything.
  • Every Friday, show me for each job how many submissions sit in each stage.
  • Move everyone on job 77502 who is still in Submitted to Sales Rep Rejected, because the client closed it.

What Bullhorn allows, and what to know first

  • A candidate the job owner turns down stays in the pipeline with the status Sales Rep Rejected; Bullhorn says to delete a submission only when it was made by mistake.
  • Changing the status of any candidate, not only your own, needs the Change Any Candidate Submission Status entitlement in Bullhorn.
  • Admins add statuses to any stage, and a submission status is at most 30 characters with no special characters.
  • When you place a candidate, Bullhorn sets both the record status and the submission status to Placed on its own.
  • Bullhorn shows an Internal Email Notification option on the Change Status screen, and only internal users are emailed, never candidates or contacts.

update_submission_status asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: Bullhorn Help: Submissions Tab · Bullhorn Help: Updating a Candidate's Submission Status · Bullhorn Help: Steps and Criteria Available for Submissions Automations

Call update_submission_status from a script

curl

curl -X PATCH https://cotlet.dev/api/v1/bullhorn/submissions/905512/status \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"Sales Rep Rejected"}'

Example response

{
  "submission_id": 905512,
  "previous_status": "Submitted",
  "status": "Sales Rep Rejected"
}

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is bullhorn_write → update_submission_status. Example data.

Schedule it in n8n, Make, Zapier or cron

Bullhorn tools this automation uses

Cotlet Bullhorn tools used to clean up stale Bullhorn submissions
Tool Parameters
get_job job_id
list_job_submissions job_id, stage, cursor
update_submission_status submission_id, status
All 9 Bullhorn tools with descriptions

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.

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.