The moment it happens
Hear when a candidate reaches Offer in Lever
You get an email the moment a candidate moves into the stage you care about.
- Runs
- The moment it happens
- Apps
- Lever
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: email me whenever a Lever candidate moves to the Offer stage, with their name, the role and who moved them.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
In Lever, a candidate moving from phone screen to onsite, or from final interview to offer, triggers real work for other people. The interviewers need calendars cleared, the coordinator needs to book travel, the finance partner needs to approve compensation. If the recruiter has to remember to tell each of them, steps get missed and a candidate waits through silence for days.
When Lever reports that a candidate changed stage, ClickRuntime checks whether the new stage is one you care about, such as Offer or an Interview stage, and ignores every other move. For the stages you chose, it emails you the candidate, the role and the stage they entered, so the right person can react the same day.
Hiring managers and coordinators who cannot watch the Lever board all day find this useful.
What you get out of it
Offers go out before candidates lose interest
A candidate who has cleared the final interview and then hears nothing for a week may accept another offer. An email when they reach the offer stage keeps the next step from stalling.
Interviews are scheduled promptly
Coordinators need notice as soon as someone advances. An immediate email means invitations go out while the candidate is still thinking about the role and availability is open. The candidate experience is better for it.
Only meaningful moves reach you
Candidates move between stages constantly, and most changes are routine. Filtering to the stages you care about prevents the inbox noise that would train you to ignore these messages. Fewer notifications means each one gets read.
Approvals are requested in time
An offer needs sign-off from finance or leadership. When the stage change email reaches them early, the approval does not hold up the candidate. That record also helps when planning future roles.
The hiring timeline can be reconstructed
Each email is timestamped, so later you can see how long a candidate took between stages. That is useful when you review where the process is slow. It keeps the final steps from becoming a bottleneck.
How it works
What happens, step by step
When a candidate moves stage in Lever, Lever tells ClickRuntime straight away.
ClickRuntime checks whether the new stage is the one you care about, such as Offer, and ignores the rest.
If it is, you get an email saying who moved, for which role and who moved them.
Before it runs live
- Connect Lever
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Lever steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, credentials, http, notify
TARGET_STAGE = "Offer"
def lever(path, **params):
resp = http.get(f"https://api.lever.co/v1/{path}",
auth=(credentials.secret("LEVER_API_KEY"), ""), params=params)
resp.raise_for_status()
return resp.json()["data"]
@on_event
def handle(event):
payload = event.json or {}
if payload.get("event") != "candidateStageChange":
return {"sent": False}
data = payload["data"]
stage = lever(f"stages/{data['toStageId']}")["text"]
if stage != TARGET_STAGE:
return {"sent": False, "stage": stage}
opp = lever(f"opportunities/{data['opportunityId']}", expand="applications")
posting = next((a.get("posting") for a in opp.get("applications", []) if a.get("posting")), None)
role = lever(f"postings/{posting}")["text"] if posting else "unknown role"
mover = lever(f"users/{data['userId']}")["name"] if data.get("userId") else "an automation"
notify.email_me(f"{opp['name']} moved to {stage}", f"{opp['name']} ({role}) was moved to {stage} by {mover}.\n{opp['urls']['show']}")
return {"sent": True}FAQ
Common questions
Which stages can I watch?
What does the email say?
Does it notify me if a candidate is rejected or archived?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Announce new Lever candidates in Slack
Your hiring channel gets each new candidate's name and the role they applied for as soon as they come in.
See how it worksFind candidates stuck in your Lever pipeline
Every Monday you get a list of active candidates with no activity in the last two weeks.
See how it worksPost new orders and sign-ups to Slack
When something happens in your shop, app or form, the details land in the right channel straight away.
See how it worksKeep exploring
Set up “Hear when a candidate reaches Offer in Lever” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
