mcpField
C
cross-sell-upsell-detection

cross-sell-upsell-detection

github.com/louisblytheMarketing & growth190406 installsUpdated 40w ago
Repository

About cross-sell-upsell-detection

cross-sell-upsell-detection is a skill for developers building sales bots that identify expansion opportunities among existing customers. It describes usage, engagement, growth, and need signals, as well as scoring, triggers, outreach, and measurement.

Key features

  1. 01Identify usage and growth signals
  2. 02Detect adjacent needs and workflow expansion
  3. 03Score opportunities and define triggers
  4. 04Plan upsell and cross-sell outreach
  5. 05Track conversion and signal accuracy

Use cases

  1. 01Spot accounts nearing product or capacity limits
  2. 02Find cross-sell opportunities from related needs
  3. 03Prepare expansion discussions for reviews or renewals
  4. 04Assess which signals lead to conversions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/louisblythe/sales-skills --skill cross-sell-upsell-detection

After installing, type/cross-sell-upsell-detectionin Claude Code to confirm it loaded.

Details

From the project README

Cross-Sell and Upsell Detection

You are an expert in building sales bots that identify expansion opportunities with existing customers. Your goal is to help developers create systems that recognize when customers might benefit from additional products, features, or capacity.

Why Expansion Detection Matters

The Expansion Opportunity
Customer acquisition cost: $500
Lifetime value (single product): $3,000
Lifetime value (with expansion): $10,000+

Expansion is:
- Higher margin (no acquisition cost)
- Higher close rate (they trust you)
- Better retention (more integrated)
Detection Value
Without detection:
- Expansion happens opportunistically
- Customers outgrow without upgrading
- Cross-sell happens only when asked
- Revenue left on table

With detection:
- Proactive outreach at right moment
- Upgrade before they hit limits
- Cross-sell when need emerges
- Maximize customer value

Upsell Signals

Usage-Based Signals
Approaching limits:
- 80%+ of seat licenses used
- 90%+ of storage consumed
- API calls nearing cap
- Feature usage hitting tier limits

"You're at 45 of 50 users. As you grow,
want me to walk through the team plan?"
Engagement Signals
Deep product adoption:
- Using advanced features
- Multiple active users
- High login frequency
- Long session times
- Feature requests for premium items

"Your team is using [feature] heavily.
The Pro tier adds [related capability]—
interested in seeing it?"
Growth Signals
Company/team expansion:
- New users being added
- New departments onboarding
- Company hiring (external data)
- Funding announcement
- New locations

"Congrats on the growth! As you scale,
here's how other companies handle [challenge]."
Friction Signals
Hitting product limits:
- Error messages about limits
- Workarounds being used
- Export/import patterns (working around system)
- Support tickets about capacity

"I noticed you hit the export limit a few times.
The Business tier has unlimited exports—worth
looking at?"

Cross-Sell Signals

Adjacent Need Signals
Using complementary features:
- CRM customer using lots of email → marketing automation
- Analytics user requesting data → data warehouse
- HR software user adding employees → payroll

"Given how much you use [current product] for
[use case], our [adjacent product] might help
with [related need]."
Explicit Mentions
Customer mentions related challenges:

"I wish we had better reporting"
"We're looking for a solution to X"
"Do you integrate with Y?"
"We're evaluating [competitor product category]"

Listen for adjacent pain points.
Workflow Expansion
Customer expanding use cases:

- Single department → multiple departments
- Single location → multiple locations
- Single brand → multiple brands
- Internal use → customer-facing

Each expansion may need more products.
Integration Signals
Integration patterns suggesting needs:

- Integrating with [tool] suggests need for [our product]
- API usage patterns indicate workflow gaps
- Manual data transfer between systems

"I see you're moving data between [system] and us
manually. Our [product] automates that."

Detection Implementation

Signal Scoring System
def calculate_expansion_score(customer):
    score = 0
    signals = []

    # Usage signals
    usage = get_usage_metrics(customer)
    if usage.seat_utilization > 0.8:
        score += 25
        signals.append("high_seat_usage")
    if usage.feature_utilization > 0.7:
        score += 20
        signals.append("high_feature_usage")
    if usage.at_limit_events > 5:
        score += 30
        signals.append("hitting_limits")

    # Engagement signals
    engagement = get_engagement_metrics(customer)
    if engagement.monthly_active_users_growth > 0.1:
        score += 20
        signals.append("user_growth")
    if engagement.advanced_feature_adoption:
        score += 15
        signals.append("advanced_usage")

    # External signals
    external = get_external_signals(customer)
    if external.recent_funding:
        score += 20
        signals.append("funding")
    if external.hiring_signal:
        score += 15
        signals.append("hiring")

    return {
        "score": min(score, 100),
        "signals": signals,
        "recommendation": get_expansion_recommendation(signals)
    }
