Collects as they arrive, acts daily
Get a daily list of failed Resend emails
One email each evening groups the day's bounces, failures and complaints by type.
- Runs
- Collects as they arrive, acts daily
- Apps
- Resend
- AI
- Not needed
- Access
- as above
Send this to your assistant
Create a ClickRuntime automation: collect Resend bounces, failed sends and spam complaints during the day and email me one summary at 6pm, grouped by type.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
If your product sends many emails through Resend, an alert for each failure is too much. A burst of twenty bounces after a bad import would flood the channel, and people mute it. Yet nobody wants to find out three weeks later that a steady trickle of failures has been growing. The need is a calm summary, not a stream of interruptions.
Throughout the day, ClickRuntime stores each delivery failure event that Resend reports. At 18:00 it groups them by type, such as bounced, complained or delayed, and posts a single message listing every failed email with its recipient and reason. Days with no failures produce a short all-clear or nothing at all.
Teams who send moderate to high volumes of email and prefer one daily check to constant alerts will like this approach.
What you get out of it
One message replaces a stream
A single end-of-day list is far easier to read than dozens of pings. People actually look at it, which is the point of any report. The summary respects people's attention.
Grouping reveals the cause
Seeing twelve bounces to one domain next to three spam complaints tells a clearer story than separate alerts. The grouping points to a bad list or a content problem. Patterns that individual pings hide become obvious.
Trends show up in the numbers
A daily list of failures lets you see if the count is rising. A slow climb in the number of bounces is a warning that your list quality is falling.
Evenings are a natural review point
18:00 lands before people leave, so any urgent problem can be handled the same day. A list at the end of the day also keeps mornings interruption free. Urgent items still get handled before people log off.
Nothing is lost between checks
Every event is stored until the digest goes out. Even failures that arrive at 3am are included, so the list is complete when you read it. You never wonder whether an overnight failure slipped by.
How it works
What happens, step by step
Throughout the day, Resend tells ClickRuntime about every bounce, failed send and spam complaint, and the automation saves each one.
At 18:00 it groups the day's problems by type.
You get one email listing each group with the recipient and subject of every affected email.
Before it runs live
- Connect Resend
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
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 Resend steps into one automation
Under the hood
The code that runs this automation
from collections import defaultdict
from clickruntime import on_event, on_trigger, notify, state
TYPES = {"email.bounced": "Bounced", "email.failed": "Failed", "email.complained": "Spam complaints"}
@on_event
def remember(event):
body = event.json or {}
if body.get("type") not in TYPES:
return {"skipped": body.get("type")}
data = body["data"]
pending = state.get("pending") or []
pending.append({"type": body["type"], "to": ", ".join(data.get("to", [])), "subject": data.get("subject", "")})
state.set("pending", pending[-500:])
return {"stored": len(pending)}
@on_trigger
def send_digest(event):
pending = state.get("pending") or []
if not pending:
return {"sent": False}
groups = defaultdict(list)
for p in pending:
groups[TYPES[p["type"]]].append(f" {p['to']}: {p['subject']}")
text = "\n\n".join(f"{name} ({len(rows)})\n" + "\n".join(rows) for name, rows in groups.items())
notify.email_me(f"Resend: {len(pending)} delivery problems today", text)
state.set("pending", [])
return {"sent": True, "count": len(pending)}FAQ
Common questions
Why use a digest instead of immediate alerts?
Can I change the time of day?
What happens on a day with no failures?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get alerted when a Resend email bounces
You hear about every bounce and spam complaint within moments, with the address, subject and reason.
See how it worksCollect unsubscribes and bounces for your list
Unsubscribe requests and bounced emails are labelled, and you get the addresses once a day to clean your list.
See how it worksKeep a daily journal Doc
Notes you send during the day are added to a running Doc under today's date each evening.
See how it worksKeep exploring
Set up “Get a daily list of failed Resend emails” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.