Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
louisblythe avatar

Prospect Fatigue Detection

  • 188 installs
  • 107 repo stars
  • Updated January 24, 2026
  • louisblythe/salesskills

prospect-fatigue-detection is a Claude agent skill that teaches developers to detect over-contacted prospects and automatically reduce or stop outreach for developers building sales bots that must avoid burning relations

About

prospect-fatigue-detection is an AI SDR skill from louisblythe/salesskills that combats aggressive Day 1-10 pile-on sequences. calculate_fatigue_score returns 0-100 from touch frequency, engagement decay, non-response streaks, and explicit unsubscribe or negative language. Actions map to reduce_frequency at 30+, pause_sequence at 50+, and stop_all_outreach at 70+. Channel limits cap email at 3 per week, SMS at 2, and phone at 2 attempts with minimum spacing. BACKOFF_RULES extend intervals, pause 14 days, or move prospects to long-term nurture with human review. Unified scores aggregate fatigue across email, SMS, phone, and LinkedIn. Use prospect-fatigue-detection before opt-outs and spam complaints erode domain reputation.

  • Calculates 0-100 fatigue scores from touches, decay, and explicit opt-out signals
  • Stops all outreach at score 70+ with human review and 90-day nurture routing
  • Enforces max 3 emails and 2 SMS per week with channel-specific stop rules
  • Aggregates email, SMS, phone, and LinkedIn fatigue into one weighted score
  • Provides graceful exit and re-permission messages when backing off

Prospect Fatigue Detection by the numbers

  • 188 all-time installs (skills.sh)
  • +8 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #2,952 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/louisblythe/salesskills --skill prospect-fatigue-detection

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs188
repo stars107
Last updatedJanuary 24, 2026
Repositorylouisblythe/salesskills

How do sales bots detect over-contacted prospects?

Add prospect-fatigue-detection scoring to halt sequences at fatigue 70+ and pause 14 days when cross-channel engagement decay exceeds thresholds.

Who is it for?

Developers running high-volume outbound bots who need automatic back-off before prospects unsubscribe or mark messages as spam.

Skip if: Low-touch inbound-only chatbots without multi-touch outbound sequences or cross-channel frequency concerns.

When should I use this skill?

A developer mentions prospect fatigue, over-contact detection, outreach frequency limits, or backing off aggressive sequences.

What you get

Fatigue scores, backoff rule triggers, graceful exit messages, unified cross-channel limits, and nurture-pool routing decisions.

  • Fatigue scoring function
  • Backoff rule engine
  • Graceful exit message templates

By the numbers

  • Part of 80 AI SDR and bot skills in salesskills
  • Uses fatigue thresholds at 30, 50, and 70 for escalating backoff actions
  • Caps email at 3 sends per week and stops after 5 unanswered emails

Files

SKILL.mdMarkdownGitHub ↗

Prospect Fatigue Detection

You are an expert in building sales bots that recognize when prospects are being over-contacted. Your goal is to help developers create systems that detect fatigue signals and automatically back off before damaging the relationship.

Why Fatigue Detection Matters

The Over-Contact Problem

Typical aggressive sequence:
Day 1: Email
Day 2: LinkedIn request
Day 3: Follow-up email
Day 4: SMS
Day 5: Call attempt
Day 7: Another email
Day 10: "Just checking in"

Prospect experience:
→ Annoyed
→ Unsubscribes
→ Marks as spam
→ Tells colleagues to avoid you
→ Relationship burned forever

With Fatigue Detection

Smart sequence with fatigue awareness:
Day 1: Email (no open → wait)
Day 4: Follow-up (opened, no reply → gentle nudge)
Day 8: LinkedIn (different channel, lower pressure)
Day 15: Break-up email

Meanwhile:
- Track engagement signals
- Detect declining interest
- Back off automatically
- Preserve future opportunity

Fatigue Signals

Explicit Signals

Direct fatigue indicators:
- "Stop emailing me"
- "Take me off your list"
- "Too many messages"
- "You're being pushy"
- Unsubscribe click
- Spam report
- Block/mute

Action: Immediate stop. Flag for review.

Behavioral Signals

Implicit fatigue indicators:

Email:
- Declining open rates (opened first 2, ignoring rest)
- No opens after 3+ emails
- Opens but immediate delete (short dwell time)
- Opens but never clicks/replies

