Weekly
Get last week's Iterable campaign results by email
Each Monday you see sends, opens, clicks and unsubscribes for every campaign that ran the week before.
- Runs
- Weekly
- Apps
- Iterable
- AI
- Not needed
- Access
- server-side key (read)
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9am, email me a table of sends, opens, clicks and unsubscribes for each Iterable campaign that ran last week.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A marketing director meets with the team every Monday, and the first question is how last week's email campaigns performed. Getting the answer means logging in to Iterable, opening each campaign, copying opens, clicks and unsubscribes into a spreadsheet, and trying to remember how the numbers compared with the week before. By the time the table is ready, the meeting is over and the decisions about subject lines and send times are made without it.
Each week, ClickRuntime lists your Iterable campaigns, fetches the metrics for those that ran in the last seven days, and emails you a single summary. You open one message and see how every campaign did, ready for the meeting.
It suits email marketers and heads of growth who report on campaigns weekly, and agencies who run lifecycle email for several brands.
What you get out of it
The meeting starts with the data
When the summary is in your inbox before the Monday meeting, the discussion can be about what to do next. Time that used to be spent assembling numbers goes toward deciding what to test.
Campaigns are compared on equal terms
A fixed reporting week means each campaign is measured over the same period. Comparing a promotional blast with a lifecycle series is fairer when both are viewed the same way, side by side.
Weak performers are noticed quickly
A campaign with a falling click rate or rising unsubscribes shows up in the weekly table. You can adjust the subject line, audience or cadence the following week, instead of discovering the problem at the end of the quarter.
Stakeholders stay informed
Executives and sales leaders who want the headline results can be added to the email. They see the facts directly, which reduces ad hoc requests for numbers throughout the week.
A weekly archive builds a history
Each message is a snapshot of campaign results for that week. After a few months you can look back through them to see seasonal patterns without needing to run old reports.
How it works
What happens, step by step
Once a week, ClickRuntime gets your Iterable campaigns that started in the last 7 days.
For each campaign it fetches the totals for emails sent, opens, clicks and unsubscribes.
You get one email with a line per campaign. If none ran, the email says so.
Before it runs live
- Connect Iterable
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 Iterable steps into one automation
Under the hood
The code that runs this automation
import csv, io, time
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, notify, http
API = "https://api.iterable.com/api"
@on_trigger
def run(event):
headers = {"Api-Key": credentials.secret("ITERABLE_API_KEY")}
end = datetime.now(timezone.utc)
start = end - timedelta(days=7)
campaigns = [c for c in http.get(f"{API}/campaigns", headers=headers).json()["campaigns"]
if c.get("startAt", 0) / 1000 >= start.timestamp()]
lines = []
for c in campaigns:
rows = list(csv.DictReader(io.StringIO(http.get(f"{API}/campaigns/metrics", headers=headers, params={
"campaignId": c["id"], "startDateTime": start.strftime("%Y-%m-%d"),
"endDateTime": end.strftime("%Y-%m-%d")}).text)))
m = rows[0] if rows else {}
lines.append(f"{c['name']}: {m.get('Total Email Sends', 0)} sent, {m.get('Total Emails Opened', 0)} opens, "
f"{m.get('Total Emails Clicked', 0)} clicks, {m.get('Total Unsubscribes', 0)} unsubscribes")
notify.email_me("Iterable campaigns, last week", "\n".join(lines) or "No campaigns ran last week.")
return {"campaigns": len(lines)}FAQ
Common questions
Which metrics are included for each campaign?
Does it cover triggered and journey campaigns too?
Why do some opens look higher than expected?
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 daily list of Iterable unsubscribes and bounces
Each morning you get the users who opted out or bounced the day before, in one list.
See how it worksKnow the moment your website goes down
Your team hears in Slack when the site stops responding or slows down, and again when it's back.
See how it worksPost a morning briefing to Slack
Your team starts the day with the weather, a reminder or anything else you'd like in #general.
See how it worksKeep exploring
Set up “Get last week's Iterable campaign results by email” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
