Weekly stalled candidate alerts for Lever hiring managers
Every Monday at 8am, each hiring manager gets a Slack message listing only the candidates who have been waiting too long in their current stage.
Every Monday at 8am, send each hiring manager a Slack direct message listing the candidates who have stalled in their hiring pipeline, and log a weekly snapshot to a Google Sheets tracker so stalls can be tracked over time. Run this on a cron trigger.
Start in Lever. Use List Postings to pull every open role. For each posting, use List Opportunities to get the candidates on it, keeping only active, non-archived candidates. Use List Stages once at the start to build a lookup from stage ID to readable stage name, because opportunities reference their stage by ID and the message needs to say "Phone Screen", not a UUID.
Work out how long each candidate has been sitting in their current stage from the lastAdvancedAt timestamp on the opportunity. Lever returns timestamps as Unix milliseconds, so convert before comparing against the current time. If lastAdvancedAt is missing, fall back to createdAt.
Flag any candidate who is past the SLA for their stage. Use three business days for phone screen, seven days for onsite and hiring manager review, and five business days as the default for any other stage. Define these thresholds as a clearly labelled per-stage mapping near the top of the workflow so they are easy to change, and make sure business day counts skip weekends.
Suppress false positives before flagging anyone. Call List Interviews on an Opportunity for each candidate that would otherwise be flagged, and skip them if they already have an interview scheduled in the future. A candidate waiting on a booked interview is not stalled, and surfacing them trains managers to ignore the message.
Work out who to notify for each role. Use List Users with Access to a Posting and pick the hiring manager for that posting. Match that person to Slack with Look Up User by Email using their Lever email address. If no Slack user matches, collect them and report it in the run summary rather than failing the whole run.
Send one Slack Bot direct message per hiring manager, using Open a Conversation to get the DM channel and then Send a Message. If a manager owns several roles, group their message by role rather than sending one message per posting. Within each role, sort candidates most overdue first and cap the list at the ten worst, noting how many more were left off. For each candidate include their name, current stage, and how many days they have been waiting. Write it as a short, readable, prioritized note that leads with the single most urgent candidate, not a raw data dump. Skip managers who have nothing overdue instead of sending them an empty message.
Finally, append one row per posting to the Google Sheets tracker using Append Values, recording the run date, the role title, the number of active candidates, and the number overdue. Append a row for every open posting, including ones with zero overdue candidates, so the trend line stays complete and week-over-week comparisons are honest.
Respect Lever rate limits by keeping requests at or below ten per second, and page through every list response until hasNext is false so large pipelines are not silently truncated.
What does this prompt do?
- Checks every open role in Lever and works out how long each active candidate has been sitting in their current hiring stage.
- Flags anyone past the time limit you set for that stage, for example three business days in phone screen or seven days in onsite and hiring manager review.
- Skips candidates who already have an interview booked, so managers only see genuine hold-ups rather than false alarms.
- Sends each hiring manager a direct Slack message with their most overdue candidates first, and logs a weekly snapshot to a Google Sheet so you can watch stalls trend over time.
What do I need to use this?
- A Lever account with access to your job postings and candidates
- A Slack workspace where the bot can send direct messages
- A Google Sheets tracker where the weekly snapshot rows get added
- Hiring managers assigned to your roles in Lever, using the same email address they have in Slack
How can I customize it?
- Change when it runs. Monday at 8am is the default, but any day and time works.
- Adjust the waiting limit for each stage, or add limits for stages that are unique to your hiring process.
- Change how many candidates appear per role, or narrow the run to specific teams and locations.
FAQs
Will hiring managers get a message if none of their candidates are overdue?
What counts as a stalled candidate?
Can I set different time limits for different stages?
How does it know who the hiring manager is?
Does this work if we hire across multiple teams?
Related templates
When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.
Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.
Stop letting good candidates go cold.
Put a weekly stall check on autopilot so every hiring manager knows exactly who is waiting on them.