# Brevo list health check before every marketing send

> See which Brevo lists are putting your sender reputation at risk, then re-engage or clean up the contacts dragging them down.

- Workflow type: app
- Services: Brevo, Google Sheets, Slack Bot
- Categories: Marketing, Operations
- Published: 2026-08-16

## What it does

- Ranks every one of your Brevo contact lists worst first, showing each list's subscriber count beside its hard bounce, soft bounce, unsubscribe and complaint rates for the last 90 days.
- Raises a red flag on any list that crosses a risk threshold you set, so you know before you hit send whether a list is safe to mail.
- Opens a triage pane on any list where you tick the problem contacts and then re-engage them, blocklist them, take them off that one list, or delete them outright.
- Appends every removal to a Google Sheets audit tab and posts a short session recap to your marketing channel in Slack, so you can prove what you cleaned and when.

## What you'll need

- A Brevo account containing the contact lists and email campaigns you send from
- A Google Sheets spreadsheet with a tab set aside for the cleanup audit log
- A Slack workspace and the channel where your marketing team wants the session recap
- A rough idea of the bounce and complaint rates you consider risky, which you can change inside the app at any time

## Prompt

Build me an app that my marketing ops person opens before every send, to check that our Brevo lists are not putting our sending reputation at risk. It is a list level triage console: the risk scoring and the actual cleanup both happen inside the app.

The home view is a list health table. Use Brevo List Contact Lists to get every contact list, and Get List Details for each one to pull its subscriber count and list level statistics. For each list, calculate hard bounce, soft bounce, unsubscribe and complaint rates over the last 90 days: use List Email Campaigns to find the campaigns sent to that list and read their statistics, and use Get Email Event Reports over the same 90 day window to count the individual hard bounce, soft bounce, unsubscribe and complaint events attributable to that list. Render one row per list showing the list name, the subscriber count, and then the four rates side by side. Sort the table worst first using a combined risk score that weights hard bounces most heavily. Show a red flag on any row where a rate crosses its threshold, and make the offending cell itself visibly red so it is obvious which metric caused the flag.

Thresholds are configurable by the user and must persist between sessions. Give me a settings area where I can set a threshold per metric, with sensible defaults to start from (roughly 2 percent hard bounce, 5 percent soft bounce, 0.5 percent unsubscribe, 0.1 percent complaint). Also let me change the 90 day reporting window. Show the current thresholds somewhere on the home view so it is always clear what the red flags are measured against.

Clicking a list row opens a triage pane for that list. Populate it with the list's problem contacts using List Contacts scoped to that list, and use Get Contact to pull the detail for contacts as they are inspected, including bounce history, existing blocklist status and last engagement. Label each contact with the reason it is a problem, such as hard bounced, repeatedly soft bounced, complained, or never opened in the window. Every contact row has a checkbox so I can select many at once, with a select all for each reason group.

With contacts ticked, I can take one of four actions. Send a re-engagement email using Send Transactional Email. Blocklist them using Update Contact to set their blacklist status. Take them off this one list only using Remove Contacts from List. Or delete them entirely using Delete Contact. Show the selected count on each action button.

Bake in two rules. First, nothing destructive happens without a confirm step showing exact counts. Blocklisting, removing from a list and deleting must each open a confirmation that states precisely how many contacts are affected, names the list involved, and describes what will change, with an explicit confirm to proceed. Never fire a destructive action straight from a single click, and never silently expand the selection. Second, re-engagement is always offered before removal. When I choose to blocklist, remove or delete, the confirm step must tell me how many of the selected contacts have not yet been sent a re-engagement email, and present re-engaging them as the recommended alternative alongside the destructive action. The reason matters and should be visible in the UI: Brevo automatically blocklists hard bounces only after the damage is done, and a high hard bounce rate can get an entire account suspended, so the app exists to catch this before a send rather than after.

Every removal is appended to a Google Sheets audit tab using Append Values, so we can prove what we cleaned and when. Write one row per affected contact with the timestamp, the list name, the contact email, the action taken (blocklisted, removed from list, or deleted), the reason it was flagged, and the metric value that triggered the flag.

When I finish a session, post a one paragraph summary to our marketing channel using Slack Bot Send a Message. The summary should say which lists were reviewed, how many contacts were re-engaged, blocklisted, removed and deleted, and which lists are still above threshold and should not be mailed yet.

Keep the home table fast to scan, since it is the thing I look at before every send. Handle large lists with pagination in the triage pane, and show a clear loading state while the 90 day statistics are being assembled, because that is the slowest part of the app.

## How to customize

- Set your own red flag thresholds for hard bounces, soft bounces, unsubscribes and complaints, and tighten them as your sending volume grows
- Change the reporting window from 90 days to whatever matches how often you actually send
- Reword the re-engagement email, or point the audit log and the session recap at a different spreadsheet and Slack channel

## FAQ

### Will this delete contacts without asking me first?

No. Nothing destructive happens on a single click. Blocklisting, removing from a list, and deleting all pass through a confirmation step that spells out exactly how many contacts are affected, which list they belong to, and what will happen to them. You have to confirm before anything changes in Brevo.

### Why does it push a re-engagement email before letting me remove anyone?

Because removal is permanent and quiet contacts are not always dead contacts. The app always offers a re-engagement send first and tells you how many of the contacts you selected have not been given that chance yet, so you only clean up the addresses that genuinely will not come back.

### How is this different from just looking at my Brevo dashboard?

Brevo's built in hygiene tooling is largely reactive, suppressing hard bounces after they have already happened. This app is preventive: it scores every list before you send, ranks the risky ones first, and gives you the cleanup actions in the same screen instead of sending you hunting through separate reports.

### What counts as a risky list?

You decide. You set a threshold for each rate and any list above it gets flagged red. Hard bounces are the one to watch most closely, since a high hard bounce rate is what puts an entire sending account at risk of suspension.

### Can I prove to my team what was cleaned up?

Yes. Every removal is written to a Google Sheets audit tab with the date, the list, the contact, the action taken and the reason it was flagged. A one paragraph summary of each session also lands in your marketing Slack channel.

Use this prompt in General Input: https://www.generalinput.com/prompts/brevo-list-health-check-before-every-marketing-send