Implementation worksheet · 5 min read
An Upsell Eligibility Rule Set That Excludes Poor-Fit Accounts
Keep eligibility separate from scoring and apply it last, immediately before send. The score answers 'does this account look ready'; eligibility answers 'is it appropriate to ask'. The exclusion list is short and mostly obvious once written: active support escalation, open billing dispute, capacity already included in their contract, recent failed upsell attempt, account flagged at-risk, region or segment you cannot service, and anyone who opted out. Log which rule excluded each account, because an eligibility layer nobody can audit is indistinguishable from one that silently stopped running.
Upsell programmes fail in a specific and avoidable way: a well-built score surfaces an account that is genuinely growing, the campaign fires, and the recipient is three days into an unresolved outage. The score was right. The ask was wrong. Merging eligibility into the score makes both unreadable and usually means exclusions get weighted rather than enforced, which is how an account with an open dispute still receives an upgrade offer because its usage was high enough to outweigh the penalty.
Put it into practice
1. Keep eligibility out of the score entirely
Scores are continuous and comparative; eligibility is binary and absolute. Encoding 'has an open escalation' as a negative weight means a high-usage account can outscore its own exclusion. Two separate layers, evaluated in order, is the only version that behaves correctly at the edges — and the edges are exactly where the damage happens.
2. Apply eligibility at send time
Not at segment build, not at journey entry. Account state changes between those moments and the send, and the send is the only point where the current answer matters. This is one query per recipient and it prevents the entire class of 'the segment was built on Monday' failures.
3. Write the exclusion list once, for all commercial campaigns
Most of these rules are not specific to upsell — they apply to any commercial ask. Maintaining one list used by every campaign is both less work and more reliable than per-campaign exclusions that drift apart, which they always do.
4. Log the excluding rule, per account, per send
Not just that the account was excluded, but which rule did it. Without this you cannot tell a working eligibility layer from a broken one, and you cannot answer the inevitable question of why a particular account never received anything. The log is also how you notice a rule that is excluding far more than intended.
5. Review exclusion volume as a metric
If a rule excludes almost nothing, it is probably not wired up. If one excludes most of your audience, it is probably too broad. Both are invisible without a per-rule count, and both are common — a rule that silently matches nothing is the most likely failure mode in this whole layer.
The exclusion list
Copy this structure into your review document and record your observed result for each row.
| Rule | Source of truth | Applied at send | Logged |
|---|---|---|---|
| Active support escalation | support system | ||
| Open billing dispute | billing system | ||
| Capacity already in contract | contract record | ||
| Failed upsell attempt in last N days | campaign history | ||
| Account flagged at-risk | CS system | ||
| Unserviceable region or segment | account record | ||
| Opted out of commercial email | consent record | ||
| In an active human conversation | CRM |
A failure worth checking
The rule that silently stops matching. A field is renamed, an integration changes shape, or a status value is retired, and the escalation exclusion quietly matches zero accounts. Nothing errors — the campaign sends to a slightly larger audience and the numbers look marginally better. It is discovered weeks later by a customer who received an upgrade offer during an outage. Per-rule exclusion counts, reviewed alongside campaign results, turn this from an incident into a number that looked wrong on a Tuesday.
Common questions
Is this not just suppression?
Related but distinct. Suppression is usually permanent and consent-driven: unsubscribed, bounced, complained. Eligibility is conditional and situational: right account, wrong moment. Both must run, and conflating them tends to mean the situational rules get treated as advisory.
Who owns the exclusion list?
Whoever is accountable for the customer relationship, not whoever runs the campaign tool. The rules encode judgements about when it is acceptable to ask a customer for money, and that is a relationship decision that happens to be implemented in marketing software.
Basis and scope
This is a proposed implementation method using illustrative examples, not a measured benchmark or a customer case study. Prepared with AI assistance. Validate product-specific behavior against current documentation and your own test environment.