Skip to content

Weekly

Get a weekly list of users who went quiet

A Monday email listing users who haven't been seen in a month, each with a drafted win-back message you can send yourself.

Runs
Weekly
Apps
Supabase
AI
Optional
Access
read

Send this to your assistant

Create a ClickRuntime automation: every Monday, email me users from my Supabase profiles table whose last_seen is more than 30 days ago, skip anyone already listed, and include a short re-engagement email draft.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A product with a few thousand accounts has a quiet churn problem: people sign up, use it a few times and drift away without cancelling anything. The last_seen date in Supabase shows it, but nobody queries it. By the time someone notices, those users have forgotten the product and a win-back email feels like spam.

Every week, ClickRuntime queries your users table by last activity, skips anyone it listed before so the same names do not repeat, and optionally asks ClickRuntime's built-in AI to draft a short win-back message tailored to what each person did. It then emails you the list with those drafts, ready to review and send.

It fits SaaS founders, community managers and customer success teams that want to reach lapsing users while a personal note can still work.

What you get out of it

  • Lapsing users get reached in time

    A note two weeks after someone goes quiet often brings them back. Waiting until they have been gone for six months makes the same message ineffective, and a weekly list keeps the window open.

  • Nobody is nagged twice

    Because users already listed are tracked in state, each person appears once. That avoids sending repeated emails to the same inactive account, which protects your sender reputation and goodwill. One name never appears twice.

  • Drafts save writing time

    A suggested message that mentions their plan or last action gives you a starting point to edit rather than a blank page. Reviewing ten drafts is much quicker than composing ten emails.

  • You learn who stopped using which feature

    The list shows last activity and any usage details you store. Patterns, such as people leaving after the first week, point to onboarding problems you can fix for everyone. Fixing that helps new users too.

  • Revenue at risk becomes visible

    If paying customers appear on the list, you know before the renewal date that they have disengaged. Reaching out early can save the account, while a cancelled subscription is much harder to reverse.

How it works

What happens, step by step

  1. Every Monday ClickRuntime looks in your database for users who haven't been active in a month.

  2. It skips users it has already listed in an earlier week.

  3. AI drafts a short win-back message for each one.

  4. You get one email with each user, when they were last seen and their draft, ready for you to send yourself.

Before it runs live

  • Connect Supabase

What you get

RunsWeekly
Get a weekly list of users who went quiettoday, 9:00Succeeded
Email · Inactive usersjordan@northwind.example (last seen 2026-09-02) Draft email: It's been a while! Here's what's new since you last logged in…

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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 Slack
  • Combine it with other Supabase steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
weekly_list_of_inactive_users.pyexample
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, notify, state, ai

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):
    cutoff = (datetime.now(timezone.utc) - timedelta(days=30)).isoformat()
    users = http.get(f"{SUPABASE_URL}/rest/v1/profiles", params={"select": "id,email,last_seen", "last_seen": f"lt.{cutoff}",
                     "order": "last_seen.asc"}, headers=sb_headers()).json()
    listed = set(state.get("listed") or [])
    new = [u for u in users if u["id"] not in listed]
    if not new:
        return {"new": 0}
    try:
        draft = ai.generate("Write a short, friendly re-engagement email for users who haven't logged in for a month.",
                            max_output_tokens=250).text
    except (ai.AINotIncluded, ai.AILimitReached):
        draft = "(AI draft unavailable this week)"
    lines = [f"{u['email']} (last seen {u['last_seen'][:10]})" for u in new]
    notify.email_me(f"{len(new)} inactive users", "\n".join(lines) + "\n\nDraft email:\n" + draft)
    state.set("listed", list(listed | {u["id"] for u in new}))
    return {"new": len(new)}

FAQ

Common questions

How is inactive defined?
By comparing a last activity column, such as last_sign_in_at or a last_seen timestamp, with a cutoff you set, for example 14 or 30 days. You choose the column and the number of days to fit how people use your product.
Is the AI draft required?
No. The draft is optional. If you prefer a plain list of names, emails and last activity dates, that works as well, and no AI step runs. Ask for drafts only for the segments where a personal tone makes a difference.
Does it send emails to the inactive users directly?
No. The email goes to you, with the list and any drafts. You decide who to contact and edit the wording before sending from your own tools, which keeps a human in charge of every outreach.
What permissions does it need?
read. Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run each time it runs (weekly). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Get a weekly list of users who went quiet” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.