SMS:
- Read receipts but no response (3+)
- Shorter and shorter responses
- Response time getting longer
- Single word replies ("ok", "fine", "sure")

Call:
- Sent to voicemail repeatedly
- Shorter call durations
- "I'm busy" responses
- Canceling scheduled calls

Engagement Decay Patterns

Pattern: Decreasing engagement

Touch 1: Opened, clicked, replied "interested"
Touch 2: Opened, no click, no reply
Touch 3: Opened after 2 days, no action
Touch 4: No open
Touch 5: No open

Decay detected. Back off.

Sentiment Signals

Language indicating fatigue:

- "I told you I'd reach out when ready"
- "I appreciate the follow-up, but..."
- "I've been busy" (repeated)
- "I'll let you know"
- Increasingly curt responses
- Longer response times
- Missing pleasantries that were previously present

Fatigue Scoring

Fatigue Score Calculation

def calculate_fatigue_score(prospect):
    score = 0  # 0-100, higher = more fatigued

    # Touch frequency
    touches_7d = count_touches(prospect, days=7)
    if touches_7d > 5:
        score += 30
    elif touches_7d > 3:
        score += 15

    # Engagement decay
    engagement_trend = calculate_engagement_trend(prospect)
    if engagement_trend < -0.5:  # Declining
        score += 25
    elif engagement_trend < -0.2:
        score += 10

    # Non-response streak
    no_response_count = count_consecutive_no_responses(prospect)
    score += min(no_response_count * 10, 30)

    # Explicit signals
    if has_unsubscribe_attempt(prospect):
        score += 50
    if has_negative_sentiment_response(prospect):
        score += 20

    # Response quality decline
    if response_length_declining(prospect):
        score += 10
    if response_time_increasing(prospect):
        score += 10

    return min(score, 100)

def get_fatigue_action(score):
    if score >= 70:
        return "stop_all_outreach"
    elif score >= 50:
        return "pause_and_review"
    elif score >= 30:
        return "reduce_frequency"
    else:
        return "continue_normal"

Fatigue Thresholds by Channel

Channel-specific limits:

Email:
- Max 3 emails/week
- Stop after 5 unanswered
- 48h minimum between sends

SMS:
- Max 2 SMS/week
- Stop after 3 unanswered
- 72h minimum between sends

Phone:
- Max 2 attempts/week
- Stop after 3 no-answers
- Leave max 2 voicemails total

LinkedIn:
- Max 1 message/week
- Stop after 2 unanswered
- Don't spam with connection requests

Automatic Back-Off

Back-Off Rules

BACKOFF_RULES = {
    "fatigue_30_50": {
        "action": "extend_intervals",
        "multiplier": 1.5,  # 50% longer between touches
        "message": "softer_tone"
    },
    "fatigue_50_70": {
        "action": "pause_sequence",
        "duration_days": 14,
        "resume_trigger": "prospect_engagement"
    },
    "fatigue_70_plus": {
        "action": "stop_sequence",
        "move_to": "long_term_nurture",
        "human_review": True
    }
}

def apply_backoff(prospect, fatigue_score):
    if fatigue_score >= 70:
        stop_all_outreach(prospect)
        add_to_nurture_pool(prospect, review_in_days=90)
        alert_human(prospect, "high_fatigue")

    elif fatigue_score >= 50:
        pause_sequence(prospect, days=14)
        set_resume_trigger(prospect, "any_engagement")

    elif fatigue_score >= 30:
        extend_sequence_intervals(prospect, multiplier=1.5)
        switch_to_softer_messaging(prospect)

Graceful Exit Messages

When backing off, communicate gracefully:

High fatigue (stopping):
"I don't want to clog your inbox—I'll step back.
If [problem you solve] becomes a priority, I'm
here. Otherwise, wishing you all the best."

Medium fatigue (pausing):
"I can tell the timing isn't right. I'll check
back in a few weeks. In the meantime, feel free
to reach out if anything changes."

Low fatigue (slowing down):
"I know you're busy—I'll space out my follow-ups.
Just didn't want this to fall through the cracks
if it's still relevant."

Cross-Channel Coordination

Unified Fatigue View

Track fatigue across ALL channels:

Prospect: Jane Smith
Email fatigue: 45
SMS fatigue: 20
Phone fatigue: 60
LinkedIn fatigue: 10
Overall fatigue: 52 (weighted average)

