Cap contact at the person, not per channel, so the customer stops getting hit five times a day by systems that do not talk to each other
A customer gets an email at nine, a push at eleven, a retargeting ad through lunch, and an SMS in the afternoon, all from the same company, none of which knew about the others. Each channel was inside its own frequency cap. The customer, who experiences one brand rather than four channels, is being hit far past the point of fatigue, and the result shows up as rising unsubscribes, falling open rates, and the slow deliverability decay that follows when recipients start marking mail as spam rather than opening it.
The reason this happens is structural. Frequency caps are almost always set per channel, by the team that owns that channel, in the tool that runs it. The email cap lives in the ESP, the push cap in the mobile platform, the ad cap in the ad account. There is no unit in the stack that represents total contact to a person, so nothing can cap against it. Each channel is behaving responsibly on its own terms and the sum is exhausting.
This recipe moves the cap to where the customer actually experiences contact: the person, across every channel at once.
Contact capped per person across channels, with fatigue and its downstream costs falling as a result. Realistic effect: a reduction in unsubscribe and opt-out rates and a stabilizing of deliverability, with the size depending entirely on how over-contacted the audience was to begin with. A business running tight per-channel caps that rarely overlap sees little change; one where email, push, and SMS routinely stack on the same customer sees a real drop in fatigue signals. The honest framing is that this recipe removes a self-inflicted wound rather than adding a new lift, and its value is proportional to how deep the wound was.
The second outcome is decision clarity: a single contact budget per person that every channel respects, so adding a new campaign becomes a question of what it displaces rather than a free addition on top of everything else.
A unified contact store that the activation layer can query at send time, typically maintained in the CDP or warehouse with the channel tools writing send events to it. Composable stacks suit this because the contact log is a shared resource all channels read, which is awkward to bolt onto a packaged suite where each channel's frequency logic is internal and not designed to consult an external budget. The capability that decides whether the recipe works is the timing of the read: the cap has to be checked at send time, immediately before the message leaves, because a cap checked at campaign-build time is already stale by the time the send fires hours later.
Compare the tools on Martech Stack Builder
Marketing ops owns the policy questions, which are the hard part: what the per-person budget is, how it varies by customer value or lifecycle, and where the line between transactional and marketing contact sits. Data engineering builds the unified contact log and the write path from every channel into it. Identity or CDP ownership resolves sends to the person, because a cap counted against device-level or channel-level identifiers caps the wrong unit and lets the same person slip through on a second identifier. Analytics correlates contact volume with fatigue signals to tune the cap, since the right number is empirical rather than a round figure someone picked. The recipe takes months because the hard work is organizational as much as technical: getting every channel team to write to and respect a shared budget means giving up local control over their own frequency, which is a negotiation, not a deploy.
Work in this order. The cap counts per person, across channels, on what was received.
Frequency and fatigue management across channels covers steps 1 to 4, 6 and 8, channel eligibility check step 5, and suppression and exclusion logic step 7.
The first failure is capping by channel-level or device-level identifier rather than by person. If the cap counts against email-address and phone-number separately, the same customer gets the full budget on each, and the cross-channel cap the recipe promised does not exist. Resolving sends to the person is the prerequisite, which is why identity ownership is a critical role rather than an afterthought.
The second is the transactional loophole. If the purpose categorization is loose, marketing sends get relabelled as transactional to escape the cap, and within a quarter the cap is meaningless because everything important is exempt. The categorization has to be enforced and audited, with a clear definition of transactional that the marketing team cannot quietly expand.
The third is capping sent rather than received. A cap that counts every dispatched message, including the ones that bounced or were filtered, under-serves the customer who never got them while the accounting says they are at their limit. Counting received contact requires deliverability feedback flowing back into the contact log, which is the unglamorous plumbing that separates a cap that reflects reality from one that reflects optimistic send logs.
The Workshop works out with your team which of these matter for your stack right now, and what to do first: a 90-minute session with the people who own the decision.
The unified contact log, the transactional-versus-marketing line, the send-time enforcement point, and the received-not-sent accounting: those are the decisions that turn four well-behaved channels that exhaust the customer into one contact budget that respects them.
Did this recipe match your situation?Anonymous response. Sign up to leave a longer note tied to your account.
Let the system act on its own inside clear bounds, escalate the ambiguous cases, and learn from how the human resolved them
Stop bidding against yourself for the same person across Meta, Google, TikTok, and the rest, by maintaining a single live audience exclusion the platforms read
Push first-party signals (predicted value, churn flag, recent conversion) to ad platforms as bid modifiers so the platforms stop paying premium for impressions that will not convert