On a schedule
Post members who've stopped checking in to Slack each morning
Every morning, Slack lists the members in your Supabase table who haven't checked in for 14 days, highlighting the ones new to the list since yesterday.
- Runs
- On a schedule
- Apps
- Slack, Supabase
- AI
- Optional
- Access
- Supabase read; Slack chat:write
Send this to your assistant
Create a ClickRuntime automation: every morning, check my Supabase members table for anyone who hasn't checked in for 14 days and post the list to #retention, marking who's new since yesterday.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Membership businesses lose people quietly. The data is in the database, but the team only sees it when someone writes a query, which is rarely.
A morning post in Slack listing members who've gone quiet, with the new names marked, gives the team a short daily to-do: reach out before the membership lapses.
What you get out of it
Catch drift early
Two quiet weeks is the moment to reach out, not two months.
Focus on what's new
Names that joined the list since yesterday are marked, so the team isn't re-reading the same list.
Team-wide visibility
Everyone in #retention sees the list and can claim a member to call.
Optional explanation
If AI is available, a one-line read of the list is added.
How it works
What happens, step by step
Every morning, ClickRuntime asks Supabase for members whose last check-in was more than 14 days ago.
It compares the list with yesterday's to find who's new on it.
If AI is available, it adds a one-line note on what stands out.
It posts the list to #retention in Slack, with new names marked.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect Supabase
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and Supabase steps into one automation
Under the hood
The code that runs this automation
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, state, notify, ai
SUPABASE = "https://your-project.supabase.co/rest/v1"
def sb(method, path, **kw):
key = credentials.secret("SUPABASE_KEY")
r = http.request(method, f"{SUPABASE}/{path}", **kw, headers={"apikey": key, "Authorization": f"Bearer {key}", "Prefer": "return=representation,resolution=merge-duplicates"})
return r.raise_for_status() or (r.json() if r.content else None)
@on_trigger
def run(event):
cutoff = date.today() - timedelta(days=14)
members = sb("GET", f"members?status=eq.active&last_seen=lt.{cutoff}&select=id,name,last_seen&order=last_seen.asc")
before = set(state.get("ids") or [])
lines = [f"{'🆕 ' if m['id'] not in before else ''}{m['name']} – last seen {m['last_seen'][:10]}" for m in members[:20]]
text = f"{len(members)} members haven't checked in since {cutoff} ({sum(m['id'] not in before for m in members)} new)\n" + "\n".join(lines)
if len(members) > 20:
text += f"\n…and {len(members) - 20} more"
try:
text += "\n" + ai.generate(f"One sentence on what stands out:\n{text}", max_output_tokens=60).text
except ai.AIError:
pass
notify.slack(text, channel="#retention")
state.set("ids", [m["id"] for m in members])
return {"inactive": len(members)}FAQ
Common questions
Can it check other risks?
How does it know who's new on the list?
Will long lists flood Slack?
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
Store new reviews in Supabase and send angry ones to Slack
Every 3 hours, new reviews are saved once in Supabase with a sentiment label, and negative ones go straight to Slack.
See how it worksPost a monthly summary of your Supabase figures to Slack
On the 1st of each month, Slack gets a short written summary of last month's figures from your Supabase table, with the changes from the month before.
See how it worksScore every new lead and post the hot ones to Slack
Each new lead gets an AI score and is saved to your Supabase leads table, and hot leads are posted to your sales channel straight away.
See how it worksKeep exploring
Set up “Post members who've stopped checking in to Slack each morning” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.