Don't:
- Over-email while SMS seems fine
- Call repeatedly when email is ignored
- Pile on across channels

Do:
- Maintain single fatigue score
- Coordinate channel selection
- Back off universally when needed

Channel Switching Strategy

When one channel fatigues:

Email fatigue high, others low:
→ Try LinkedIn or SMS
→ But don't just shift the volume
→ One message, different channel, see response

All channels fatigued:
→ Stop all outreach
→ Wait for prospect to re-engage
→ Or trigger-based revival later

Prevention

Sequence Design Best Practices

Design sequences to prevent fatigue:

1. Start slow, escalate if engagement
   - Day 1: Email
   - Day 4: Email (if opened)
   - Day 7: LinkedIn (if engaged)

2. Built-in stopping points
   - After 3 no-responses: pause
   - After explicit disinterest: stop

3. Value-first cadence
   - Not every touch is an "ask"
   - Share content, insights, value
   - Ask for meeting only 30% of touches

4. Respect weekends and off-hours
   - No outreach outside business hours
   - No weekend messages

Personalization Reduces Fatigue

Generic outreach fatigues faster:

Fatiguing:
"Just following up on my previous email..."
"Wanted to check in..."
"Circling back..."

Less fatiguing:
"Saw your company just [specific event]—thought
this might be relevant now."
"Given what you mentioned about [specific detail],
here's something that might help."

Personalized = feels like value, not spam.

Recovery

Reviving Fatigued Prospects

After cooling-off period:

Requirements:
- At least 60-90 days of silence
- New hook (trigger event, new feature, etc.)
- Different approach than before

Message:
"It's been a while since we connected. I deliberately
gave you space, but [new relevant thing] made me
think this might be worth a fresh look.

If the answer is still no, I'll respect that.
But if circumstances have changed, I'm here."

Re-Permission Approach

Ask before resuming:

"I know I reached out a lot earlier this year.
Before I continue, wanted to check: is it worth
staying in touch, or would you prefer I move on?

Either answer is fine—just want to respect
your preferences."

This can reactivate interested prospects while
honoring those who want out.

Metrics

Fatigue Metrics to Track

Monitor:
- Average fatigue score across pipeline
- Fatigue-triggered pause rate
- Opt-out rate by fatigue score
- Conversion rate by fatigue score

Healthy patterns:
- <20% of prospects in "high fatigue" zone
- Opt-out rate <2% of touched prospects
- Declining fatigue scores over sequence lifespan

Sequence Performance by Fatigue

Compare:

Aggressive sequence:
- 12 touches in 21 days
- 5% meeting rate
- 8% opt-out rate
- 40% high-fatigue rate

Measured sequence:
- 6 touches in 21 days
- 4% meeting rate
- 2% opt-out rate
- 15% high-fatigue rate

Less aggressive = similar results + less damage

Edge Cases

High-Value Prospects

For enterprise/strategic prospects:

- Lower fatigue thresholds (more cautious)
- Human review before any outreach
- Quality over quantity
- Personalization required

Burning an enterprise prospect = major loss.

Existing Customers

For current customers:

- Even lower tolerance for fatigue
- Coordinate with CS team on contact
- Don't sales-spam existing relationships
- Account-level contact tracking

Customer fatigue = churn risk.

Inbound vs Outbound

Adjust expectations:

Inbound (they reached out):
- Higher tolerance for follow-up
- They expect to hear from you
- But still don't overdo it

Outbound (you reached out):
- Lower tolerance
- They didn't ask for this
- Earn the right to continue

Related skills

How it compares

Pick prospect-fatigue-detection over aggressive sequence skills when deliverability and relationship preservation matter as much as meeting volume.

FAQ

What fatigue score stops outreach in prospect-fatigue-detection?

prospect-fatigue-detection stops all outreach at fatigue scores of 70 or higher, flags human review, and moves prospects to long-term nurture with a suggested 90-day cooling period.

What channel limits does prospect-fatigue-detection enforce?

prospect-fatigue-detection caps email at 3 per week with 48h gaps, SMS at 2 per week with 72h gaps, and phone at 2 attempts per week stopping after three no-answers.

How does prospect-fatigue-detection handle multiple channels?

prospect-fatigue-detection maintains per-channel fatigue scores and a weighted overall score so bots do not shift volume to SMS or LinkedIn when email fatigue is already high.

AI & Agent Buildingagentsautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.