Morning shortlist: match Bullhorn candidates to new job orders
Every weekday at 8am, scan Bullhorn for jobs opened in the last 24 hours and post a ranked shortlist of your strongest internal candidates to Slack.
Every weekday at 8am in my local timezone, build a morning shortlist that matches my existing Bullhorn candidates to brand new Bullhorn job orders, and post the results into a recruiting Slack channel.
Step 1. Find new job orders. Use Bullhorn's Search Entities action with Lucene syntax to pull every JobOrder whose status is open and whose dateAdded or dateLastModified falls in the last 24 hours (use this to catch newly opened plus reactivated jobs). Pull at least id, title, clientCorporation, clientContact, address (city, state, country), employmentType, payRate, salary, skills, categories, and dateAdded. Skip any job order that already has open JobSubmission records in flight (status not in Rejected or Withdrawn), since the team is already working those.
Step 2. For each remaining job, mine my Bullhorn candidate database. Use Search Entities against Candidate with a Lucene query built from the job's signal: required skills (boosted), city or state plus a reasonable commute radius for onsite roles, pay range overlap, and seniority hints from the title. Pull a healthy candidate page (50 to 100 hits) ranked by Bullhorn relevance.
Step 3. For the most promising candidates from that page, use Get Entity by ID against Candidate to pull recent work history, current status, last activity / last contacted date, owner, and any disqualifying flags. Deprioritize anyone whose status is Placed or Do Not Contact, and skip candidates with no activity in over 12 months unless the skill match is exceptional.
Step 4. Score and rank. Pick the top 3 to 5 candidates per job. For each one, write a one-line rationale that calls out (a) why they fit (skills, location, seniority, comp), (b) any gaps, and (c) when they were last engaged. Be honest about weak matches — better to ship a shorter list than fill slots with stretches.
Step 5. Post the shortlist to Slack. Use Send a Message to post one message per job into the recruiting channel (let me pick the channel at setup). Format: job title and client at the top, a link back to the JobOrder in Bullhorn, then the ranked candidates with names, current title/company, and the one-line rationale. End with a suggested next action like "Recruiter to confirm interest and submit top 2 by EOD." If multiple jobs come through, post each as its own threaded message so the channel stays scannable.
Step 6. Log an audit trail in Bullhorn. For each job order you posted about, use Create Entity to drop a Note on the JobOrder summarizing which candidates were shortlisted and linking to the Slack thread. This way the recruiter can see at a glance what was already screened by the agent.
Rules. Never auto-create a JobSubmission or message a candidate — this is a recruiter-in-the-loop shortlist, not autopilot. Respect Bullhorn rate limits (reuse the session token, don't re-login per call, back off on 429). If no qualifying jobs were opened in the last 24 hours, post a single short "no new job orders to shortlist" message instead of going silent so the team knows the workflow ran.
Additional information
What does this prompt do?
- Finds every Bullhorn job order opened or reactivated in the last 24 hours, skipping any that already have submissions in flight.
- For each new job, mines your existing Bullhorn candidate database for the best internal matches based on required skills, location, pay range, and seniority.
- Picks the top three to five candidates per job and writes a one-line rationale for each, calling out the fit, any gaps, and when they were last engaged.
- Posts a clean threaded message per job into a recruiting Slack channel with job details, the ranked shortlist, and a suggested next action.
- Logs a brief note on each job order in Bullhorn so the team has an audit trail of which candidates were already screened.
What do I need to use this?
- A Bullhorn login with permission to read job orders and candidates and to write notes on job orders.
- A Slack workspace and a recruiting channel where you want the morning shortlists posted.
- A short list of your usual filters, like target locations, seniority levels, and any candidate statuses to deprioritize such as Placed or Do Not Contact.
How can I customize it?
- Change the run time or frequency, for example move it to 7am or run twice a day for a fast-moving desk.
- Swap the Slack channel, route different desks or practice areas to different channels, or send to a recruiter DM instead.
- Tune the matching rules, like how many candidates to shortlist, how to weight skills versus location, and which candidate statuses to skip.
Frequently asked questions
Will this auto-submit candidates to clients?
What happens if a job already has candidates submitted?
How does it decide who makes the shortlist?
Can I exclude certain candidate statuses?
Does it leave a record in Bullhorn?
Stop sourcing from scratch on every new job order.
Connect Bullhorn and Slack once, and Geni mines your own candidate database for the strongest internal matches before your recruiters open their laptops.