Skip to content

Daily

Post yesterday's Braze campaign stats to Slack

Each morning your team sees sends, opens, conversions and revenue for your main campaigns, by channel.

Runs
Daily
Apps
Braze
AI
Not needed
Access
campaigns.data_series

Send this to your assistant

Create a ClickRuntime automation: every day at 9am, post yesterday's sends, opens, conversions and revenue for my Braze campaigns 'Welcome Series' and 'Spring Sale' to #growth in Slack, split by channel.

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

A lifecycle marketer at a company using Braze usually launches several campaigns at once: a welcome series, a cart reminder, a win-back push. Results are in the Braze dashboard, but checking each campaign one by one takes ten minutes, and on busy days it simply does not happen. A campaign with falling opens or a broken conversion link can run for a week before anyone looks.

Each day, ClickRuntime goes through the campaigns you have configured, calls the Braze data series endpoint with length set to one day, and totals the results per channel. It then posts yesterday's sends, opens, conversions and revenue to Slack in one message, so the numbers are in front of the team before the morning stand-up.

Marketing managers and growth teams that live in Slack tend to prefer this to opening another dashboard.

What you get out of it

  • Underperformance is caught the next morning

    If yesterday's open rate halves, the post makes it obvious right away. A fix the next day is far cheaper than a week of weak sends going out to your whole audience.

  • Revenue attribution stays in view

    Seeing conversions and revenue beside sends keeps the team focused on outcomes. Campaigns that look busy but earn nothing get questioned sooner. Campaigns that look busy but earn nothing get questioned while there is still budget and time to change them.

  • Everyone shares the same numbers

    A single post in a channel means product, sales and marketing all see identical results. Debates about whose screenshot is right disappear. No more arguments about which export or screenshot is the latest, because the Slack message is the one record everybody refers to.

  • Channel mix is easy to compare

    Totals per channel show whether email, push or in-app messages did the work. That informs where to spend the next hour of creative effort. A team that learns push outperforms email for one audience can shift its effort the same week instead of next quarter.

  • The dashboard visit becomes optional

    Reading a short message replaces ten minutes of clicking through campaigns. The saved attention goes into improving copy and timing. A short message replaces a click-through of several campaign pages, and busy managers actually read it every single day.

How it works

What happens, step by step

  1. Every morning, ClickRuntime fetches yesterday's numbers from Braze for the campaigns you chose, such as Welcome Series and Spring Sale.

  2. For each campaign it notes the conversions and revenue.

  3. It also breaks down sends and opens by channel, such as email or push.

  4. It posts the summary to #growth in Slack.

Before it runs live

  • Connect Braze

What you get

RunsDaily
Post yesterday's Braze campaign stats to Slacktoday, 9:00Succeeded
Slack · #growthWelcome Series: 42 conversions, $1,980.00 revenue email: 3,120 sent, 1,410 opens

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

  • 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 Braze 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.
daily_campaign_stats_to_slack.pyexample
from clickruntime import on_trigger, credentials, notify, http

BRAZE = "https://rest.iad-01.braze.com"
CAMPAIGNS = {"Welcome Series": "campaign-id-1", "Spring Sale": "campaign-id-2"}

@on_trigger
def run(event):
    headers = {"Authorization": f"Bearer {credentials.secret('BRAZE_API_KEY')}"}
    lines = []
    for name, cid in CAMPAIGNS.items():
        day = http.get(f"{BRAZE}/campaigns/data_series", headers=headers,
                       params={"campaign_id": cid, "length": 1}).json()["data"][0]
        lines.append(f"*{name}*: {day.get('conversions', 0)} conversions, ${day.get('revenue', 0):,.2f} revenue")
        for channel, variants in day["messages"].items():
            sent = sum(v.get("sent", 0) for v in variants)
            opens = sum(v.get("unique_opens", v.get("direct_opens", 0)) for v in variants)
            lines.append(f"  {channel}: {sent} sent, {opens} opens")
    notify.slack("Braze yesterday\n" + "\n".join(lines), channel="#growth")
    return {"campaigns": len(CAMPAIGNS)}

FAQ

Common questions

Which campaigns are included?
The ones you list in the workflow. The run calls Braze once per configured campaign ID. If you launch a new campaign you want covered, add its ID and review the updated workflow before approving it.
Why does it use one day of data?
The data series call is requested with a length of one day, giving yesterday's totals each run. That keeps the post focused on the latest results. If you prefer a seven-day view, the length can be changed.
What access does Braze require?
You need a REST API key that allows campaign analytics, plus your Braze REST endpoint for your region. The key is kept as a secret. Generate a key limited to the permissions the workflow needs.
What permissions does it need?
campaigns.data_series. 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 each time it runs (daily). Checks that find nothing to do and stop right away aren't counted.
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 “Post yesterday's Braze campaign stats to Slack” from your assistant

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