Skip to content

Daily

Get warned when your list starts shrinking

You hear about it the day your main list loses profiles or unsubscribes run higher than usual.

Runs
Daily
Apps
Klaviyo
AI
Not needed
Access
read (lists, metrics)

Send this to your assistant

Create a ClickRuntime automation: every day at 7am, check my Klaviyo 'Newsletter' list and email me if the profile count dropped or unsubscribes are more than double the usual daily number.

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 Klaviyo list is an asset that quietly loses value. People unsubscribe, addresses bounce, and a badly timed campaign can lose a hundred subscribers in a day. A marketer who sends to the list most weeks will notice only when open rates have sagged for a month, by which point the causes, a purchased list or an over-aggressive send frequency, are hard to untangle.

Every day, ClickRuntime reads the current profile count for the list, compares it with the number it stored the day before, and looks at how many Unsubscribed events Klaviyo recorded over the same time. If the list has shrunk or unsubscribes pass the threshold you set, you receive an alert; on a normal day it stays quiet.

It is helpful for any brand that sends often and wants an early warning when a campaign does harm.

What you get out of it

  • A harmful send is spotted the next day

    If Thursday's blast cost 400 subscribers, you learn about it on Friday and can pause a follow-up that would have repeated the mistake. Waiting for monthly reports lets the damage compound.

  • Sender reputation is protected

    Spikes in unsubscribes and spam complaints can push your messages toward the spam folder. Catching a spike quickly gives you room to slow down and clean up before inbox providers react.

  • Shrinking lists stop being a surprise

    A list that loses a few profiles a day feels harmless until it adds up. A daily comparison shows the slow leak, so you can address its cause, such as a signup form that stopped working.

  • Tests have measurable consequences

    When you try a new send time or frequency, the alert tells you whether it cost subscribers. That evidence beats a hunch when you decide whether to keep the change.

  • Silence on normal days saves attention

    The alert only fires when something is off, so the team does not learn to ignore it. A message that appears rarely is a message that gets read and acted on.

How it works

What happens, step by step

  1. Every day ClickRuntime checks how many profiles are on your main Klaviyo list, such as your newsletter.

  2. It compares that with yesterday's count, which it saved from the last run.

  3. It also compares yesterday's unsubscribes with your usual daily number over the past month.

  4. If the list shrank or unsubscribes were more than double the usual, you get an email saying exactly what changed.

Before it runs live

  • Connect Klaviyo

What you get

RunsDaily
Get warned when your list starts shrinkingtoday, 9:00Succeeded
Email · Klaviyo Newsletter list needs a lookProfile count dropped from 24,310 to 24,105 96 unsubscribes yesterday vs about 31 a day usually

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
  • 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 Klaviyo 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.
list_health_decay_alert.pyexample
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, state, notify

API = "https://a.klaviyo.com/api"
NEWSLETTER_LIST_ID = "Xy12Ab"
UNSUB_METRIC_ID = "UnS8bz"

def klaviyo():
    return {"Authorization": f"Klaviyo-API-Key {credentials.secret('KLAVIYO_API_KEY')}",
            "revision": "2024-10-15", "accept": "application/vnd.api+json", "content-type": "application/vnd.api+json"}

@on_trigger
def run(event):
    h = klaviyo()
    count = http.get(f"{API}/lists/{NEWSLETTER_LIST_ID}", params={"additional-fields[list]": "profile_count"},
                     headers=h).json()["data"]["attributes"]["profile_count"]
    start = date.today() - timedelta(days=29)
    body = {"data": {"type": "metric-aggregate", "attributes": {
        "metric_id": UNSUB_METRIC_ID, "measurements": ["count"], "interval": "day", "timezone": "UTC",
        "filter": [f"greater-or-equal(datetime,{start}T00:00:00)", f"less-than(datetime,{date.today()}T00:00:00)"]}}}
    daily = http.post(f"{API}/metric-aggregates", json=body, headers=h).json()["data"]["attributes"]["data"][0]["measurements"]["count"]
    usual, yday = sum(daily[:-1]) / max(len(daily) - 1, 1), daily[-1]
    previous = state.get("profile_count")
    problems = []
    if previous and count < previous:
        problems.append(f"Profile count dropped from {previous:,} to {count:,}")
    if usual and yday > 2 * usual:
        problems.append(f"{yday:.0f} unsubscribes yesterday vs about {usual:.0f} a day usually")
    if problems:
        notify.email_me("Klaviyo Newsletter list needs a look", "\n".join(problems))
    state.set("profile_count", count)
    return {"profile_count": count, "unsubs": yday}

FAQ

Common questions

What threshold should I use for unsubscribes?
A good starting point is a share of your list, such as 0.5 percent in a day, or a fixed number that is clearly unusual for you. Check a couple of weeks of normal days first. You can give your assistant the number and adjust it after a few alerts.
How does it detect that the list shrank?
On each run it reads the list's profile count from Klaviyo and compares it with the count saved from the previous run. If the new number is lower by more than your tolerance, the alert fires. The first run only stores the baseline and sends nothing.
Does it watch all my lists or only one?
The setup watches the list or lists you name. Many people begin with their main newsletter list, then add a VIP or customer list later. Each list is compared against its own stored count, so a change in one does not mask another.
What permissions does it need?
read (lists, metrics). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (daily). 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 warned when your list starts shrinking” from your assistant

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