Skip to content

The moment it happens

Get Slack alerts for bounces and spam complaints

Each bounced or spam-flagged email shows up in Slack with the person and the message, as it happens.

Runs
The moment it happens
Apps
Customer.io
AI
Not needed
Access
none for receiving (signing key to verify)

Send this to your assistant

Create a ClickRuntime automation: whenever a Customer.io email bounces or is marked as spam, post the person's email, the message name and the event type to #deliverability in Slack.

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

Bounces and spam complaints damage sender reputation quickly. A single campaign to an old list can produce hundreds of bounces, and a handful of spam complaints can push a domain toward the junk folder. Customer.io reports these in its dashboards, but marketing and engineering often notice only after deliverability has already dropped.

When Customer.io sends a reporting webhook event, this verifies the X-CIO-Signature header to confirm it really came from Customer.io, filters for bounce and spam complaint events, and posts them to Slack. You add the trigger link as a reporting webhook in Customer.io.

It is valuable for lifecycle marketers and growth engineers who send large volumes of email and need to react quickly. Before anything is posted, the X-CIO-Signature header is verified, so the channel only ever shows real delivery problems reported by your Customer.io workspace and not spoofed events.

What you get out of it

  • Protect your sender reputation

    Spam complaints hurt most when they accumulate unnoticed. Seeing them quickly lets you stop the offending campaign or clean the list before inbox providers penalise you. A handful of spam complaints can push a domain toward the junk folder, and stopping the offending send early limits the damage.

  • Fix bad addresses fast

    Hard bounces mean an address will never work. Learning about them promptly lets you remove or correct them so you stop sending to dead mailboxes. A hard bounce means an address will never work, and removing it promptly stops you sending to dead mailboxes.

  • Find the campaign causing trouble

    A cluster of events in Slack right after a send points to that campaign. You can pause similar sends before they do wider damage. A burst of events right after a send points to that campaign, and you can pause similar sends before the problem grows.

  • Trust that alerts are genuine

    Signature verification means only real Customer.io events produce posts. Nobody can flood your channel with fake complaints. Only requests with a valid signature produce posts, so nobody can flood your channel with fake complaints.

  • Keep engineering and marketing aligned

    Both teams see the same alerts in one channel. A technical cause, such as a bad DNS record, gets noticed because the right people are watching. Marketing and engineering both watch the same channel, so a technical cause such as a broken DNS record gets noticed.

How it works

What happens, step by step

  1. When an email bounces or is marked as spam in Customer.io, Customer.io tells ClickRuntime straight away.

  2. ClickRuntime first checks that the message really came from Customer.io and rejects anything that doesn't.

  3. It ignores every other kind of email activity.

  4. It posts to #deliverability in Slack saying Bounced or Marked as spam, with the recipient and the subject line.

Before it runs live

  • Connect Customer.io
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Get Slack alerts for bounces and spam complaintsjust nowSucceeded
Slack · #deliverabilityBounced: old@northwind.com on "Your October invoice"

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

  • Act only on the items that match your own rules, and skip the rest
  • 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 Customer.io 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.
bounce_spam_complaint_alert.pyexample
from clickruntime import on_event, notify, log

LABELS = {"bounced": "Bounced", "spammed": "Marked as spam"}

@on_event
def handle(event):
    if not event.is_verified:
        log.warning("rejected delivery with a bad X-CIO-Signature")
        return {"posted": False}
    e = event.json or {}
    label = LABELS.get(e.get("metric"))
    if e.get("object_type") != "email" or not label:
        return {"posted": False}
    d = e.get("data") or {}
    notify.slack(f"{label}: {d.get('recipient')} on \"{d.get('subject')}\"", channel="#deliverability")
    return {"posted": True}

FAQ

Common questions

Which events are included?
Bounce and spam complaint events from Customer.io's reporting webhooks. Other events such as opens and clicks are filtered out, so the Slack channel stays focused on the delivery problems that need action. Bounce and spam complaint events come from the reporting webhooks, and opens and clicks are filtered out so the channel stays focused.
How is the webhook verified?
Customer.io signs each request, and the automation checks the X-CIO-Signature header using a signing secret stored securely. Requests without a valid signature do not produce a post. Customer.io signs each request, and the signature is checked against a signing secret that is stored securely before anything is posted.
Can I include the campaign name in the message?
If the event data from Customer.io includes it, yes. Tell your AI assistant to add the campaign or message identifier and approve the updated layout before it is swapped in. The campaign or message identifier can be added when the event includes it.
What permissions does it need?
none for receiving (signing key to verify). 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 for each event the app sends.
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 Slack alerts for bounces and spam complaints” from your assistant

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