# Monthly Mailjet list cleanup desk with a running audit trail

> Open one screen before every big send to see which Mailjet lists are risky, clean them in bulk with a confirmation step, and keep a hygiene history that outlasts Mailjet's reporting.

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

## What it does

- See every contact list in one scorecard, with subscriber count next to its bounce, spam complaint, unsubscribe and open rates, sorted so the riskiest lists float to the top.
- Open any list to see its members grouped into hard bounced, complained, never opened and dormant, then select rows and unsubscribe or remove them after a confirmation step that names the count.
- Spin the dormant group into a brand new re-engagement list in one click, so you can try to win people back before you suppress them.
- Hit Audit this list and an assistant reads the full picture for that list plus your past cleanups, then writes a prioritized plan naming what to suppress and whether the list is safe to send to.

## What you'll need

- A Mailjet account with contact lists and some sending history behind them
- A Google account and a spreadsheet where the cleanup history should live
- A rough view of what counts as dormant for your audience, which we start at no opens in 180 days

## Prompt

Build me a contact list health workbench for Mailjet that I open once a month to decide which lists need cleaning before the next big send. This is a working surface, not a report: I browse, I select, I act, and I keep a record. Nothing runs on a schedule.

Home view: a scorecard of every contact list. Use Mailjet List and retrieve contact lists for the lists and their subscriber counts, Get aggregated statistics counters scoped to each contact list for delivered, bounce, hard bounce, spam complaint, unsubscribe and open rates, and List and retrieve list-recipient statistics for the per-recipient engagement rollup behind each list. Show one row per list with subscriber count and those rates side by side, color coded against configurable thresholds. Compute a simple risk score from bounce rate, complaint rate, unsubscribe rate and open rate, and sort so the riskiest lists float to the top. Remember that Mailjet list endpoints page with Limit and Offset, so page through until you have every list rather than showing the first ten.

Drill into a list and show its members with engagement detail, using List and retrieve list recipients paged with Limit and Offset. Bucket the members into four tabs: hard bounced, complained, never opened, and dormant. Dormant means no opens in the last N days, defaulting to 180 but adjustable from a settings panel and overridable for the list I am looking at. Each tab is a table with checkboxes, a select all, and the contact's email, subscription status, last activity date and open and click counts in view so I can sanity check before acting.

From a selection I can act. Unsubscribe the selected contacts from that list, or remove them from that list entirely, both through Bulk manage many contacts in a list. Always require a confirmation step first: a dialog that names the list, the action, and the exact number of contacts, which I have to confirm before anything is sent. Mailjet's bulk contact endpoints are asynchronous, so the handler should take the JobID the POST returns, poll for status, show progress in the UI, and report the final result rather than claiming success immediately.

I also want to turn the dormant bucket into a re-engagement segment. A Build re-engagement list button takes the current dormant selection, calls Create a contact list with a suggested name I can edit, such as reengage-<list name>-<year-month>, then loads those contacts into the new list with Bulk manage many contacts in a list. The app should not send anything: it just hands me a real Mailjet list I can campaign to myself.

Every completed cleanup action appends an audit row to a Google Sheet using Google Sheets Append Values: date, list name, list ID, action taken, contact count, the dormant threshold used, and the resulting subscriber count. Read prior rows back with Google Sheets Get Values so the app can show a history panel per list and a diff of this month against the last audit, since that history outlives Mailjet's own reporting window. Let me set the spreadsheet ID and tab name in settings.

Add an Audit this list button that kicks off a background agent for the selected list. The agent pulls that list's Get aggregated statistics counters, plus Get geographical statistics, Get user-agent statistics and Get link-click statistics, and reads the prior audit rows for that list from the Sheet with Google Sheets Get Values to see what changed since last time. It then writes a prioritized cleanup plan back into the app, stored against the list and rendered in a panel next to the scorecard row: which specific segments to suppress and roughly how many contacts each is, what moved since the last audit, and a clear verdict on whether the list is safe to send to. Show the run status while it works so I know it is still going.

Settings should cover the dormant threshold, the bounce, complaint and unsubscribe rates that mark a list as risky, and the audit spreadsheet. The confirmation step before any removal or unsubscribe is not optional and cannot be turned off.

## How to customize

- Change the dormant window from 180 days to whatever matches how often you actually send
- Adjust the bounce and complaint rates that mark a list as risky so the scorecard matches your own standards
- Choose whether a cleanup unsubscribes people or removes them from the list entirely, and point the audit log at any spreadsheet you like

## FAQ

### Will it remove contacts without asking me first?

No. Every removal or unsubscribe goes through a confirmation step that spells out the list, the action and exactly how many contacts are affected before anything happens.

### What counts as a dormant contact?

By default, anyone who has not opened an email from you in 180 days. That matches the common guidance to sunset unengaged subscribers around the six month mark, and you can move the threshold up or down at any time.

### Does this send the re-engagement campaign for me?

No. It builds the dormant group into a real contact list in your Mailjet account, so you can send to it from Mailjet with whatever campaign and template you want.

### Why keep the cleanup history in a spreadsheet?

Mailjet only keeps reporting for a limited window. A spreadsheet gives you a permanent record of every cleanup, which is what lets the app show you how a list changed since your last pass.

### Does anything run on a schedule?

No. This is a screen you open when you want it, typically once a month or right before an unusually large send. Nothing is cleaned unless you sit down and approve it.

Use this prompt in General Input: https://www.generalinput.com/prompts/monthly-mailjet-list-cleanup-desk-with-a-running-audit-trail