Risk Scoring

Separated hard and soft signals ensure bounce-based issues trigger blocks while velocity spikes only log warnings

1. Lead Health Scoring (Pre-Send)

Before a lead even enters the system, it is classified based on intrinsic quality signals. This prevents "trash" data from ever reaching your campaigns.

GREEN

Score: 80-100

Professional business email. Valid domain. No risk signals.

Active

YELLOW

Score: 50-79

Acceptable but risky. Catch-all domain or unknown provider.

Held for Review

RED

Score: 0-49

Disposable domain, role-based (admin@), or blacklisted.

Immediate Block

2. Mailbox Risk Scoring (Hard vs Soft)

The Problem with Combined Risk Scores

Traditional systems combine all risk signals into a single score. This causes false positives:

❌ Old System (Combined Score)

Scenario: A clean mailbox sends 100 emails in 1 hour (high velocity)

• Bounces: 0

• Velocity component: 80/100 (very high)

→ Combined risk score: 80

→ Result: Mailbox paused (false positive!)

Problem: High velocity alone shouldn't block a mailbox with zero bounces.

Hard vs Soft Signal Separation

Superkabe separates risk signals into two independent scores:

Hard Signals (Bounce-Based)

These CAN block execution:

  • Bounce rate - Hard bounces / total sends
  • Failure rate - Failures / total sends

Formula:
hardScore = (bounceRate × 0.7) + (failureRate × 0.3)

Blocks at: ≥60

Soft Signals (Behavior-Based)

These ONLY log, never block:

  • Velocity - Send rate trends
  • Domain warnings - Historical incidents

Formula:
softScore = (velocity × 20) + (domainWarnings × 10)

Logs at: ≥75 (but never blocks)

Comparison: Before vs After

ScenarioHard ScoreSoft ScoreOld SystemNew System
0% bounces, high velocity080❌ Blocked✅ Allowed
5% bounces, low velocity6510❌ Blocked❌ Blocked
1% bounces, normal velocity1535✅ Allowed✅ Allowed
3% bounces, high velocity4585❌ Blocked✅ Allowed (logs warning)

How It Works in Practice

The execution gate uses only hardScore for blocking decisions:

// Execution Gate Check (simplified)

const avgHardScore = calculateHardScore(healthyMailboxes);
const avgSoftScore = calculateSoftScore(healthyMailboxes);

// ONLY hard score blocks
if (avgHardScore >= 60) {
    return {
        allowed: false,
        reason: "Hard risk score (65) exceeds threshold. Bounce rate too high.",
        failureType: "HEALTH_ISSUE"
    };
}

// Soft score just logs
if (avgSoftScore >= 75) {
    console.log(`⚠️ High velocity detected: ${avgSoftScore} (not blocking)`);
}

return { allowed: true };

Risk Components in Detail

Hard Score Calculation

1. Calculate 24h bounce rate:

bounceRate = (bounces_24h / sent_24h) × 100

2. Calculate 24h failure rate:

failureRate = (failures_24h / sent_24h) × 100

3. Weighted combination:

hardScore = (bounceRate × 0.7) + (failureRate × 0.3)

4. Scale to 0-100:

hardScore = min(hardScore × 10, 100)

Soft Score Calculation

1. Velocity component (from metrics):

velocityComponent = mailbox.metrics.velocity × 20

2. Domain warning component:

escalationComponent = domain.warning_count × 10

3. Sum and cap:

softScore = min(velocityComponent + escalationComponent, 100)

✅ Key Benefit

Signal separation eliminates false positives:

  • • Clean mailboxes with high send volume stay active
  • • Only bounce/failure-based issues trigger pauses
  • • Velocity spikes are logged but don't disrupt operations
  • • Infrastructure protection focuses on real reputation threats

🔧 Configuration

Thresholds are tunable in the Configuration section:

  • HARD_RISK_CRITICAL: 60 — Blocks execution
  • SOFT_RISK_HIGH: 75 — Logs warning only