# Klaviyo list health and sunset workbench for deliverability

> Clean your email list from one screen: see every audience, review who is in it, and suppress unengaged people in batches a human approves first.

- Workflow type: app
- Services: Klaviyo, Google Sheets
- Categories: Marketing, Operations
- Published: 2026-08-31

## What it does

- Shows every list and segment in your Klaviyo account with its current size and how it has moved since last time, so stale audiences are obvious at a glance.
- Opens any audience into a searchable table of people with their subscription and suppression status, plus checkboxes and bulk buttons to suppress, unsubscribe, move people onto a fresh sunset list, or reverse a suppression made in error.
- A "Run a list health audit" button sends a background assistant through your audiences, campaign results and automation performance to propose a specific suppression batch in plain language. Nothing is suppressed until a person ticks it and confirms.
- Every bulk action shows the exact count before it runs, and every applied action is logged in the app with who did it and when, then copied to a Google Sheet as an audit trail outside the tool.

## What you'll need

- A Klaviyo account with permission to create an API key (owner, admin or manager role).
- A Google account and a spreadsheet where the audit trail rows should land.
- Segments you already use in Klaviyo to describe engagement, such as a never engaged or unengaged in 90 days audience. The health audit leans on the segments your team has defined.

## Prompt

Build me a list health and sunset workbench for Klaviyo. The person who owns email deliverability should have one screen for list cleaning instead of clicking through profiles and suppression menus. Browsing audiences, reviewing who is in them, and applying suppression or list changes in bulk all happen in the app.

The landing view is an audience table listing every list from Get Lists and every segment from Get Segments together, with a type column so lists and segments sit side by side. Each row shows the audience name, its current profile count, and how that count has moved since the app last looked. Store a snapshot of each audience size whenever the landing view loads or an audit runs, so the movement column has something to compare against, and show the change as a number with a direction. On first load there is no history yet, so show a neutral placeholder rather than a misleading zero.

Clicking any row opens a profile table for that audience. For a segment, pull members with Get Profiles for Segment. For a list, use Get Profiles for List. Each row shows the person's email, when the profile was created and last updated, and their current email marketing subscription state and suppression state as clear labels such as Subscribed, Unsubscribed or Suppressed, including the suppression reason when Klaviyo provides one. Page through large audiences using the cursor Klaviyo returns rather than loading everything at once, and let the viewer filter the table by subscription and suppression state and search by email. Use Get Profiles when the viewer wants to search the whole account instead of a single audience, and Get Segments for Profile on an individual row to show which other segments that person sits in.

Every row has a checkbox, with a select all control for the current page. With rows selected, the viewer can run Suppress Profiles (Bulk), Unsubscribe Profiles (Bulk), Add Profiles to List and Remove Profiles from List. Unsuppress Profiles (Bulk) is there to reverse a mistake, and Subscribe Profiles (Bulk) to put someone back on. A Create List button uses Create List to spin up a fresh sunset audience, so a batch can be parked somewhere before anything is suppressed.

Put a confirmation step in front of every bulk action. Suppression is hard to undo at scale, so before anything runs, show a dialog with the exact count of profiles affected, the action name, the audience they came from, and a sample of the addresses, and require the viewer to confirm. Nothing fires straight from a toolbar button.

Add a "Run a list health audit" button that starts a background agent. The agent walks the account segments with Get Segments and Get Profiles for Segment to size up the engagement cohorts the marketer has already defined, pulls campaign engagement with Query Campaign Values and automation performance with Query Flow Values over a recent window, and works out which cohorts are dragging inbox placement down. It writes a plain language recommendation back into the app covering what it found, which cohorts look unengaged and why, and a specific proposed suppression batch with the profiles named and a reason attached. Important for the build: Klaviyo has no documented per-profile event read operation, so the agent should reason from segment membership plus aggregate campaign and flow analytics rather than trying to reconstruct per-person open and click history.

The agent only ever proposes. Nothing is suppressed automatically. Its recommendation lands in a proposals view where a human reads it, ticks the batch or edits which profiles are included, and confirms through the same count-first dialog before anything is applied. An unreviewed proposal simply sits there until someone acts on it.

Every applied action is written to an in-app log recording the action, the audience, the profile count, the addresses involved, who did it, when, and whether it came from an agent proposal or a manual selection. The log is a view in the app filterable by date and action. Each applied action is also appended to a Google Sheet with Append Values, one row per action carrying the same fields, so there is an audit trail outside the tool. Make the spreadsheet and tab configurable in the app.

Two practical notes. Klaviyo rate limits its reporting endpoints far more tightly than its list and profile endpoints, so the agent should pull campaign and flow analytics sparingly and reuse what it fetched within a run. Bulk profile jobs are processed asynchronously by Klaviyo, so reflect that in the interface: show the action as submitted and let the viewer refresh the audience rather than promising an instant change.

## How to customize

- Change the engagement window the audit reviews, for example the last 90 days instead of the last 30.
- Point the audit trail at a different spreadsheet or tab, or add columns such as a reason code for each batch.
- Adjust which bulk buttons appear, for example hiding unsubscribe if your team only ever suppresses.

## FAQ

### Will this suppress anyone automatically?

No. The health audit only writes a proposal into the app. A person has to read it, tick the batch and confirm the exact count before anything is applied to your account.

### Can I undo a suppression if a batch went too far?

Yes. Unsuppressing is one of the bulk actions, so you can select those people and reverse it. The in-app log records exactly who was in each batch, so you know who to put back.

### Does it work with the segments I already have?

Yes, and that is the intent. The audit reads the engagement segments your team has already defined rather than inventing its own definition of unengaged, so it matches how you already think about your list.

### What happens with very large lists?

The people table pages through large audiences rather than loading everything at once, and bulk changes are handed to Klaviyo to process in the background, so you refresh the audience to see the result rather than waiting on the screen.

### Do I have to use the Google Sheet?

Only if you want a record outside the app. The in-app log captures every applied action either way, and the sheet is there for teams who need the trail to live somewhere their tooling cannot change.

Use this prompt in General Input: https://www.generalinput.com/prompts/klaviyo-list-health-and-sunset-workbench-for-deliverability