Trigger Events
EXPANSION_TRIGGERS = [
    {
        "name": "seat_threshold",
        "condition": "seat_usage >= 80%",
        "action": "upsell_seats",
        "message_template": "seat_expansion_outreach"
    },
    {
        "name": "feature_ceiling",
        "condition": "premium_feature_attempt >= 3",
        "action": "upsell_tier",
        "message_template": "tier_upgrade_outreach"
    },
    {
        "name": "adjacent_need",
        "condition": "integration_with_competitor_product",
        "action": "cross_sell",
        "message_template": "cross_sell_replacement"
    },
    {
        "name": "company_growth",
        "condition": "company_raised_funding",
        "action": "expansion_conversation",
        "message_template": "growth_expansion"
    }
]

Expansion Conversations

Upsell Conversation Starters
Usage-based:

"Hey [Name], noticed your team has been growing—
you're at [X] of [Y] users. Want me to walk
through what the next tier offers so you're
ready when you need it?"

Feature-based:

"I saw your team tried [premium feature] a few
times. It's in our Pro tier, but I can set up
a trial if you want to test it properly."

Limit-based:

"You've bumped against the [limit] a couple times.
Rather than work around it, would upgrading make
sense? I can show you what that looks like."
Cross-Sell Conversation Starters
Adjacent need:

"Given how much you've accomplished with [current
product], I'm curious—how are you handling [related
challenge]? We have something that complements
what you're doing."

Integration-based:

"I noticed you're using [competitor] for [function].
Just so you know, we have [our product] that
integrates natively—might simplify things."

Expansion-based:

"Now that you're using us for [use case], other
customers in your situation often add [product]
for [benefit]. Worth a look?"
Timing the Conversation
Best times for expansion:
- After they've achieved a win
- At renewal discussions
- After positive support interaction
- When they mention growth/change
- At QBR/check-in meetings

Worst times:
- During active support issue
- When they've had problems
- At contract end (too transactional)
- Without any trigger signal

Customer Success Integration

Health Score Connection
Expansion should correlate with health:

High health score + expansion signals:
→ Proactive upsell/cross-sell

High health score + no signals:
→ Check-in, explore latent needs

Low health score + expansion signals:
→ Fix health first, then expand

Low health score + no signals:
→ Focus on retention, not expansion
QBR Integration
Include expansion in regular reviews:

"Based on your usage this quarter:
• You're getting great value from [current]
• You might benefit from [expansion opportunity]
• Here's what other similar customers do..."

Natural context for expansion.

Message Templates

Seat Expansion
Subject: Your team is growing!

"Hi [Name],

Congrats on the growth—you're now at [X] users,
approaching your [Y] seat limit.

Before you need them, want me to walk through
what adding seats looks like? Some options:

• Add [N] seats: $[price]/month
• Upgrade to Team plan (unlimited): $[price]/month

Let me know what makes sense.

[Rep]"
Tier Upgrade
Subject: Unlock [Feature] for your team

"Hi [Name],

I noticed your team has been trying to use
[premium feature]—it's available on our Pro tier.

Based on how you're using [current tier], Pro
would give you:
• [Feature 1] - [benefit relevant to them]
• [Feature 2] - [benefit relevant to them]

Want to try it free for 14 days?

[Rep]"
Cross-Sell
Subject: Idea for [their challenge]

"Hi [Name],

I saw that you're using [current product] heavily
for [use case]—great to see!

Quick question: how are you handling [related
challenge]? We have [other product] that a lot
of our [current product] customers pair with it.

[Stat about customers who use both]

Worth a quick look?

[Rep]"

Metrics

Expansion Metrics
Track:
- Expansion revenue per customer
- Upsell conversion rate
- Cross-sell conversion rate
- Signal-to-opportunity conversion
- Time from signal to expansion

Optimize:
- Which signals predict expansion?
- What timing works best?
- Which messages convert?
Signal Accuracy
Measure signal quality:

- True positive rate (signal + conversion)
- False positive rate (signal + no interest)
- Coverage (opportunities with signals)

Refine signals based on outcomes.

Implementation

Expansion Data Model
{
  "customer_id": "12345",
  "expansion_profile": {
    "current_products": ["crm"],
    "current_tier": "professional",
    "expansion_score": 75,
    "active_signals": [
      {"type": "seat_usage", "value": 0.85},
      {"type": "premium_feature_attempt", "count": 5}
    ],
    "recommended_expansions": [
      {
        "type": "upsell",
        "target": "enterprise_tier",
        "confidence": 0.8,
        "trigger": "feature_ceiling"
      },
      {
        "type": "cross_sell",
        "target": "marketing_automation",
        "confidence": 0.6,
        "trigger": "adjacent_usage"
      }
    ],
    "last_expansion_conversation": "2024-01-01",
    "expansion_history": []
  }
}
Detection Pipeline
def expansion_detection_pipeline(customer):
    # Collect signals
    usage_signals = analyze_usage(customer)
    engagement_signals = analyze_engagement(customer)
    external_signals = fetch_external_signals(customer)

    # Score opportunity
    score = calculate_expansion_score(
        usage_signals,
        engagement_signals,
        external_signals
    )

    # Check health before recommending
    health = get_customer_health(customer)
    if health.score < HEALTH_THRESHOLD:
        return None  # Focus on retention first

    # Generate recommendations
    if score >= EXPANSION_THRESHOLD:
        recommendations = generate_recommendations(customer, signals)
        return create_expansion_opportunity(customer, recommendations)

    return None

Comments

Markdown supported