MARKETING

Daily UTM Campaign Spend-to-Revenue Rollup

Every morning, joins yesterday's ad spend from BigQuery against Stripe revenue by UTM campaign and posts a per-campaign ROAS table to Slack.

CategoryMarketing
Enginesim
Difficultyintermediate
Triggerschedule
Steps5
Setup~15 min

How it runs

The automated pipeline, trigger to output.

  • TriggerDaily 7am schedule
  • ActionQuery yesterday's spend by UTM campaignGoogle BigQueryBigQuery
  • ActionPull Stripe charges and group by UTM metadataStripeStripe
  • LogicJoin, compute ROAS, flag below break-even
  • OutputPost ranked ROAS table to SlackSlack

What it does

Each morning this workflow reconciles what you spent on each UTM-tagged campaign against the revenue those campaigns actually drove, then delivers a ranked ROAS (return on ad spend) summary to your marketing channel before standup.

When to use it

Use it when ad spend lives in a BigQuery warehouse table (synced from Google/Meta/etc.) and revenue lives in Stripe, and you want a single daily source of truth instead of three tabs. Ideal for growth teams that make pacing decisions every morning.

How it works

  1. 1A schedule fires at 7am local time.
  2. 2BigQuery returns yesterday's spend grouped by `utm_campaign`.
  3. 3Stripe charges from the same day are pulled and grouped by the `utm_campaign` stored on each customer's metadata.
  4. 4A logic step joins the two sets on campaign, computes revenue minus spend and ROAS, and flags any campaign below your break-even threshold.
  5. 5The result is formatted into a sorted table and posted to Slack, with under-performers called out at the top.

Set it up

What you configure once, before turning it on.

  1. 1
    Connect BigQueryDatasets, queries, schemas.
  2. 2
    Connect StripeCustomers, subscriptions, payments.
  3. 3
    Connect SlackChannels, DMs, threads, mentions.
  4. 4
    Set each agent's modelWe leave models unset so you pick the tier — fast + cheap, or top-quality.
  5. 5
    Tune it to your dataEdit the prompts, filters, and field mappings so it matches how your team works.
  6. 6
    Test, then turn it onRun once against a sample, confirm the output, then enable the trigger.

Run this workflow in your colony.

14-day trial. No DevOps. No Sales call. Provisioned in under a minute.