River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Lifecycle Email Program Template

Four documents and three sheets that map every automated flow, then show you the week where one customer receives four of them.

Free download  ·  No account needed

Overlap and Suppression Matrix  ·  Scenario A

One customer, one week, eleven flows

One-time purchaser, 45 days after order, browsed on Monday  ·  Cobbleworth, 84,000 subscribed

DayFlowMessageCounts
MonReplenishment1 of 2yes
TueBrowse abandon1 of 2yes
WedBrowse abandon2 of 2yes
ThuReview request2 of 2yes
ThuWeekly broadcast1 of 1yes
SunReplenishment2 of 2yes

Six promotional messages in seven days. Budget is four.

What no flow builder can tell you

Each of these six flows was built alone, with its own trigger and its own audience filter. Not one of them knows that the other five exist, let alone that they all landed on this address. Every one of them passes review on its own numbers.

What the policy holds

Browse abandon 2 and the weekly broadcast, by priority rank rather than by arrival order. Four messages send.

Which kind of problem this is

Structural, not busy. The review request counts its delay from delivery and the replenishment counts from order, so how close together they land depends on shipping time. The cap hides it; the fix is the trigger.

The four transactional messages this customer also received are in the row and count against nothing.

Cobbleworth runs eleven automated flows against 84,000 addresses. Unsubscribes have climbed for two months and nobody can name the flow responsible, because there is not one. A customer forty-five days past their order who browsed on Monday receives the replenishment, two browse-abandon messages, the second review request, the Thursday broadcast, and the second replenishment. Six promotional emails in seven days. Every one of the six flows passes review on its own numbers, and every one was built without knowing the other five exist.

That is what a flow builder is. It shows one flow, with one trigger and one audience filter, and it has no view of what else fired at that address this week. So the artifact worth having is the one that exists at program level: a customer's week, written out day by day, with a count and a verdict. It separates a busy week, which the frequency cap handles, from two flows whose delays count from different events, which the cap only hides.

The cap is also only allowed to hold back one kind of message. The FTC's CAN-SPAM Rule sets the primary purpose criteria at 16 CFR 316.3, so every flow here carries its classification before it carries a cap. It installs into the marketing workspace beside the Search Console keyword map and the rest of the template library. Send River your flows, or take the files blank.

The week no flow can see, and the classification the cap depends on

The Overlap and Suppression Matrix, the Flow Register with classifications, and Performance by Flow read against overlap.

Overlap and Suppression Matrix

One row per customer state. Promotional sends counted; transactional ones present and uncounted.

Customer statePromo in 7dOver byVerdictHeld by policy
One-time purchaser at day 45 who browsed Monday62over capBrowse abandon 2, broadcast
New signup mid-welcome when the broadcast goes out30within cap, still wrongBroadcast: welcome overrides promotion
Subscriber renewing Friday who abandoned a cart30correct as builtNothing
Lapsed at day 90 with a watched item restocked40at capNothing. Winback 3 is held next.
Open support ticket about a missing order30wrong regardless of capAll promotion. Hard stop.
Opted out day 0, filled in a new form day 330non-compliantEverything commercial
Complained day 1, resubscribed by support day 430non-compliantEverything after day 1
First order delivered in 14 days rather than 362structuralReview request 2, one broadcast

Two of these rows are inside the budget and still wrong. A new subscriber whose second-ever message from you is the Thursday broadcast has been introduced by the wrong email, and no frequency count catches it. The rule is that the welcome flow outranks all promotion until it completes.

Four rows are wrong at any budget. An open ticket, a refund, a reversed complaint and an opt-out followed by a form fill are hard stops. A matrix that only counts sends passes all four.

The last row is the structural one. Review request counts from delivery, replenishment counts from order, so their distance apart is a function of shipping time and never appears in a test.

Flow Register

Classification comes before the cap, because the cap may only suppress one of the two kinds.

FlowTriggerDelay counts fromMsgsClassificationCountsPriority
Order confirmationOrder placedImmediate1transactionalnonever held
Renewal noticeRenews in 5dRenewal date1transactional or relationshipnonever held
Delivered noticeCarrier scanDelivery1mixed: pending resolutionnounresolved
Cart abandonCart, no checkoutCart creation3commercialyes2
Back in stockInventory above 0Restock event1commercialyes3
Review requestOrder delivereddelivery2commercialyes5
ReplenishmentOrder plus 45dorder2commercialyes6
Weekly broadcastManual, ThursdaysNot applicable1commercialcap not applied8
WinbackNo order in 90dLast order3commercialyes9
Partner co-marketingManualNot applicable1not assessedyespaused

The delivered notice is the reclassification nobody logged. It has the highest open rate of any transactional message in the program, which is exactly why somebody added three product recommendations and a discount code to the template. Either the block comes out or the flow carries everything a commercial message must carry.

The partner flow is paused on one unanswered question. Where a single message advertises a second party's product, the rule at 16 CFR 316.2(m) makes each advertised party a sender unless one is identified in the From line as the sole sender. Nobody has read the From line.

