On a schedule
Post today's absences to Slack
Each weekday morning your team sees who is off, whether on holiday or sick.
- Runs
- On a schedule
- Apps
- Personio
- AI
- Not needed
- Access
- absences read
Send this to your assistant
Create a ClickRuntime automation: every weekday at 9am, list today's absences in Personio and post each person's name and absence type to #office in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Anyone who has tried to book a meeting or ask a quick question only to find the person is on vacation knows the cost: a wasted message, a delayed decision, and a customer left waiting. Personio holds all the absences, but checking the calendar means opening another tool, so most people guess who is in and who is away, and are regularly wrong.
On a schedule you choose, usually early in the morning, Personio is queried for absence periods that cover today, and the names are posted in Slack. The team starts the day knowing who is on vacation, off sick or away, without opening Personio or asking HR. It is also a quiet help for managers covering shifts or approving last-minute requests.
It suits teams of twenty to a few hundred people, where nobody can keep track of everyone's leave by memory.
What you get out of it
Stop pinging people who are away
Seeing the list before sending a message saves wasted effort. You redirect your question to someone who is available, and the work moves along rather than waiting for a reply from a person on a beach.
Customer issues get routed correctly
Support and account teams can see who is out and hand issues to the right colleague. Customers get an answer the same day instead of waiting for an absent owner to return.
Fewer scheduling mistakes
Meetings are less likely to be booked on days when key people are absent. That avoids the reshuffling that follows when you realize half the attendees are away. Fewer reschedules mean less wasted time for everyone invited.
Less load on HR
People stop asking HR whether someone is in. The channel answers the question every morning, which gives HR time for work that actually needs a person. Routine availability questions disappear from the HR inbox and chat.
Planning for coverage
Managers see at a glance when too many people are out at once. They can adjust deadlines or ask for cover before it becomes a problem for customers. Early visibility makes it easier to arrange cover calmly rather than in a scramble.
How it works
What happens, step by step
Every weekday at 9am, ClickRuntime asks Personio for the absences that cover today.
It lists each person with the type of absence, such as holiday or sick leave.
The list is posted to your Slack channel.
Before it runs live
- Connect Personio
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
- Run it at a different time, more or less often, or only on weekdays
- 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 Personio steps into one automation
Under the hood
The code that runs this automation
from datetime import date
from clickruntime import on_trigger, credentials, http, notify
def personio(path, **params):
auth = http.post("https://api.personio.de/v1/auth", json={
"client_id": credentials.secret("PERSONIO_CLIENT_ID"),
"client_secret": credentials.secret("PERSONIO_CLIENT_SECRET")}).json()["data"]["token"]
resp = http.get(f"https://api.personio.de/v1/{path}", headers={"Authorization": f"Bearer {auth}"}, params=params)
resp.raise_for_status()
return resp.json()["data"]
def val(emp, key):
v = emp["attributes"].get(key, {}).get("value")
return v.get("attributes", {}).get("name") if isinstance(v, dict) else v
@on_trigger
def run(event):
today = str(date.today())
absences = personio("company/time-offs", start_date=today, end_date=today, limit=200)
lines = []
for a in absences:
attrs = a["attributes"]
emp = attrs["employee"]["attributes"]
lines.append(f"• {emp['first_name']['value']} {emp['last_name']['value']}: {attrs['time_off_type']['attributes']['name']}")
notify.slack("Absent today:\n" + "\n".join(lines) if lines else "Nobody is absent today.", channel="#office")
return {"absent": len(lines)}FAQ
Common questions
Does it show the reason for the absence?
Are half-day absences included?
Can it post to a team channel rather than the company one?
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
Get an email when someone is added
You hear about each new person in Personio within the hour, with the details you've whitelisted.
See how it worksTell IT when someone is leaving
IT sees each new termination date in Slack, in time to plan removing access.
See how it worksKnow the moment your website goes down
Your team hears in Slack when the site stops responding or slows down, and again when it's back.
See how it worksKeep exploring
Set up “Post today's absences to Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.