Monthly
Clean out subscribers who stopped opening
Once a month you get the people with no opens in six months, and they are archived only after you approve.
- Runs
- Monthly
- Apps
- Mailchimp
- AI
- Not needed
- Access
- read+write
Send this to your assistant
Create a ClickRuntime automation: on the 1st of every month, find Mailchimp subscribers with no opens in 180 days, email me the list, and archive them after I reply yes.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A list of 12,000 contacts can quietly contain 4,000 people who stopped opening anything a year ago. They still count toward your Mailchimp bill, they drag down your open rate, and mailbox providers read a steady stream of ignored email as a sign you may be sending something unwanted. That hurts delivery for the readers who do care.
Once a month, this finds members whose engagement is low, based on their `member_rating` and last open, and emails you the list. Nothing is removed on its own. When you approve, the contacts are archived, or tagged "inactive" if you would rather keep them reachable for a final win-back campaign.
It is most useful for ecommerce stores and newsletters that have grown through giveaways or imports, where the list is full of people who signed up once and never engaged.
What you get out of it
Lower bill without losing real readers
Mailchimp prices by audience size, so archiving contacts who never open means you stop paying to email them. Because you review the list first, a customer who reads but never clicks is not removed by mistake.
Better inbox placement for everyone else
Sending to people who ignore you for months signals low engagement to mailbox providers. Trimming those contacts keeps your sender reputation healthy, so mail reaches the inbox of subscribers who still want it.
Honest numbers in every report
An open rate computed over a clean list reflects real interest. When you report to a manager or client, the figure is not diluted by thousands of dormant addresses that were never going to respond.
A gentler option than deleting
Tagging as inactive keeps the address available. You can run one last re-engagement campaign to that tag, and only archive those who still stay silent, which recovers some readers you would have lost.
Cleanup that actually happens
List hygiene is the chore everyone plans and nobody schedules. A monthly run keeps the audience from drifting back to thousands of dead contacts between the yearly cleanups that tend to be skipped.
How it works
What happens, step by step
Once a month, ClickRuntime finds Mailchimp subscribers who have not opened an email in a long time.
You get an email with the count and the list of addresses.
Once you approve, those subscribers are archived or tagged inactive, so you stop paying for and sending to people who never read.
Before it runs live
- Connect Mailchimp
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
- Run it at a different time, more or less often, or only on weekdays
- 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 Mailchimp steps into one automation
Under the hood
The code that runs this automation
import hashlib
from datetime import datetime, timedelta, timezone
from clickruntime import on_event, on_trigger, http, credentials, notify, state
LIST_ID = "AUDIENCE_ID"
def mailchimp(method, path, **kw):
key = credentials.secret("MAILCHIMP_API_KEY")
r = http.request(method, f"https://{key.split('-')[-1]}.api.mailchimp.com/3.0{path}", auth=("clickruntime", key), **kw)
r.raise_for_status()
return r.json() if r.content else None
@on_trigger
def find_inactive(event):
cutoff = (datetime.now(timezone.utc) - timedelta(days=180)).isoformat()
members = mailchimp("GET", f"/lists/{LIST_ID}/members", params={"status": "subscribed", "count": 1000,
"fields": "members.email_address,members.last_changed,members.stats"})["members"]
inactive = [m["email_address"] for m in members if m["last_changed"] < cutoff and m["stats"]["avg_open_rate"] == 0]
state.set("pending", inactive)
notify.email_me(f"{len(inactive)} subscribers with no opens in 180 days",
"\n".join(inactive) + "\n\nReply yes in ClickRuntime (send {\"confirm\": \"yes\"} to the trigger link) to archive them.")
return {"inactive": len(inactive)}
@on_event
def confirm(event):
if (event.json or {}).get("confirm") != "yes":
return {"archived": 0}
pending = state.get("pending") or []
for email in pending:
mailchimp("DELETE", f"/lists/{LIST_ID}/members/{hashlib.md5(email.lower().encode()).hexdigest()}")
state.delete("pending")
return {"archived": len(pending)}FAQ
Common questions
What counts as an inactive subscriber here?
Does archiving a contact delete them permanently?
Can I use a different cutoff than six months?
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 a weekly Mailchimp campaign report
Each Monday you see open rate, click rate and unsubscribes for every campaign sent the week before.
See how it worksGet a morning list of new subscribers
Each morning you see who joined your list in the last day, with names and sign-up source.
See how it worksPost your daily audience numbers to Slack
Each morning Slack shows your audience size and how many people joined and left since yesterday.
See how it worksKeep exploring
Set up “Clean out subscribers who stopped opening” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.