Two rows share one fault: the broadcast is sent from a different screen by a different team against a list, so the cap does not apply unless the exclusion is built into the segment.

Performance by Flow

Per message, not per flow. The overlap column is what changes the conclusions.

MessageClickRev / sendUnsubPromo in prior 7dIncrementalCall
Back in stock 1 of 141.0%14.100.06%1.1not measuredkeep
Cart abandon 1 of 322.4%8.900.14%1.4+9.1ptkeep
Cart abandon 3 of 311.2%2.940.38%2.4+0.9pttest the discount
Review request 1 of 212.0%0.31%2.1not measuredkeep
Review request 2 of 25.4%0.79%3.6not measuredreposition
Winback 3 of 31.9%0.441.61%4.2-0.1ptcut
Weekly broadcast3.2%0.510.42%2.9not measuredapply the cap

Review request 2 has an unsubscribe rate two and a half times message 1. The copy is not worse. It arrives with 3.6 promotional messages already in the prior week against 2.1 for message 1. Without the overlap column, that unsubscribe gets attributed to the message instead of to the week.

Winback 3 converts no better than the holdout. It bills you 1.61% of the addresses it touches for an increment of nothing. Every send it makes is above the cap, which is the finding rather than a coincidence.

Apparent revenue on cart abandon 3 is four times its increment. Most of those customers were coming back anyway, and the discount is paying them not to.

What's in the pack

01

Overlap and Suppression Matrix

Twelve customer states written out day by day, including four that are wrong at any frequency budget and two that are inside it and still wrong.

02

Flow Register

Every flow with its trigger, what its delay counts from, the audience it can actually reach, its exclusions and its classification.

03

Performance by Flow

Per message rather than per flow, with the prior-seven-day overlap column that decides whether an unsubscribe belongs to the message or the week.

04

Flow Classification

The primary purpose criteria applied flow by flow, plus the multi-sender rule that quietly governs every partner and affiliate send.

05

Suppression Policy

The budget, the priority order when it is spent, and hard stops that treat an opt-out as immediate rather than within the ten business days the FTC allows. Where SMS is running too, the cross-channel cadence template prices a text against an email so one budget can cover both.

06

Program Map

The whole lifecycle in one diagram, with the audience overlaps and trigger collisions named rather than left to be discovered.

07

Message Briefs

One per message, because the message that damages a sequence is the third one saying what the first one said with more urgency. The welcome email sequence template times that sequence against your own conversion data.

How to use it

  1. 1

    Open in River, or take it blank

    Open the pack in River and send whatever describes your flows, or download the Word documents and CSV sheets and fill them in yourself.

  2. 2

    Send the flow list

    A screenshot of the automations list, an export, a spreadsheet somebody keeps, a send-history CSV, or the flows typed out. Partial is fine.

  3. 3

    Answer one question per flow

    What each delay counts from. Order, delivery, a status change, a date. That single field decides which of your flows collide.

  4. 4

    Read your worst week first

    It comes back written out day by day with your real flow names in it, and says whether the fix is the cap or the trigger.

Frequently asked questions

Is this template free?

Yes. Download the Word documents and CSV sheets with no account, no card and no email gate. Edit with AI is the optional half: River maps your flows, classifies each one, and builds the matrix from your own triggers. Every pack sits in the template library.

Why classify flows before setting a frequency cap?

Because the cap may only hold back one kind of message. Suppress a promotional email and you have done your job. Suppress an order confirmation and you have a support ticket and a refund. A uniform cap makes the second mistake at the highest-stakes moment in the program.

My flows each perform well. Why do I need this?

Because a flow's numbers are measured in isolation and a customer receives all of them. The matrix routinely finds a week with six promotional sends where all six flows look healthy individually. Nothing in a flow builder can show you that, by design.

What is a structural collision?

Two flows whose delays count from different events. A review request timed from delivery and a replenishment timed from order sit a fixed distance apart only when shipping time is constant. Capping it hides it. The fix is rebasing one trigger.

Does this work with Klaviyo, Mailchimp or HubSpot?

All of them, and it does not connect to any of them to start. The register is built from flow definitions in any form: a screenshot, an export, a spreadsheet, or a typed list. Where the send history itself needs reading, run an email performance consolidation alongside it.

How does this handle the weekly broadcast?

As the largest contributor to overlap in most programs, which is what it usually is. A broadcast is sent from a different screen against a list, so no frequency cap applies unless somebody built the exclusion into the segment rather than remembering it on send day. Which segments are real enough to exclude is a separate question, settled by the customer segmentation template.

What does Edit with AI actually do?

It signs you up, installs this pack as a private workspace, and starts reading. Send the flows in whatever shape they exist, then answer one question per flow about its delay basis, and your matrix comes back with the worst week in it.

Find out what one customer gets in a week

Take the Word documents and CSV sheets blank, or open this exact pack in River and send it the flows you already have running.

Edit with AI