Every 5 minutes
Get a Slack message for every new signup
New rows in your table show up in Slack within minutes, grouped together when many arrive at once.
- Runs
- Every 5 minutes
- Apps
- Supabase
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every 5 minutes, check my Supabase users table for new rows and post each new signup's email and plan to #signups in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A founder wants a ping in Slack each time someone signs up, because early users deserve a personal welcome and every signup is a small win. Supabase has no built-in message to Slack for this, so the choices are a custom database function, a third-party service or checking the table by hand. Most people choose the third option and then forget. Few people bother.
Every five minutes, ClickRuntime fetches rows whose id or created_at is greater than the last value it stored, posts each new one to your Slack channel and updates that stored value. You see signups within minutes, with the details you picked, such as name, email and plan.
It is a good fit for early-stage products, waitlists and any table where each new row deserves a human glance.
What you get out of it
Early users get a personal welcome
Replying to a new signup within minutes often decides whether they stay. A Slack message means the founder or support lead can send a friendly note while the person is still looking at the product.
No database triggers or functions to maintain
Writing and debugging a trigger that calls an external service is fiddly and easy to break. A polling run reads rows you already have and needs no changes to your schema.
No row is posted twice or missed
The stored id or timestamp marks where the last run stopped. Rows are posted once, in order, and a delayed run simply catches up with everything added in the meantime.
The whole team shares the momentum
Seeing signups scroll by in a channel keeps sales, support and engineering aware of how things are going. It makes slow days visible and good days worth celebrating together. That is cheap protection.
Odd signups are spotted quickly
A burst of fake emails or a sudden jump from one region stands out in a live feed. You can add bot protection or investigate the source before the data pollutes your reports.
How it works
What happens, step by step
Every five minutes ClickRuntime checks your Supabase table for rows added since its last check.
It posts the new ones to your Slack channel, grouped together when several arrive at once.
It remembers the newest row it saw, so nothing is posted twice.
Before it runs live
- 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
- 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 Supabase steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timezone
from clickruntime import on_trigger, credentials, http, notify, state, report_fetched
SUPABASE_URL = "https://your-project.supabase.co"
def sb_headers(**extra):
key = credentials.secret("SUPABASE_SECRET_KEY")
return {"apikey": key, "Authorization": f"Bearer {key}", **extra}
@on_trigger
def run(event):
last = state.get("last_created_at") or datetime.now(timezone.utc).isoformat()
rows = http.get(f"{SUPABASE_URL}/rest/v1/users", params={"select": "email,plan,created_at", "created_at": f"gt.{last}",
"order": "created_at.asc"}, headers=sb_headers()).json()
report_fetched(len(rows))
if not rows:
return {"new": 0}
for r in rows:
notify.slack(f"New signup: {r['email']} on {r.get('plan') or 'free'}", channel="#signups")
state.set("last_created_at", rows[-1]["created_at"])
return {"new": len(rows)}FAQ
Common questions
How quickly will a new row appear in Slack?
Does it work with tables other than signups?
What if many rows arrive at once?
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
Fill in missing company details automatically
Company rows without an industry get one added, along with a short summary and social links taken from their website.
See how it worksFill a Supabase table from feeds on a schedule
New articles, prices or other public items land in your table every hour, with duplicates skipped.
See how it worksStore your app's events in Supabase
Every event your app sends to a secure link is saved as a row, and each week you get counts by event type.
See how it worksKeep exploring
Set up “Get a Slack message for every new signup” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.