Skip to main content

How to Build Real-Time Slack Deal Alerts with OpenClaw [2026]

Β· 9 min read
MarketBetter Team
Content Team, marketbetter.ai

Your best deal just went dark.

The champion replied to every email for two months, took three demos, got the contract last Tuesday. Then silence.

By the time someone notices, it's been 9 days. The deal is dead. The champion took another job. You find out from LinkedIn.

This happens constantly because CRM data is passive. It waits for someone to go look at it. No one does until it's too late.

The fix: Real-time alerts in Slack where your team already lives.

This guide shows you how to build an intelligent alerting system with OpenClaw that catches pipeline problems before they become pipeline losses.

Slack notification system for real-time deal alerts

Why Slack for Sales Alerts?​

Slack Is Where Attention Lives​

Your reps check CRM when they have to. They check Slack constantly.

  • Average Slack user checks 20+ times daily
  • Most teams have Slack on phone with notifications
  • Real-time visibility into team activity

CRM Alerts Are Broken​

Most CRM notification systems:

  • Email alerts (goes to spam or ignored)
  • In-app badges (only see when you login)
  • Daily digests (too late for urgent issues)

Slack Is Actionable​

A Slack alert isn't just informationβ€”it's a jumping off point:

🚨 DEAL ALERT: Acme Corp - $48K
Contact went dark (9 days no engagement)

Champion: Sarah Chen (VP Sales)
Last activity: Email opened Feb 2, no reply
Deal stage: Negotiation (was: Verbal commit)

Actions:
[πŸ“ž Call Now] [πŸ“§ Draft Email] [πŸ“‹ View in HubSpot]

One click from alert to action.

What to Alert On​

Tier 1: Immediate Alerts (Real-Time)​

These need instant notification:

SignalWhy It MattersAlert Channel
Champion job changeDeal at risk#deal-alerts + DM to AE
Competitor mentionedCould lose to alternative#deal-alerts
Large deal stage changePipeline impact#deal-alerts
Contract viewedHot buying signal#deal-alerts + DM
Pricing page revisitDecision imminentDM to AE

Tier 2: Same-Day Alerts (Batched)​

Important but not urgent:

SignalFrequencyAlert Channel
Deals gone quiet (3+ days)Morning digest#pipeline-health
Upcoming renewals (30 days)Weekly summary#cs-alerts
Meeting no-showsWithin 1 hourDM to AE
Email bouncesDaily digest#data-quality

Context for leadership:

ReportFrequencyChannel
Pipeline changesDaily#sales-leadership
Win/loss analysisWeekly#sales-leadership
Rep activity scoresWeeklyDM to managers
Forecast vs. actualWeekly#sales-leadership

Building with OpenClaw​

Step 1: Connect to Your CRM​

OpenClaw needs to watch your CRM for changes. Using HubSpot as an example:

# openclaw config
integrations:
hubspot:
portalId: "YOUR_PORTAL_ID"
privateAppToken: ${HUBSPOT_TOKEN}
watchEntities:
- deals
- contacts
- activities

Step 2: Define Alert Rules​

Create an alert agent that watches for specific patterns:

// alert-rules.js
const alertRules = {
// Champion job change (via email bounce or LinkedIn)
championJobChange: {
trigger: 'contact.job_title_changed OR contact.email_bounced',
condition: (contact, deal) => deal.amount > 20000 && deal.stage !== 'Closed',
severity: 'critical',
channel: '#deal-alerts',
dmOwner: true,
message: (contact, deal) => `
🚨 *CHAMPION ALERT: Job Change Detected*
*Deal:* ${deal.name} β€” $${deal.amount.toLocaleString()}
*Contact:* ${contact.name} (${contact.old_title} β†’ ${contact.new_title || 'Unknown'})
*Action Required:* Verify contact status, identify new champion

[View Deal](${deal.hubspot_url}) | [LinkedIn Search](https://linkedin.com/search?keywords=${encodeURIComponent(contact.name)})
`
},

// Deal gone dark
dealGoneDark: {
trigger: 'deal.last_activity_age > 5 days',
condition: (deal) => deal.amount > 10000 && !['Closed Won', 'Closed Lost'].includes(deal.stage),
severity: 'warning',
channel: '#pipeline-health',
message: (deal) => `
⚠️ *Deal Gone Quiet:* ${deal.name}
*Amount:* $${deal.amount.toLocaleString()}
*Last Activity:* ${deal.last_activity_date} (${deal.days_since_activity} days ago)
*Stage:* ${deal.stage}

[πŸ“ž Quick Action: Schedule Follow-up](${deal.hubspot_url})
`
},

// Contract viewed
contractViewed: {
trigger: 'document.viewed AND document.type = "contract"',
condition: (doc, deal) => true,
severity: 'positive',
channel: '#deal-alerts',
dmOwner: true,
message: (doc, deal) => `
πŸ”₯ *Hot Signal: Contract Viewed*
*Deal:* ${deal.name} β€” $${deal.amount.toLocaleString()}
*Viewer:* ${doc.viewer_email}
*Time on Doc:* ${doc.view_duration}

Strike while hot! [Call Now](tel:${deal.contact_phone})
`
},

// Large deal stage change
largeStageChange: {
trigger: 'deal.stage_changed',
condition: (deal) => deal.amount > 50000,
severity: 'info',
channel: '#deal-alerts',
message: (deal) => `
πŸ“Š *Pipeline Update:* ${deal.name}
*Amount:* $${deal.amount.toLocaleString()}
*Stage:* ${deal.old_stage} β†’ ${deal.new_stage}
*Owner:* ${deal.owner_name}
`
}
};

Slack channel with deal alerts and pipeline notifications

Step 3: Set Up the Watcher Agent​

OpenClaw runs the alerting logic:

# openclaw agent config
agents:
deal_watcher:
name: "Deal Watcher"
schedule:
realtime:
- hubspot.deal.updated
- hubspot.contact.updated
- hubspot.email.sent
cron:
- "*/15 * * * *" # Every 15 min for batch checks

task: |
For each CRM event:
1. Check against all alert rules
2. If triggered, format and send to appropriate Slack channel
3. If dmOwner, also DM the deal owner
4. Log alert to tracking table (avoid duplicates)

For batch checks (cron):
1. Query deals with no activity > threshold
2. Group by owner
3. Send summary to #pipeline-health

Step 4: Configure Slack Integration​

integrations:
slack:
botToken: ${SLACK_BOT_TOKEN}
channels:
deal-alerts: "C0123456789"
pipeline-health: "C0123456790"
sales-leadership: "C0123456791"

messageDefaults:
unfurl_links: false
unfurl_media: false

Step 5: Add Smart Deduplication​

Nobody wants the same alert 47 times:

// dedup.js
const alertCache = new Map();

function shouldSendAlert(alertKey, cooldownMinutes = 60) {
const lastSent = alertCache.get(alertKey);
const now = Date.now();

if (lastSent && (now - lastSent) < cooldownMinutes * 60 * 1000) {
return false; // Skip, sent recently
}

alertCache.set(alertKey, now);
return true;
}

// Usage
const alertKey = `dark_deal_${deal.id}`;
if (shouldSendAlert(alertKey, 1440)) { // Once per day max
sendSlackAlert(channel, message);
}

Advanced Patterns​

Pattern 1: Engagement Scoring Alerts​

Combine multiple signals into a score:

const engagementScore = (deal) => {
let score = 0;

// Positive signals
if (deal.email_opened_last_7d) score += 10;
if (deal.link_clicked_last_7d) score += 20;
if (deal.meeting_scheduled) score += 30;
if (deal.pricing_page_view) score += 25;
if (deal.contract_viewed) score += 40;

// Negative signals
if (deal.days_since_activity > 7) score -= 20;
if (deal.emails_no_reply > 3) score -= 15;
if (deal.meeting_no_show) score -= 30;

return score;
};

// Alert on score drops
if (deal.previous_score - deal.current_score > 30) {
sendAlert('engagement_drop', deal);
}

Pattern 2: Multi-Threading Alerts​

When you only have one contact at a company:

const singleThreadAlert = {
trigger: 'deal.stage = "Proposal" AND deal.contacts.count = 1',
message: (deal) => `
⚠️ *Single Thread Risk:* ${deal.name}
Only contact: ${deal.contacts[0].name} (${deal.contacts[0].title})
Recommendation: Get intro to economic buyer before negotiation

[Research Contacts](https://linkedin.com/company/${deal.company_linkedin}/people)
`
};

Pattern 3: Competitive Intelligence Alerts​

Watch for competitor mentions:

// Scan email content, call notes, Gong transcripts
const competitorMentioned = {
trigger: 'activity.body CONTAINS competitor_keywords',
competitors: ['Apollo', '6sense', 'ZoomInfo', 'Demandbase'],
message: (activity, deal, competitor) => `
🎯 *Competitor Mentioned:* ${competitor}
*Deal:* ${deal.name} β€” $${deal.amount}
*Context:* ${activity.snippet}

[View Full Activity](${activity.url}) | [Competitive Battlecard](${battlecard_url(competitor)})
`
};

Pattern 4: Renewal Risk Alerts​

For customer success teams:

const renewalRisk = {
trigger: 'deal.type = "renewal" AND deal.close_date < 60_days_out',
condition: (deal) => {
const riskFactors = [];
if (deal.nps_score < 7) riskFactors.push('Low NPS');
if (deal.support_tickets_open > 3) riskFactors.push('Open tickets');
if (deal.usage_trend === 'declining') riskFactors.push('Usage down');
if (deal.champion_left) riskFactors.push('Champion departed');
return riskFactors.length >= 2;
},
message: (deal, risks) => `
🚨 *Renewal at Risk:* ${deal.company}
*ARR:* $${deal.amount} | *Renewal:* ${deal.close_date}
*Risk Factors:* ${risks.join(', ')}

[Customer Health Dashboard](${deal.cs_dashboard_url})
`
};

Organizing Your Channels​

#deal-alerts          β€” Critical real-time alerts (AEs + managers)
#pipeline-health β€” Daily summaries and trends (AEs + managers)
#sales-leadership β€” High-level pipeline updates (leadership)
#cs-alerts β€” Customer success notifications (CS team)
#data-quality β€” Bounces, duplicates, etc. (ops team)

Channel Hygiene​

Keep channels useful:

  • #deal-alerts: Only urgent, actionable items. Max 10-15/day.
  • #pipeline-health: Batched digests. Once or twice daily.
  • #sales-leadership: Weekly summaries unless something major.

If a channel gets too noisy, people mute it. Then it's useless.

Measuring Alert Effectiveness​

Track whether alerts actually help:

const alertMetrics = {
// Track each alert type
alertsSent: {},
alertsActedOn: {}, // User clicked action button
outcomeAfterAlert: {}, // Did the deal status improve?

// Calculate value
alertROI: (alertType) => {
const sent = alertsSent[alertType];
const acted = alertsActedOn[alertType];
const saved = outcomeAfterAlert[alertType].filter(o => o === 'saved');

return {
actionRate: acted / sent,
saveRate: saved / acted,
dealValueSaved: saved.reduce((sum, d) => sum + d.amount, 0)
};
}
};

Good benchmarks:

  • Action rate (clicked button): >40%
  • Alert-to-save rate: >15%
  • Average response time: &lt;2 hours for critical alerts

Common Mistakes to Avoid​

Alert Fatigue​

The biggest risk. If everything is an alert, nothing is.

Fix it:

  • Ruthlessly prioritize what deserves real-time alerts
  • Use batching for everything else
  • Track channel mute ratesβ€”if >30%, you're too noisy

Missing Context​

An alert without context creates work:

❌ BAD:
"Deal Acme Corp updated"

βœ… GOOD:
"πŸ”₯ Deal Acme Corp ($48K) β€” Champion viewed contract 3x in last hour
Last touch: Pricing call Tuesday
Decision: Expected this week
[Call Sarah Now] [View Timeline]"

No Action Path​

Every alert should answer: "What do I do next?"

Include buttons/links to:

  • Call the contact
  • Send a pre-drafted email
  • View the full record
  • Escalate to manager

Ignoring Time Zones​

Don't send alerts at 3am. Configure quiet hours:

const shouldAlertNow = (owner, alertPriority) => {
const ownerTz = owner.timezone || 'America/Chicago';
const localHour = moment().tz(ownerTz).hour();

// Critical alerts: always
if (alertPriority === 'critical') return true;

// Others: business hours only
return localHour >= 8 && localHour <= 20;
};

Integrating with MarketBetter​

MarketBetter's Daily SDR Playbook already identifies the highest-priority accounts and actions. Add Slack alerts to:

  • Push today's top priorities β€” Morning notification of must-do tasks
  • Alert on engagement β€” When a playbook account shows buying signals
  • Track follow-through β€” Confirm reps are working suggested accounts

Want to see intelligent alerting built into your SDR workflow? Book a demo and we'll show you how real-time signals drive real-time action.

Getting Started​

Week 1: Foundation​

  1. Set up OpenClaw with HubSpot/Salesforce connection
  2. Create #deal-alerts channel
  3. Configure 3 critical alert types
  4. Test with your own deals

Week 2: Expand​

  1. Add engagement scoring
  2. Create #pipeline-health for digests
  3. Add action buttons to alerts
  4. Roll out to full sales team

Week 3: Optimize​

  1. Measure action rates
  2. Tune thresholds (too many? too few?)
  3. Add advanced patterns (multi-threading, competitor)
  4. Document what's working

Ongoing​

  • Review alert effectiveness monthly
  • Add new patterns as you learn what matters
  • Remove alerts no one acts on
  • Share wins in team meetings
Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.


The deals you save are the ones you see in time. See them in Slack, where you're already looking.

Automated Slack Deal Rooms: Real-Time Pipeline Collaboration with OpenClaw [2026]

Β· 10 min read
MarketBetter Team
Content Team, marketbetter.ai

Your biggest deals don't close in the CRM. They close in the conversationsβ€”the Slack messages, the quick syncs, the "hey, can you jump on this call?" moments.

But most sales teams still treat Slack as an afterthought. Deal updates live in CRM fields that nobody checks. Critical signals get buried in email threads. By the time someone notices a deal is at risk, it's too late.

What if Slack became your deal cockpit instead of your distraction?

With OpenClaw, you can build intelligent deal rooms that:

  • Auto-populate with relevant deal context
  • Alert the right people at the right moments
  • Surface risks before they become losses
  • Coordinate multi-stakeholder deals seamlessly

Slack Deal Room Workflow

The Problem with Manual Deal Collaboration​

Here's how most sales teams collaborate on deals today:

Scenario: The $80K Deal​

Week 1: AE creates opportunity in CRM. Mentions it in #sales channel. "Got a good one, Acme Corp, $80K potential."

Week 3: AE needs SE help. Slacks the SE directly. SE asks 15 questions that are already in the CRM. AE spends 20 minutes catching them up.

Week 5: Prospect goes quiet. AE mentions in standup. Manager asks for context. AE gives verbal update that's different from CRM. Nobody writes it down.

Week 7: Champion reaches out to support with a question. Support doesn't know there's an active deal. Responds with generic answer. AE finds out 3 days later.

Week 9: Deal slips. Everyone asks "what happened?" Nobody has the full picture.

Sound familiar?

The AI-Powered Deal Room​

Here's the alternative: an AI-managed Slack channel for every deal above a certain threshold.

What It Does​

  1. Auto-creates a channel when deals hit Stage 2 or $50K+
  2. Populates context from CRM, emails, calls, and support
  3. Invites relevant people based on deal stage and needs
  4. Sends intelligent alerts when signals change
  5. Summarizes status on request or on schedule
  6. Logs updates back to CRM from Slack conversations

The Experience​

#deal-acme-corp-80k

πŸ€– OpenClaw Deal Bot
──────────────────────────────
πŸ“‹ DEAL OVERVIEW
Company: Acme Corp
Amount: $80,000
Stage: Demo Scheduled
Close Date: Mar 15, 2026
Owner: Sarah Chen

πŸ‘₯ BUYING COMMITTEE
β€’ John Smith (VP Sales) β€” Champion
β€’ Lisa Wong (CFO) β€” Economic Buyer
β€’ Mike Johnson (IT) β€” Technical Evaluator

πŸ“Š ENGAGEMENT SCORE: 78/100 ⬆️ (+12 this week)

πŸ“ RECENT ACTIVITY
β€’ [Today] Call scheduled for Thursday 2pm
β€’ [Yesterday] John opened proposal email 4x
β€’ [3 days ago] Lisa viewed pricing page

⚠️ RISKS
β€’ CFO hasn't attended any calls yet
β€’ Competitor (Warmly) mentioned in discovery

🎯 RECOMMENDED ACTIONS
1. Invite CFO to demo call
2. Prepare competitive displacement deck
──────────────────────────────

Now everyone in the channel has context. No catch-up needed.

Building This with OpenClaw​

Let's build the automated deal room system.

Step 1: Channel Creation Trigger​

# deal_room_manager.py
import os
from slack_sdk import WebClient
from datetime import datetime

slack = WebClient(token=os.environ["SLACK_BOT_TOKEN"])

DEAL_ROOM_THRESHOLD = 50000
STAGE_THRESHOLD = "demo_scheduled"

def should_create_deal_room(deal: dict) -> bool:
"""Determine if deal qualifies for a deal room"""
return (
deal["amount"] >= DEAL_ROOM_THRESHOLD or
deal["stage"] == STAGE_THRESHOLD
) and not deal.get("deal_room_channel")

def create_deal_room(deal: dict) -> str:
"""Create Slack channel for deal"""

# Generate channel name
company_slug = slugify(deal["company_name"])[:20]
amount_k = int(deal["amount"] / 1000)
channel_name = f"deal-{company_slug}-{amount_k}k"

# Create channel
result = slack.conversations_create(
name=channel_name,
is_private=True
)
channel_id = result["channel"]["id"]

# Set channel topic
slack.conversations_setTopic(
channel=channel_id,
topic=f"🎯 {deal['company_name']} | ${deal['amount']:,} | {deal['stage']} | Owner: {deal['owner_name']}"
)

# Add initial members
member_ids = get_deal_room_members(deal)
slack.conversations_invite(
channel=channel_id,
users=member_ids
)

# Post initial context
post_deal_overview(channel_id, deal)

# Update CRM with channel link
crm_client.update_deal(deal["id"], {
"deal_room_channel": channel_id,
"deal_room_created": datetime.now().isoformat()
})

return channel_id

def get_deal_room_members(deal: dict) -> list:
"""Determine who should be in the deal room"""

members = [deal["owner_slack_id"]] # Always include owner

# Add manager
if deal["amount"] >= 100000:
members.append(get_manager_slack_id(deal["owner_id"]))

# Add SE if technical requirements
if deal.get("requires_technical_validation"):
members.append(get_available_se_slack_id())

# Add SDR if they sourced it
if deal.get("sourced_by_slack_id"):
members.append(deal["sourced_by_slack_id"])

return list(set(members)) # Dedupe

Step 2: Context Posting​

def post_deal_overview(channel_id: str, deal: dict):
"""Post initial deal context to channel"""

# Gather all context
contacts = get_deal_contacts(deal["id"])
activities = get_deal_activities(deal["id"], limit=10)
risks = analyze_deal_risks(deal)
engagement_score = calculate_engagement_score(deal)

# Format message
blocks = [
{
"type": "header",
"text": {"type": "plain_text", "text": "πŸ“‹ DEAL OVERVIEW"}
},
{
"type": "section",
"fields": [
{"type": "mrkdwn", "text": f"*Company:*\n{deal['company_name']}"},
{"type": "mrkdwn", "text": f"*Amount:*\n${deal['amount']:,}"},
{"type": "mrkdwn", "text": f"*Stage:*\n{deal['stage']}"},
{"type": "mrkdwn", "text": f"*Close Date:*\n{deal['close_date']}"},
]
},
{"type": "divider"},
{
"type": "header",
"text": {"type": "plain_text", "text": "πŸ‘₯ BUYING COMMITTEE"}
},
{
"type": "section",
"text": {"type": "mrkdwn", "text": format_contacts(contacts)}
},
{"type": "divider"},
{
"type": "header",
"text": {"type": "plain_text", "text": f"πŸ“Š ENGAGEMENT SCORE: {engagement_score}/100"}
},
{"type": "divider"},
{
"type": "header",
"text": {"type": "plain_text", "text": "πŸ“ RECENT ACTIVITY"}
},
{
"type": "section",
"text": {"type": "mrkdwn", "text": format_activities(activities)}
}
]

if risks:
blocks.extend([
{"type": "divider"},
{
"type": "header",
"text": {"type": "plain_text", "text": "⚠️ RISKS"}
},
{
"type": "section",
"text": {"type": "mrkdwn", "text": format_risks(risks)}
}
])

slack.chat_postMessage(
channel=channel_id,
blocks=blocks,
text=f"Deal overview for {deal['company_name']}"
)

Step 3: Intelligent Alerts​

This is where AI makes the difference:

from anthropic import Anthropic

claude = Anthropic()

ALERT_ANALYSIS_PROMPT = """
You are a sales deal analyst monitoring deal health. Given the recent activity and deal context, determine if an alert should be sent to the deal room.

Alert ONLY for significant events:
- Champion goes dark (no engagement in 7+ days after regular contact)
- New stakeholder enters (especially C-level or procurement)
- Competitor mentioned
- Timeline changes (close date moved)
- Negative sentiment in communications
- Unusual engagement spike (could indicate urgency or comparison shopping)
- Risk factors emerging

DO NOT alert for:
- Normal activity cadence
- Minor email opens
- Routine meetings scheduled
- Small CRM updates

If alerting, provide:
1. Alert severity (πŸ”΄ critical, 🟑 warning, 🟒 positive)
2. Clear headline
3. Context (what happened)
4. Recommended action
5. Who should be tagged
"""

def analyze_deal_event(deal: dict, event: dict) -> dict | None:
"""Determine if event warrants an alert"""

recent_context = get_deal_recent_context(deal["id"])

prompt = f"""
Deal context:
{json.dumps(deal, indent=2)}

Recent history:
{json.dumps(recent_context, indent=2)}

New event:
{json.dumps(event, indent=2)}

Should this trigger an alert? If yes, format the alert. If no, respond with "NO_ALERT".
"""

response = claude.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=500,
system=ALERT_ANALYSIS_PROMPT,
messages=[{"role": "user", "content": prompt}]
)

result = response.content[0].text

if "NO_ALERT" in result:
return None

return parse_alert(result)

def post_alert(channel_id: str, alert: dict):
"""Post alert to deal room"""

severity_emoji = {
"critical": "πŸ”΄",
"warning": "🟑",
"positive": "🟒"
}

emoji = severity_emoji.get(alert["severity"], "ℹ️")

message = f"""
{emoji} *{alert['headline']}*

{alert['context']}

*Recommended Action:* {alert['action']}
"""

# Tag relevant people
if alert.get("tag_users"):
mentions = " ".join([f"<@{uid}>" for uid in alert["tag_users"]])
message = f"{mentions}\n\n{message}"

slack.chat_postMessage(
channel=channel_id,
text=message
)

AI Deal Alert Workflow

Step 4: Status Updates​

def post_daily_summary(channel_id: str, deal: dict):
"""Post daily deal status summary"""

# Gather 24-hour activity
activities = get_deal_activities(deal["id"], hours=24)
score_change = get_engagement_score_change(deal["id"], hours=24)

# Skip if no activity
if not activities and score_change == 0:
return

summary = f"""
πŸ“Š *Daily Update* | {datetime.now().strftime('%b %d')}

*Engagement Score:* {deal['engagement_score']}/100 ({'+' if score_change >= 0 else ''}{score_change})

*Activity:*
{format_activities(activities) if activities else "No new activity"}

*Stage:* {deal['stage']}
*Days to Close Date:* {(deal['close_date'] - datetime.now()).days}
"""

slack.chat_postMessage(
channel=channel_id,
text=summary
)

def handle_status_request(channel_id: str, deal: dict, question: str = None):
"""Handle @bot status request in channel"""

context = gather_full_deal_context(deal["id"])

if question:
prompt = f"""
Deal context:
{json.dumps(context, indent=2)}

Question: {question}

Provide a concise answer based on the deal data.
"""
else:
prompt = f"""
Deal context:
{json.dumps(context, indent=2)}

Provide a brief status summary:
1. Current health assessment (1-2 sentences)
2. Key recent developments
3. Biggest risk right now
4. Recommended next action
"""

response = claude.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=400,
messages=[{"role": "user", "content": prompt}]
)

slack.chat_postMessage(
channel=channel_id,
text=response.content[0].text
)

Step 5: OpenClaw Configuration​

# openclaw.yaml
agents:
deal-room-manager:
prompt: |
You manage Slack deal rooms for the sales team. Your responsibilities:

1. Create deal rooms when deals qualify (>$50K or Stage 2+)
2. Post initial context and overview
3. Monitor for alert-worthy events
4. Post daily summaries for active deals
5. Respond to status requests

Be helpful but not noisy. Only alert when it matters.

memory: true

triggers:
- event: deal_stage_change
- event: deal_amount_change
- event: email_received
- event: meeting_completed
- event: support_ticket_created

deal-room-responder:
prompt: |
When someone asks a question in a deal room, provide helpful answers
using the deal context. Be concise and actionable.

triggers:
- event: slack_mention
filter: channel.startsWith("deal-")

cron:
daily-summaries:
schedule: "0 8 * * 1-5" # 8am weekdays
action: run_daily_deal_summaries

The Impact​

Here's what teams see after implementing AI deal rooms:

Before​

  • 30+ minutes per deal for context gathering
  • 3-5 people asking "what's the status?" per week per deal
  • Risks surfaced at pipeline reviews (often too late)
  • No single source of deal truth

After​

  • Instant context for anyone entering the deal
  • Zero status questions (it's all in the channel)
  • Risks surfaced in real-time when they emerge
  • Slack channel IS the deal truth
MetricBeforeAfterChange
Time gathering deal context32 min/deal/week4 min/deal/week-88%
Deals with "surprise" outcomes23%7%-70%
Cross-functional collaboration score5.8/108.9/10+53%
CRM data accuracy64%91%+42%

Best Practices​

1. Set Clear Thresholds​

Don't create deal rooms for every deal. You'll create noise and nobody will pay attention. Start with:

  • Deals over $50K, OR
  • Deals in Stage 3+, OR
  • Strategic accounts (regardless of size)

2. Auto-Archive on Close​

When deals close (won or lost), automatically archive the channel after posting a summary. Keeps workspace clean.

3. Sync Both Ways​

Updates in Slack should flow back to CRM. If someone posts "Call pushed to Friday," the CRM close date should update.

4. Train the Team​

The bot is only useful if people use it. Do a 15-minute training on:

  • How to ask for status
  • What triggers alerts
  • How to update deal info via Slack

5. Review and Refine​

Monthly, check:

  • Are alerts useful or noisy?
  • Are deal rooms being used?
  • What context is missing?

Adjust thresholds and prompts based on feedback.

Getting Started​

  1. Day 1: Set up Slack bot with basic channel creation
  2. Week 1: Add context posting and member management
  3. Week 2: Implement alert system
  4. Week 3: Add status summaries and Q&A
  5. Month 2: Refine based on team feedback

The technology is straightforward. The value is in execution.


Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.

Want AI That Actually Drives Deals?​

MarketBetter doesn't just alert you to deal signalsβ€”it tells your SDRs exactly what to do next. From signal to action, automatically.

Book a Demo β†’


Related Posts:

How to Train Custom AI Agents for Your GTM Stack [2026 Guide]

Β· 10 min read
MarketBetter Team
Content Team, marketbetter.ai

Generic AI gives generic results.

You've tried ChatGPT for sales emails. The output sounds like... ChatGPT. Professional. Pleasant. Forgettable.

Your prospects can smell AI-generated content from a mile away. And they delete it.

The secret isn't better prompts for generic AIβ€”it's training AI that understands YOUR business.

This guide shows you how to build custom AI agents that know your ICP, speak in your voice, understand your competitive landscape, and produce content that actually sounds like your team wrote it.

Custom AI agent training workflow with prompt engineering

Why "Off-the-Shelf" AI Fails for Sales​

The Generic Problem​

Default AI models know everything about everythingβ€”and nothing about your specific:

  • ICP characteristics β€” Who your best customers actually are
  • Pain points β€” What problems you uniquely solve
  • Voice β€” How your brand communicates
  • Objections β€” What prospects actually say, not textbook objections
  • Process β€” Your specific sales stages and handoffs
  • Competitors β€” Your actual competitive landscape

The Cost of Generic​

When AI doesn't understand your context:

TaskGeneric AI OutputWhat You Actually Need
Cold email"I hope this email finds you well..."Pattern-interrupt that matches your voice
Objection responseTextbook rebuttalHow YOUR top reps actually handle it
Call prepCompany Wikipedia summarySpecific angles based on your ICP fit
LinkedIn message"I noticed we're both in tech..."Reference to actual shared context

Generic wastes time and damages brand perception.

The Three Levels of AI Customization​

You don't need to "train" a model from scratch. There are easier approaches:

Level 1: Prompt Engineering (No Code)​

Give the AI detailed context in every prompt. Free, immediate, good for testing.

Best for: Small teams, experimentation, single-use tasks

Level 2: System Prompts + Memory (Low Code)​

Create persistent agent personas with custom instructions. Requires OpenClaw or similar.

Best for: Repeatable tasks, team-wide deployment, consistent voice

Level 3: Fine-Tuning (Technical)​

Train a model on your actual data. Requires examples and some technical setup.

Best for: High-volume tasks, unique terminology, proprietary voice

Let's build each.

Level 1: Prompt Engineering​

The 80/20 of AI customization. Most teams never need more than this.

The Context Stack​

Every great prompt includes:

1. ROLE β€” Who the AI is acting as
2. CONTEXT β€” Background about your business
3. TASK β€” What you want it to do
4. EXAMPLES β€” What good output looks like
5. CONSTRAINTS β€” What to avoid
6. FORMAT β€” How to structure output

Example: Sales Email Prompt​

## ROLE
You are a senior SDR at MarketBetter, a B2B sales intelligence platform.

## CONTEXT
Our ICP:
- VP/Director of Sales at B2B SaaS companies, 50-500 employees
- Pain: SDR efficiency, lead quality, personalizing outbound at scale
- Our differentiation: We don't just show WHO to callβ€”we tell them WHAT to do

Competitors: Apollo (no workflow), 6sense (enterprise pricing), ZoomInfo (data only)

Our voice: Direct, helpful, slightly irreverent. No corporate speak.
We sound like a smart friend who happens to know a lot about sales.

## TASK
Write a cold email to a prospect based on the research provided.

## EXAMPLES OF OUR VOICE
Good: "Your SDRs are drowning in data. Here's a life raft."
Good: "Most sales tools show you a firehose. We hand you a glass of water."
Bad: "I hope this email finds you well."
Bad: "We are a leading provider of sales intelligence solutions."

## CONSTRAINTS
- Never start with "I hope this email finds you well"
- Never use "leverage," "synergy," or "circle back"
- Maximum 125 words
- Must include specific detail from prospect research
- End with a question, not a meeting request

## FORMAT
Subject line, then body. No salutation ("Hi Name" is fine but not required).

Building a Prompt Library​

Create prompts for every common task:

/prompts
/email
cold_outreach_v3.md
follow_up_after_meeting.md
breakup_email.md
/linkedin
connection_request.md
first_message.md
inmail_template.md
/call
discovery_questions.md
objection_handling.md
voicemail_script.md
/research
account_briefing.md
competitive_analysis.md
champion_mapping.md

Prompt Versioning​

Track what works:

# cold_outreach_v3.md
---
version: 3.2
last_updated: 2026-02-09
performance:
reply_rate: 8.2%
a/b_tested: true
sample_size: 1,247
changes_from_v2:
- Added pattern-interrupt examples
- Removed "reach out" from banned phrases
- Shortened max length from 150 to 125 words
---

[prompt content...]

Level 2: System Prompts + Memory​

When you need consistent behavior across sessions.

Creating Agent Personas​

In OpenClaw, create a dedicated agent:

# agents/sdr_agent.yaml
name: "SDR Assistant"
emoji: "🎯"

soul: |
You are the SDR Assistant for MarketBetter.

## Your Personality
- Direct and efficient (SDRs are busy)
- Helpful but not sycophantic
- Knowledgeable about our ICP and process

## What You Know
- Our ICP: VP/Director Sales at B2B SaaS, 50-500 employees
- Our competitors and how we beat them
- Our sales process and stage definitions
- Our messaging and voice guidelines

## What You Do
- Write emails in our voice
- Prep accounts for calls
- Handle objection scripting
- Research prospects

## What You Don't Do
- Book meetings directly (point to Calendly)
- Access competitor pricing (it changes)
- Make promises about features

memory:
# Load company context
- /knowledge/icp.md
- /knowledge/competitors.md
- /knowledge/voice-guidelines.md
- /knowledge/objection-playbook.md

Building the Knowledge Base​

Create documents the agent references:

# /knowledge/icp.md

## Ideal Customer Profile

### Primary Persona: VP/Director of Sales
- Company size: 50-500 employees
- Industry: B2B SaaS, Tech, IoT
- Team structure: Has SDR team (3-15 SDRs)
- Tech stack: HubSpot or Salesforce, uses 3+ sales tools

### Buying Triggers
- Just raised Series A/B (scaling sales team)
- Hired new sales leadership (mandate to improve)
- SDR turnover problems (efficiency is suffering)
- Competitor using us (fear of falling behind)

### Common Objections
1. "We already have Apollo/ZoomInfo"
β†’ They give you data. We give you a playbook.

2. "Our current process works"
β†’ What's your SDR ramp time? What's their daily call-to-meeting ratio?

3. "Don't have budget"
β†’ Typically saves 30% of SDR time. What's that worth annually?

AI agent prompt engineering iteration cycle

Adding Memory​

Let agents remember across sessions:

# OpenClaw agent with memory
memory_config:
enabled: true
paths:
- memory/daily_notes/
- memory/account_context/

auto_remember:
- prospect_preferences # "Sarah prefers morning calls"
- past_interactions # "Sent 3 emails, no response"
- custom_context # "Mentioned they use Salesforce"

Now when you ask "Draft a follow-up for Sarah at Acme," the agent remembers your history.

Level 3: Fine-Tuning​

When you need AI that sounds exactly like your best performers.

When to Fine-Tune​

Fine-tuning is worth it when:

  • You have 500+ examples of great output
  • Consistency matters more than flexibility
  • You're running high-volume tasks (1000s daily)
  • Your terminology is unique

Preparing Training Data​

Collect examples of excellent work:

// training_examples.jsonl
{"messages": [
{"role": "system", "content": "You write cold emails for MarketBetter."},
{"role": "user", "content": "Write email for: Sarah Chen, VP Sales, Acme Corp, 200 employees, just raised Series B"},
{"role": "assistant", "content": "Subject: Series B β†’ what's next for sales?\n\nSarah,\n\nSaw the funding newsβ€”congrats. The next 6 months are make-or-break for scaling the team.\n\nMost companies at your stage drown their new SDRs in data. \"Here's 10,000 leads, figure it out.\"\n\nThe ones that win give them a playbook. Who to call, what to say, why today.\n\nThat's what we built. Happy to show you what top-performing SDR teams at your stage actually do differently.\n\nβ€” [Name]"}
]}

{"messages": [
{"role": "system", "content": "You write cold emails for MarketBetter."},
{"role": "user", "content": "Write email for: James Wilson, Director Sales Ops, TechCorp, competitor using Apollo"},
{"role": "assistant", "content": "Subject: Apollo gives you data. Now what?\n\nJames,\n\nAppollo's solid for contact data. But your SDRs still wake up wondering: who do I actually call first? What do I say?\n\nThat's the gap we fill. Not more dataβ€”a daily playbook. \"Call Sarah at Acme, mention their recent Series B, ask about scaling challenges.\"\n\nSDRs spend time selling, not researching.\n\n30 min to show you how it works with your current Apollo setup?\n\nβ€” [Name]"}
]}

Running Fine-Tuning (OpenAI)​

# Upload training file
openai api files.create -f training_data.jsonl -p fine-tune

# Start fine-tuning
openai api fine_tuning.jobs.create \
-m gpt-4o-mini \
-t file-abc123

# Check status
openai api fine_tuning.jobs.retrieve -j ftjob-xyz789

# Use fine-tuned model
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "ft:gpt-4o-mini:marketbetter:sdr-emails:2026-02",
"messages": [{"role": "user", "content": "Write email for: ..."}]
}'

Fine-Tuning Best Practices​

Data quality > quantity 100 excellent examples beat 1000 mediocre ones.

Diverse examples Include different scenarios, personas, objections.

Negative examples Show what NOT to do:

{"messages": [
{"role": "user", "content": "Write email..."},
{"role": "assistant", "content": "I hope this email finds you well! I wanted to reach out because..."}
], "weight": -1} // Negative weight = avoid this pattern

Regular retraining Your voice evolves. Retrain quarterly with fresh examples.

The Feedback Loop​

Custom AI gets better when you close the loop:

Tracking Output Quality​

// Log every AI output
const logOutput = {
prompt_id: 'cold_email_v3',
input: prospectContext,
output: generatedEmail,
user_edits: whatTheySent,
edit_distance: calculateDiff(output, user_edits),
outcome: {
sent: true,
opened: true,
replied: true,
meeting_booked: true
}
};

Learning from Edits​

If reps consistently edit the same things:

// Weekly analysis
const commonEdits = analyzeEdits(logs);

// Example output:
// "Users removed 'hope this helps' in 67% of emails"
// "Users shortened first paragraph in 45% of cases"
// "Users added specific data point in 78% of cases"

// Update prompt based on patterns

A/B Testing Prompts​

Run experiments on prompt versions:

const promptExperiment = {
control: 'cold_email_v3',
variant: 'cold_email_v4_shorter',
allocation: { control: 0.5, variant: 0.5 },
metrics: ['reply_rate', 'edit_distance', 'meeting_rate'],
sample_size_needed: 500,
auto_promote_threshold: { reply_rate: 0.10 } // 10% reply = auto-win
};

Building Your Training Pipeline​

Phase 1: Document What Works (Week 1-2)​

  1. Interview top performers: How do they write emails? Handle objections?
  2. Collect 50+ examples of excellent work
  3. Document your voice guidelines
  4. Write your ICP and competitor profiles

Phase 2: Build Basic Prompts (Week 3-4)​

  1. Create prompt templates for top 5 use cases
  2. Test with 3-5 team members
  3. Iterate based on feedback
  4. Build prompt library in git

Phase 3: Deploy Agents (Month 2)​

  1. Set up OpenClaw with your prompts
  2. Create agent personas with memory
  3. Connect to CRM for context injection
  4. Train team on using agents

Phase 4: Continuous Improvement (Ongoing)​

  1. Track output quality and edits
  2. A/B test prompt variations
  3. Update knowledge base monthly
  4. Consider fine-tuning when you hit 500+ examples

Common Mistakes to Avoid​

Over-Engineering Early​

Don't fine-tune on day one. Start with prompts. Get wins. Then optimize.

Ignoring the Human Layer​

AI assists, humans approve. Always have a rep review before sending.

Static Prompts​

Your market changes. Your product changes. Your voice evolves. Update prompts regularly.

No Feedback Loop​

If you're not measuring output quality, you're not improving.

Integrating with MarketBetter​

MarketBetter's Daily SDR Playbook uses trained AI models that understand your specific:

  • Account scoring β€” Tuned to YOUR closed-won patterns
  • Message generation β€” Matches YOUR voice and style
  • Objection handling β€” Based on YOUR competitive landscape

Want to see custom AI in action? Book a demo and we'll show you how trained AI powers personalization at scale.

Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.

Further Reading​


Generic AI is table stakes. Custom AI is your competitive advantage. Start building yours.

10 AI Prompts That 10x Your SDR Productivity (Copy-Paste Ready)

Β· 10 min read
MarketBetter Team
Content Team, marketbetter.ai

The difference between a mediocre AI response and a game-changing one? The prompt.

With 57% of enterprises now using AI agents for multi-stage sales workflows and 80% reporting measurable ROI, the SDRs who master prompting are pulling ahead fast. They're not working harderβ€”they're working smarter by getting 10x better outputs from the same AI tools everyone else has access to.

Here's the thing: anyone can send 10,000 emails for pennies now. The SDRs crushing quota aren't just using AIβ€”they're using it strategically with prompts that deliver genuinely personalized, insight-driven outreach.

Below are 10 copy-paste prompts I use daily. Each one is battle-tested, includes template variables you can customize, and comes with a real example of what great output looks like.

Why Good Prompts Actually Matter​

Most SDRs treat ChatGPT or Claude like a magic 8-ball: ask a vague question, get a vague answer.

Bad prompt: "Write me a sales email"

Good prompt: Specific context + clear task + desired format + constraints

The difference in output quality is staggering. A well-crafted prompt transforms AI from a generic text generator into your personal sales research analyst, copywriter, and strategistβ€”all in one.

Think of prompts like instructions to a brilliant but literal-minded assistant. The more context and specificity you provide, the more valuable the output.


The 10 Prompts​

1. Lead Research Deep Dive​

Use this before any outreach to uncover insights that make your emails impossible to ignore.

You are a B2B sales research analyst. I need comprehensive research on [CONTACT_NAME], [ROLE] at [COMPANY].

Research and provide:
1. **Company Overview**: What does [COMPANY] do? Recent news, funding, acquisitions in the last 12 months
2. **Role Context**: What are typical priorities and challenges for a [ROLE] at a company this size?
3. **Potential Pain Points**: Based on their industry ([INDUSTRY]) and company stage, what problems might they face that [YOUR_PRODUCT] could solve?
4. **Personalization Hooks**: Any recent LinkedIn posts, podcast appearances, awards, or public content I can reference?
5. **Recommended Angle**: What's the single most compelling reason this person should take a meeting?

Be specific. Avoid generic statements. If you don't know something, say so rather than guessing.

Example output:

"Jake recently posted on LinkedIn about struggling with lead quality from ZoomInfo. His company just raised Series Bβ€”likely scaling the sales team. Angle: position around the pain of scaling outbound while maintaining personalization quality."


2. Hyper-Personalized First Email​

Transform your research into emails that actually get replies.

Write a cold email to [CONTACT_NAME], [ROLE] at [COMPANY].

**Context about them:**
[PASTE YOUR RESEARCH OR KEY FACTS]

**What we sell:**
[YOUR_PRODUCT] helps [TARGET_PERSONA] to [MAIN_VALUE_PROP].

**Rules:**
- Maximum 100 words
- Open with something specific to them (NOT "I hope this finds you well")
- One clear pain point, one clear value statement
- End with a low-friction CTA (not "Let me know if you'd like to chat")
- Tone: confident but not pushy, conversational but professional
- No buzzwords like "synergy," "leverage," or "unlock"

Write 3 variations with different opening hooks.

Pro tip: Always generate multiple variations. The first option is rarely the best.


3. Objection Handling Scripts​

Prepare for common pushbacks before they happen.

I'm an SDR selling [YOUR_PRODUCT] to [TARGET_PERSONA].

The prospect just said: "[OBJECTION]"

Give me:
1. **Why they're saying this**: What's the real concern behind this objection?
2. **Acknowledge & Pivot**: A response that validates their concern without being defensive
3. **Proof Point**: A stat, case study reference, or third-party validation I could use
4. **Redirect Question**: A question that moves the conversation forward

Keep responses conversationalβ€”I'm on a call, not writing an essay.

Common objections to prep:

  • "We already use [COMPETITOR]"
  • "We don't have budget right now"
  • "Send me some information" (the brush-off)
  • "I need to talk to my team"
  • "We're not looking at this until Q3"

4. Pre-Call Research Brief​

Never walk into a call blind again. Run this 10 minutes before every meeting.

I have a call in 10 minutes with [CONTACT_NAME], [ROLE] at [COMPANY].

Create a 1-page call prep brief:

**Quick Company Context:**
- What they do (1 sentence)
- Size, funding stage, recent news
- Tech stack if known

**This Person:**
- Career background (quick summary)
- Likely priorities in their role
- Any content they've published

**Conversation Starters:**
- 2-3 specific things I can reference to build rapport

**Likely Pain Points:**
- Based on role + company context

**Questions I Should Ask:**
- 3 discovery questions tailored to their situation

**Red Flags to Watch:**
- What might indicate this isn't a good fit?

Keep it scannableβ€”bullet points, not paragraphs.

5. LinkedIn Connection Request​

Stand out in a sea of "I'd love to connect" messages.

Write a LinkedIn connection request to [CONTACT_NAME], [ROLE] at [COMPANY].

**What I know about them:**
[ONE SPECIFIC FACT OR OBSERVATION]

**Rules:**
- Maximum 280 characters (LinkedIn limit)
- Reference something specific about them
- Give a reason to connect (not "I'd love to pick your brain")
- No pitch, no askβ€”just genuine connection
- Sound like a human, not a sales bot

Write 3 options.

Example output:

"Hey Sarahβ€”saw your take on intent data in that RevOps Co-op thread. Spot on. Would love to connect with folks who actually get the signal-vs-noise problem. β€” [NAME]"


6. Follow-Up Email Sequence​

Because 80% of deals require 5+ touches, but most SDRs give up after 2.

I sent a cold email to [CONTACT_NAME] at [COMPANY] about [TOPIC/VALUE_PROP].

No response after [X] days.

Write follow-up email #[2/3/4] that:
- Doesn't just "bump" or "circle back" (those are lazy)
- Adds NEW value: a relevant insight, resource, or angle
- Is shorter than the previous email
- Has a different CTA approach
- Maintains my dignity (no begging, guilt-tripping, or "I guess you're not interested")

**Previous email summary:**
[1-2 SENTENCES ON WHAT YOU SENT]

**Optional new hook:**
[ANY NEW NEWS, TRIGGER, OR INSIGHT ABOUT THEIR COMPANY]

Follow-up framework:

  • Email 2: New angle + social proof
  • Email 3: Relevant content/resource share
  • Email 4: Breakup email (creates urgency without desperation)

7. Competitive Battlecard​

Know your competition cold.

I sell [YOUR_PRODUCT] and often compete against [COMPETITOR].

Create a quick competitive battlecard:

**[COMPETITOR] Overview:**
- What they do, who they serve
- Pricing model if known
- Key features/strengths

**Where They Win:**
- What are they genuinely good at?
- What types of companies choose them?

**Where We Win:**
- Based on [YOUR_DIFFERENTIATORS], where do we have an advantage?

**Common Objections When They're Incumbent:**
- What will prospects say if they're already using [COMPETITOR]?

**Displacement Talk Track:**
- How do I respectfully position against them without bashing?

**Trap Questions:**
- Questions I can ask that highlight our strengths vs. their weaknesses?

For a deeper dive on AI tool comparisons, check out our Claude vs ChatGPT for Sales Teams breakdown.


8. Meeting Prep & Demo Customization​

Tailor your demo to what actually matters to this specific buyer.

I'm preparing a demo for [CONTACT_NAME], [ROLE] at [COMPANY].

**What we've learned in discovery:**
[KEY PAIN POINTS, GOALS, OR REQUIREMENTS]

**Their industry:** [INDUSTRY]
**Company size:** [SIZE]
**Current solution:** [WHAT THEY USE TODAY]

Help me prepare:

1. **Demo Flow**: What features should I prioritize and in what order?
2. **Tailored Talk Track**: How do I frame each feature in terms of THEIR specific problems?
3. **ROI Story**: What metrics would resonate most with a [ROLE]?
4. **Landmines to Avoid**: Based on their current setup, what might cause objections?
5. **Next Steps to Propose**: What's a logical follow-up that advances the deal?

9. Account Prioritization Matrix​

Stop wasting time on accounts that will never close.

I have [X] accounts in my territory. Help me prioritize them.

Here's the data:
[PASTE ACCOUNT LIST WITH: Company name, industry, size, last activity, any signals]

Score and rank these accounts based on:

1. **Fit Score**: How well do they match our ICP ([DESCRIBE YOUR ICP])?
2. **Timing Signals**: Any indicators they're in-market now?
3. **Access**: Do we have a path to decision-makers?
4. **Deal Size Potential**: What's the likely ACV?

Output as a tiered list:
- **Tier 1 (Hot)**: Work these daily
- **Tier 2 (Warm)**: Work these weekly
- **Tier 3 (Nurture)**: Monthly touch, not priority

Include a 1-sentence reasoning for each Tier 1 account.

10. End-of-Day Summary & Tomorrow's Plan​

Close out strong, start tomorrow with momentum.

Here's what happened in my sales day:

**Calls made:** [X]
**Emails sent:** [X]
**Replies received:** [X]
**Meetings booked:** [X]
**Deals advanced:** [LIST]
**Stalled deals:** [LIST]
**Notable wins:** [ANY]
**Frustrations:** [ANY]

Help me:

1. **Reflect**: What worked well today? What patterns do I see?
2. **Diagnose**: If I'm behind on [SPECIFIC_METRIC], what might be causing it?
3. **Prioritize Tomorrow**: Based on my pipeline, what are the 3 highest-leverage activities for tomorrow?
4. **Prepare**: Any specific accounts or tasks I should prep tonight?

Be direct and actionableβ€”I want to leave with a clear plan.

How to Use These Prompts Effectively​

Having great prompts is only half the battle. Here's how to get maximum value:

1. Build Your Prompt Library​

Save these in a doc, Notion, or your CRM snippets. The SDRs who move fastest have their prompts one click away.

2. Customize the Variables​

The [BRACKETS] are your personalization points. The more specific you make them, the better your output. Generic inputs = generic outputs.

3. Iterate on Outputs​

First output is a draft, not a final. Ask follow-up questions like:

  • "Make it shorter"
  • "Make the CTA more casual"
  • "Give me a version for a technical buyer"

4. Layer Your AI Usage​

Use prompt #1 (research) β†’ feed that output into prompt #2 (email). Chain them for compounding quality.

5. Learn From What Works​

When an email gets a reply or a call goes well, reverse engineer it. Update your prompts with what's working.


Bonus: Template Variables Cheat Sheet​

Keep these placeholders consistent across all your prompts:

VariableDescriptionExample
[CONTACT_NAME]Prospect's first nameSarah
[ROLE]Their job titleVP of Sales
[COMPANY]Their company nameAcme Corp
[INDUSTRY]Their verticalFintech
[YOUR_PRODUCT]What you sellMarketBetter
[TARGET_PERSONA]Who you sell toB2B sales teams
[MAIN_VALUE_PROP]Core benefitidentify high-intent buyers before competitors
[COMPETITOR]Who you're up againstZoomInfo
[OBJECTION]What they said"We already have a solution"
[YOUR_ICP]Ideal customer profileSeries B+ SaaS, 50-500 employees

The Real Unlock: AI + Human Connection​

Here's what most people get wrong about AI in sales:

The goal isn't to replace human connectionβ€”it's to create more time for it.

When you use AI to handle the research, first drafts, and analysis, you free up mental bandwidth for what actually closes deals: genuine conversations, creative problem-solving, and building real relationships.

With AI, anyone can send 10,000 emails for pennies. Human connection is almost the premium currency left in B2B.

These prompts help you do the busywork faster so you can invest your energy where it actually matters.


Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.

Ready to Go Beyond Prompts?​

Want to see these prompting principles built into an actual AI-powered sales workflow? Book a demo of MarketBetter and see how we turn intent signals into personalized outreachβ€”automatically.

Or if you're the DIY type, check out our tutorial on how to build your own AI SDR using tools you already have.


Now go make those prompts work for you. Bookmark this page, copy what resonates, and start experimenting. The SDRs who master AI prompting today will be tomorrow's sales leaders.

How to Use AI for Demo Personalization That Wins Deals [2026]

Β· 9 min read
MarketBetter Team
Content Team, marketbetter.ai

Generic demos kill deals.

You walk in with your standard deck. You show features in your standard order. You use your standard case studies. The prospect politely nods along, asks a few questions, then ghosts you for three weeks.

Meanwhile, your competitor did their homework. They opened with the prospect's exact pain point. They showed the feature that solves it. They referenced a customer in the same industry with the same problem.

Guess who got the deal?

Demo personalization isn't optional anymore. But doing it manually for every prospect takes hours. AI changes that math entirely.

AI-powered demo personalization workflow

The Demo Personalization Problem​

What great demo prep looks like:

  • Research the prospect's company (news, earnings, job postings)
  • Understand each attendee's role and likely priorities
  • Identify their specific pain points from discovery call
  • Select relevant case studies and proof points
  • Customize deck with their logo, data, and challenges
  • Prepare for likely objections
  • Create custom follow-up materials

Time required: 2-4 hours per demo

What actually happens:

  • Skim their website for 5 minutes
  • Use the same deck you always use
  • Wing the objection handling
  • Hope for the best

Time spent: 10 minutes

AI lets you get 90% of the value with 10% of the time.

The AI Demo Prep Stack​

Overview​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Pre-Demo │────▢│ AI Research │────▢│ Outputs β”‚
β”‚ Trigger β”‚ β”‚ & Assembly β”‚ β”‚ For Rep β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
Calendar Claude/Codex - Research brief
24h before + Web search - Custom slides
+ CRM data - Objection prep
- Attendee profiles

Trigger: 24 Hours Before Demo​

Set up a cron job that runs 24 hours before every scheduled demo:

# OpenClaw cron configuration
cron:
- name: "Demo Prep Automation"
schedule: "0 9 * * *" # Daily at 9am
prompt: |
Check calendar for demos tomorrow.
For each demo:
1. Pull CRM data and discovery notes
2. Research company and attendees
3. Generate personalized brief
4. Recommend case studies
5. Create objection prep
6. Send to rep via Slack

Component 1: Company Deep-Dive​

async def research_company(company_name: str, company_domain: str) -> dict:
"""Research a company for demo preparation."""

research_prompt = f"""
Research \{company_name\} ({company_domain}) for an upcoming sales demo.

Find and summarize:

## Company Overview
- Industry and business model
- Size (employees, revenue if public)
- Recent funding or major events

## Current Challenges (likely)
- Based on their job postings, what are they building?
- Based on news, what problems are they solving?
- Industry-wide challenges affecting them

## Technology Stack
- What tools do they likely use? (from job postings)
- Integration opportunities

## Competitive Context
- Who are their competitors?
- What differentiates them?

## Trigger Events
- Recent news worth mentioning
- Leadership changes
- Product launches

Output as structured JSON for use in demo prep.
"""

# Use Claude with web search capability
response = await claude_with_search(research_prompt)
return parse_research(response)

Component 2: Attendee Profiles​

async def research_attendees(attendees: list[dict]) -> list[dict]:
"""Research each demo attendee."""

profiles = []
for attendee in attendees:
profile_prompt = f"""
Research {attendee['name']} ({attendee['title']}) at {attendee['company']}.

Find:
- Background (previous roles, education)
- Recent LinkedIn posts or activity
- Likely priorities based on their role
- How our product helps someone in their position
- Potential concerns they might have

Output: 3-paragraph brief for the sales rep.
"""

profile = await claude_with_search(profile_prompt)
profiles.append({
'name': attendee['name'],
'title': attendee['title'],
'profile': profile,
'suggested_talking_points': extract_talking_points(profile)
})

return profiles

Component 3: Personalized Slide Recommendations​

Based on the research, recommend which slides to use and in what order:

def recommend_slides(research: dict, discovery_notes: str) -> list[dict]:
"""Recommend slide order based on prospect context."""

prompt = f"""
Based on this prospect research and discovery notes,
recommend the optimal demo flow.

Research: {json.dumps(research)}
Discovery Notes: {discovery_notes}

Available slides:
1. Company Overview
2. Problem Statement (generic)
3. Problem Statement (industry-specific variations)
4. Product Demo - Visitor ID
5. Product Demo - SDR Playbook
6. Product Demo - Smart Dialer
7. Product Demo - AI Chatbot
8. Case Study - SaaS
9. Case Study - IoT
10. Case Study - Professional Services
11. Pricing Overview
12. Implementation Timeline
13. ROI Calculator

Output:
- Recommended order (list of slide numbers)
- For each slide: talking points personalized to this prospect
- Slides to skip and why
"""

return claude_complete(prompt)

Component 4: Objection Preparation​

def prepare_objections(research: dict, competitor_context: dict) -> list[dict]:
"""Prepare likely objections and responses."""

prompt = f"""
Based on this prospect context, predict the top 5 objections
they're likely to raise and prepare responses.

Prospect Research: {json.dumps(research)}
Competitor Context: {json.dumps(competitor_context)}

For each objection:
1. The objection (verbatim how they'd phrase it)
2. Why they're likely to raise it (based on research)
3. Recommended response
4. Proof point or case study to reference
5. Question to ask back

Focus on objections specific to this prospect, not generic ones.
"""

return claude_complete(prompt)

Demo preparation workflow with AI

The Demo Prep Brief (Output Format)​

Here's what the AI delivers to your rep 24 hours before the demo:

# Demo Prep: Acme Corp
**Demo Date:** Feb 9, 2026 at 2:00 PM CT
**Prepared:** Feb 8, 2026 at 10:00 PM CT

---

## 🏒 Company Overview
Acme Corp is a B2B SaaS company in the HR tech space,
~200 employees, Series B ($35M raised). They sell
performance management software to mid-market companies.

**Recent news:** Just launched AI-powered feedback feature
(Jan 2026). Hiring aggressively for sales (12 open SDR roles).

**Why they're talking to us:** Current lead management is
"chaotic" (Sarah's word from discovery). Using Apollo for
data but no workflow automation.

---

## πŸ‘₯ Attendees

### Sarah Chen - VP Sales
**Background:** Former Gong, 8 years in sales leadership
**Likely priorities:** SDR efficiency, pipeline predictability
**Recent activity:** Posted about "SDR burnout" last week
**Talking points:**
- Reference the burnout post empathetically
- Focus on how our playbook reduces cognitive load
- She'll care about rep experience, not just metrics

### Mike Rodriguez - SDR Manager
**Background:** Promoted internally 6 months ago
**Likely priorities:** Proving himself, team performance
**Talking points:**
- He's new to management - position as making him look good
- Focus on coaching insights and team visibility
- Likely to ask detailed workflow questions

---

## πŸ“‹ Recommended Demo Flow

1. **Skip:** Generic company overview (they know who we are)
2. **Start with:** SDR Playbook - this is their pain point
3. **Show:** Visitor ID β†’ "this is how you'd capture their
website visitors showing buying intent"
4. **Case Study:** CloudHR story (same industry, similar size)
5. **Skip:** Dialer demo (they're not ready for this)
6. **End with:** Implementation timeline (Sarah asked about this)

**Total demo time:** 25-30 minutes (leave 15 for Q&A)

---

## ⚠️ Likely Objections

### 1. "How is this different from Apollo?"
**Why they'll ask:** Currently using Apollo, know it well
**Response:** "Apollo gives you data. We give you a daily
action list. Here's the differenceβ€”[show playbook view]"
**Proof point:** CloudHR switched from Apollo, 40% more meetings

### 2. "What's the learning curve for SDRs?"
**Why:** Mike is worried about adoption with his new team
**Response:** "Most SDRs are productive in 2 days. Here's whyβ€”
we replace 5 tools, not add another one."
**Ask back:** "What's the biggest adoption challenge you've
seen with new tools?"

### 3. "Can you integrate with Salesforce?"
**Why:** They're a Salesforce shop (from job postings)
**Response:** "Native integration, bi-directional sync.
Let me show you exactly how activities flow back."

---

## 🎯 Key Messages to Land

1. "From 20 tabs to one task list" - Sarah mentioned tab chaos
2. "Your SDRs shouldn't have to think about who to call next"
3. "This is what CloudHR's team sees every morning" [show example]

---

## πŸ“š Resources to Send After

- CloudHR case study PDF
- ROI calculator (pre-filled with their team size)
- SDR playbook example screenshots

---

*Generated by AI β€’ Review before demo*

Implementation: The 30-Minute Setup​

Step 1: Connect Your Calendar​

// Pull tomorrow's demos from Google Calendar
async function getTomorrowsDemos() {
const calendar = google.calendar({ version: 'v3' });
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);

const events = await calendar.events.list({
calendarId: 'primary',
timeMin: startOfDay(tomorrow).toISOString(),
timeMax: endOfDay(tomorrow).toISOString(),
q: 'demo OR Demo OR DEMO'
});

return events.data.items.map(parseDemo);
}

Step 2: Connect Your CRM​

// Pull discovery notes and contact info from HubSpot
async function getCRMContext(companyId) {
const company = await hubspot.companies.get(companyId);
const contacts = await hubspot.contacts.getByCompany(companyId);
const notes = await hubspot.notes.getByCompany(companyId);

return {
company,
contacts,
discoveryNotes: notes.filter(n => n.type === 'discovery')
};
}

Step 3: Run the AI Pipeline​

// Main demo prep pipeline
async function prepareDemo(demo) {
const crmContext = await getCRMContext(demo.companyId);

const [companyResearch, attendeeProfiles] = await Promise.all([
researchCompany(crmContext.company),
researchAttendees(demo.attendees)
]);

const slideRecommendations = await recommendSlides(
companyResearch,
crmContext.discoveryNotes
);

const objections = await prepareObjections(
companyResearch,
crmContext.competitorMentions
);

const brief = formatBrief({
demo,
companyResearch,
attendeeProfiles,
slideRecommendations,
objections
});

await sendToSlack(demo.repSlackId, brief);
await saveToNotion(demo.notionPageId, brief);
}

The Results​

Teams using AI demo prep report:

  • 50% less prep time (2 hours β†’ 20 minutes of review)
  • Higher conversion rates (prospects feel understood)
  • Better discovery-to-demo handoffs (nothing falls through cracks)
  • Consistent quality (junior reps perform like seniors)

The AI doesn't replace preparation. It makes preparation possible at scale.

Start Today​

You don't need a complex system. Start with:

  1. Copy one discovery call transcript
  2. Paste into Claude with:
    Based on this discovery call, create a demo prep brief.
    Include: company context, attendee profiles, recommended
    demo flow, likely objections, and key messages to land.
  3. Use the output in your next demo
  4. Iterate on the prompt based on what was useful

Once you see the value, automate the pipeline.


Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.

Let AI Do the Research So You Can Close​

MarketBetter's AI-powered playbook gives your SDRs everything they need for every conversationβ€”prospect context, recommended actions, and personalized talking points.

Book a Demo β†’


Related reading:

How to Automate Meeting Follow-Ups with AI Coding Agents [2026]

Β· 8 min read
MarketBetter Team
Content Team, marketbetter.ai

The call ends. Now you have 15 minutes before your next one.

In that window, you're supposed to:

  • Write a personalized follow-up email
  • Update the CRM with notes
  • Create action items in your task manager
  • Share key insights with your team
  • Send relevant resources to the prospect

Reality? You update one line in the CRM, fire off a generic "great chatting" email, and hope you remember the details later.

This is exactly the problem AI coding agents were built to solve.

AI meeting follow-up automation workflow

The Manual Follow-Up Tax​

Let's do the math:

  • Average sales call: 30 minutes
  • Manual follow-up time: 15-20 minutes
  • Calls per day: 4-6
  • Follow-up time per day: 60-120 minutes

That's 1-2 hours daily on post-call admin. For an SDR making $60K/year, that's roughly $15,000/year in follow-up labor costs per rep.

Now multiply by your team size.

Manual follow-ups vs AI-automated comparison

What AI Meeting Follow-Ups Look Like​

Here's the workflow we've built:

  1. Call ends β†’ Recording hits Gong/Fireflies/your tool
  2. Transcript ready β†’ Webhook triggers automation
  3. AI processes β†’ Extracts insights, action items, next steps
  4. Outputs generated:
    • Personalized follow-up email (draft in Gmail)
    • CRM updated with structured notes
    • Action items created in Asana/Linear
    • Slack notification with highlights
  5. Human reviews β†’ Edit and send in 2 minutes

Total time: 2 minutes of review vs 20 minutes of creation.

Building the Automation Stack​

Architecture Overview​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Call Recording │────▢│ AI Processing │────▢│ Outputs β”‚
β”‚ (Gong, etc.) β”‚ β”‚ (Claude/Codex) β”‚ β”‚ (Email, CRM) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β–Ό β–Ό β–Ό
Transcript Extract: Create:
+ Metadata - Key moments - Email draft
- Action items - CRM notes
- Objections - Tasks
- Next steps - Slack alert

Option 1: OpenClaw Cron Job​

If you're already using OpenClaw, add a cron job that checks for new call transcripts:

# In your OpenClaw config
cron:
- name: "Process new call transcripts"
schedule: "*/15 * * * *" # Every 15 minutes
prompt: |
Check for new call transcripts from the last 15 minutes.
For each new transcript:
1. Generate a follow-up email draft
2. Extract action items
3. Update CRM with structured notes
4. Send Slack summary to #sales

Option 2: Codex Script​

Use OpenAI Codex to build a dedicated processing script:

// process-call.js
const { OpenAI } = require('openai');
const openai = new OpenAI();

async function processCallTranscript(transcript, dealContext) {
const response = await openai.chat.completions.create({
model: "gpt-4-turbo",
messages: [
{
role: "system",
content: `You are a sales operations assistant. Process call transcripts
and generate: follow-up emails, CRM notes, and action items.
Be specific and reference actual discussion points.`
},
{
role: "user",
content: `
## Call Transcript
${transcript}

## Deal Context
${dealContext}

## Generate
1. Follow-up email (personalized, reference specific moments)
2. CRM notes (structured: Summary, Key Moments, Objections, Next Steps)
3. Action items (owner, due date, description)
`
}
]
});

return parseResponse(response.choices[0].message.content);
}

Option 3: Claude with Function Calling​

Claude excels at understanding nuance in sales conversations:

import anthropic

client = anthropic.Anthropic()

def process_sales_call(transcript: str, prospect_info: dict) -> dict:
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=4096,
tools=[
{
"name": "create_follow_up",
"description": "Generate a follow-up email",
"input_schema": {
"type": "object",
"properties": {
"subject": {"type": "string"},
"body": {"type": "string"},
"resources": {
"type": "array",
"items": {"type": "string"}
}
}
}
},
{
"name": "update_crm",
"description": "Update CRM with call notes",
"input_schema": {
"type": "object",
"properties": {
"summary": {"type": "string"},
"next_steps": {"type": "array"},
"objections": {"type": "array"},
"champion_signals": {"type": "array"}
}
}
}
],
messages=[
{
"role": "user",
"content": f"""
Process this sales call and generate follow-up actions.

Prospect: {prospect_info}

Transcript:
{transcript}

Use the provided tools to:
1. Create a personalized follow-up email
2. Update the CRM with structured notes
"""
}
]
)

return extract_tool_calls(response)

The Follow-Up Email That Wins​

Generic follow-ups:

Hi Sarah,

Great chatting today! I'll send over those resources we discussed.
Let me know if you have any questions.

Best,
Mike

AI-personalized follow-ups:

Hi Sarah,

Thanks for walking me through how your SDR team handles the
lead scoring issue you mentionedβ€”sounds like the current 2-day
SLA is creating real friction with your demand gen team.

You asked about how we handle intent signals from anonymous
visitors. I'm attaching our visitor identification case study
(the Hologram example you asked about is on page 3).

For the budget conversation with David next week, here's a
one-pager comparing our pricing to the $35K/year tool you
mentioned. Happy to jump on a call beforehand to prep you.

Two questions from our discussion I want to circle back on:
1. The Salesforce integration timelineβ€”are you targeting Q2?
2. Which 3 SDRs would pilot the tool first?

Does Thursday 2pm work for the technical deep-dive with your ops team?

Best,
Mike

The difference: specificity. The AI references actual discussion points, answers real questions, and moves the deal forward.

CRM Notes That Actually Help​

Bad CRM notes (what most reps write):

Good call. Interested in product. Will follow up next week.

AI-generated structured notes:

## Call Summary
30-min discovery call with Sarah (VP Sales) and Mike (SDR Manager).
Currently evaluating MarketBetter vs Warmly. Budget approved,
timeline is Q2 implementation.

## Key Moments
- [8:32] Sarah mentioned 2-day lead SLA causing "constant friction"
- [14:15] Mike asked specifically about Salesforce integration
- [22:40] Budget holder is David Chen (CFO), Sarah has soft approval
- [26:00] Competitor Warmly quoted $35K/year

## Objections Raised
1. Concerned about SDR adoption (Mike)
2. Integration with existing tech stack (Sarah)
3. Data accuracy compared to current provider

## Next Steps
- Send visitor ID case study (Hologram example)
- Schedule technical deep-dive with ops team
- Prep Sarah for budget conversation with David

## Champion Signals
- Sarah used "we need" language 4 times
- Unprompted mention of timeline pressure
- Asked about implementation support

This is what your AI should output. No more lost context between calls.

Action Item Extraction​

AI should automatically create tasks:

{
"action_items": [
{
"task": "Send Hologram visitor ID case study",
"owner": "Mike (rep)",
"due": "2026-02-09",
"priority": "high",
"context": "Sarah specifically asked for this at 14:15"
},
{
"task": "Schedule technical deep-dive",
"owner": "Mike (rep)",
"due": "2026-02-10",
"priority": "high",
"context": "Needs ops team involvement"
},
{
"task": "Create CFO one-pager for Sarah",
"owner": "Mike (rep)",
"due": "2026-02-12",
"priority": "medium",
"context": "Budget conversation with David next week"
}
]
}

These should auto-create in your task manager (Asana, Linear, Notion).

Implementation Checklist​

Prerequisites​

  • Call recording tool with API (Gong, Fireflies, Chorus)
  • CRM with API access (HubSpot, Salesforce)
  • Email tool with draft creation API (Gmail, Outlook)
  • AI API access (Claude, GPT-4, Codex)

Phase 1: Basic Automation​

  • Set up webhook for new transcripts
  • Build AI processing pipeline
  • Generate email drafts
  • Send to Slack for review

Phase 2: CRM Integration​

  • Extract structured data from AI output
  • Map to CRM fields
  • Auto-update deal records
  • Add activity logging

Phase 3: Task Management​

  • Parse action items
  • Create tasks in project tool
  • Assign owners and due dates
  • Link back to deal/contact

Phase 4: Optimization​

  • Add feedback loop (rep edits β†’ training)
  • A/B test email templates
  • Track follow-up effectiveness
  • Refine extraction prompts

The ROI Calculation​

Before automation:

  • 20 min follow-up Γ— 5 calls/day Γ— 250 days = 417 hours/year
  • At $50/hour loaded cost = $20,850/year per rep

After automation:

  • 2 min review Γ— 5 calls/day Γ— 250 days = 42 hours/year
  • AI costs: ~$300/year (at $0.01/transcript)
  • Total: $2,400/year per rep

Savings: $18,450/year per rep

For a 10-person SDR team: $184,500/year back to selling.

Start Today​

You don't need a perfect system. Start with:

  1. Export one transcript from your call recording tool
  2. Paste into Claude with the prompt:
    Generate a personalized follow-up email and structured CRM notes
    from this sales call transcript: [transcript]
  3. Review the output β€” is it better than what you'd write in 2 minutes?
  4. Automate once you see the quality

The time you save on follow-ups goes straight to more conversations.


Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.

Let AI Handle the Admin So You Can Sell​

MarketBetter's AI-powered playbook doesn't just track your dealsβ€”it tells your SDRs exactly what to do next. No more manual prioritization. No more missed follow-ups.

Book a Demo β†’


Related reading:

Building an AI Proposal Generator That Closes Deals [2026]

Β· 8 min read
MarketBetter Team
Content Team, marketbetter.ai

A prospect asks for a proposal.

You say "I'll have it to you by end of day."

Then you spend 3 hours:

  • Finding the last proposal you sent
  • Swapping out company names (and missing one on slide 12)
  • Rewriting the "why us" section for the tenth time
  • Hunting for the right case study
  • Manually calculating pricing
  • Wondering if any of this is even what they asked for

Meanwhile, your competitor sends a personalized proposal in 45 minutes. They reference the specific challenges from the discovery call. They include a case study from the same industry. Their pricing is crystal clear.

Guess who looks more professional?

AI proposal generation isn't about replacing humans. It's about spending your time on strategy instead of formatting.

AI proposal generator workflow

What AI Proposal Generation Actually Looks Like​

Input:

  • CRM deal data
  • Discovery call notes
  • Prospect company info
  • Your pricing structure
  • Template library

Processing:

  • AI extracts key requirements
  • Matches pain points to features
  • Selects relevant case studies
  • Calculates custom pricing
  • Writes personalized sections

Output:

  • Draft proposal document
  • Personalized executive summary
  • Relevant case studies inserted
  • Pricing table pre-filled
  • Human reviews in 15-30 minutes

Time saved: 2-3 hours per proposal

The Architecture​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Trigger: β”‚
β”‚ "Create β”‚
β”‚ Proposal" β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Pull Data │────▢│ AI Process β”‚
β”‚ - CRM deal β”‚ β”‚ - Generate β”‚
β”‚ - Notes β”‚ β”‚ sections β”‚
β”‚ - Company β”‚ β”‚ - Select β”‚
β”‚ research β”‚ β”‚ case study β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ - Calculate β”‚
β”‚ pricing β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Output: β”‚
β”‚ - Google Doc β”‚
β”‚ - PDF β”‚
β”‚ - Notion page β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CRM data flowing into AI proposal output

Building the Proposal Generator​

Step 1: Define Your Proposal Structure​

Start by mapping your standard proposal sections:

const proposalStructure = {
sections: [
{
name: 'executive_summary',
type: 'ai_generated',
prompt: 'Write a 2-paragraph executive summary addressing {pain_points}',
maxLength: 300
},
{
name: 'understanding_your_needs',
type: 'ai_generated',
prompt: 'Summarize our understanding of {company}\'s challenges based on {discovery_notes}',
maxLength: 500
},
{
name: 'proposed_solution',
type: 'template_with_variables',
template: 'solution_template.md',
variables: ['selected_products', 'implementation_timeline']
},
{
name: 'case_study',
type: 'selected',
selector: 'matchCaseStudy(\{industry\}, {company_size}, {pain_points})'
},
{
name: 'pricing',
type: 'calculated',
calculator: 'calculatePricing({seats}, {products}, {term})'
},
{
name: 'next_steps',
type: 'template',
template: 'next_steps.md'
}
]
};

Step 2: Build the Data Pipeline​

async function gatherProposalData(dealId) {
// Pull from CRM
const deal = await hubspot.deals.get(dealId);
const company = await hubspot.companies.get(deal.companyId);
const contacts = await hubspot.contacts.getByDeal(dealId);

// Pull discovery notes
const notes = await hubspot.notes.getByDeal(dealId);
const discoveryNotes = notes.filter(n =>
n.type === 'discovery' || n.type === 'call_notes'
);

// Enrich with research
const companyResearch = await researchCompany(company.domain);

// Extract pain points using AI
const painPoints = await extractPainPoints(discoveryNotes);

return {
deal,
company,
contacts,
discoveryNotes,
companyResearch,
painPoints
};
}

Step 3: Generate Each Section​

async function generateSection(section, data) {
switch (section.type) {
case 'ai_generated':
return generateWithAI(section, data);

case 'template_with_variables':
return populateTemplate(section, data);

case 'selected':
return selectContent(section, data);

case 'calculated':
return calculateSection(section, data);

case 'template':
return loadTemplate(section.template);
}
}

async function generateWithAI(section, data) {
const prompt = interpolate(section.prompt, data);

const response = await anthropic.messages.create({
model: 'claude-3-5-sonnet-20241022',
max_tokens: section.maxLength * 2,
messages: [
{
role: 'system',
content: `You are writing a section of a B2B sales proposal.
Be professional but not stiff.
Focus on the prospect's specific needs.
No generic filler. Every sentence should matter.`
},
{
role: 'user',
content: prompt
}
]
});

return response.content[0].text;
}

Step 4: Smart Case Study Selection​

async function selectCaseStudy(data) {
const caseStudies = await loadCaseStudies();

const selectionPrompt = `
Select the best case study for this prospect:

Prospect:
- Industry: ${data.company.industry}
- Size: ${data.company.employees} employees
- Pain points: ${data.painPoints.join(', ')}

Available case studies:
${caseStudies.map((cs, i) => `
${i + 1}. ${cs.title}
Industry: ${cs.industry}
Size: ${cs.companySize}
Key results: ${cs.results}
Pain points addressed: ${cs.painPoints}
`).join('\n')}

Output: The number of the best case study and why in one sentence.
`;

const response = await claude(selectionPrompt);
const selectedIndex = extractNumber(response);

return caseStudies[selectedIndex - 1];
}

Step 5: Pricing Calculator​

function calculatePricing(data) {
const { seats, products, term, discountCode } = data.deal;

let pricing = {
items: [],
subtotal: 0,
discount: 0,
total: 0
};

// Base pricing
for (const product of products) {
const productPricing = pricingMatrix[product];
const lineItem = {
name: productPricing.name,
quantity: seats,
unitPrice: productPricing.perSeat,
total: seats * productPricing.perSeat
};

if (term === 'annual') {
lineItem.total = lineItem.total * 12;
lineItem.termDiscount = lineItem.total * 0.15; // 15% annual discount
lineItem.total -= lineItem.termDiscount;
}

pricing.items.push(lineItem);
pricing.subtotal += lineItem.total;
}

// Apply discount code if present
if (discountCode) {
pricing.discount = calculateDiscount(discountCode, pricing.subtotal);
}

pricing.total = pricing.subtotal - pricing.discount;

return pricing;
}

Step 6: Assemble the Document​

async function assembleProposal(data) {
const sections = await Promise.all(
proposalStructure.sections.map(section =>
generateSection(section, data)
)
);

// Create Google Doc
const doc = await googleDocs.create({
title: `Proposal - ${data.company.name} - ${formatDate(new Date())}`
});

// Apply template formatting
await applyProposalTemplate(doc.id);

// Insert sections
for (const section of sections) {
await insertSection(doc.id, section);
}

// Add company logo to header
await insertLogo(doc.id, data.company.logo);

return doc;
}

The Prompt That Powers Great Proposals​

Here's the core prompt for the executive summary:

You are writing the executive summary for a B2B sales proposal.

## Context
Company: \{company_name\}
Industry: \{industry\}
Decision maker: {contact_name}, {contact_title}

## Their Challenges (from discovery)
{discovery_notes}

## Our Solution
{products_recommended}

## Key Results We've Delivered
{relevant_metrics_from_case_studies}

## Write the Executive Summary
- 2 paragraphs maximum
- First paragraph: Acknowledge their specific challenges (use their words)
- Second paragraph: How we solve it and expected impact
- Be confident but not arrogant
- Reference specific numbers where possible
- End with a forward-looking statement

Do not:
- Use generic phrases like "industry-leading" or "best-in-class"
- Make claims you can't support
- Write more than 150 words total

Real Output Example​

Input:

  • Company: Acme HR (200 employees, HR tech)
  • Pain points: "SDR team spending too much time on research", "leads going cold because follow-up is too slow", "no visibility into what's working"
  • Products: SDR Playbook, Visitor ID
  • Contact: Sarah Chen, VP Sales

AI-Generated Executive Summary:

Acme HR's sales team is losing deals to slow follow-up. Your SDRs spend hours researching leads that should take minutes, and by the time they reach out, competitors have already made contact. Meanwhile, you have no clear visibility into which activities actually drive pipeline.

MarketBetter solves this with a daily SDR playbook that eliminates research time and tells your reps exactly who to contact, how to reach them, and what to say. Combined with our visitor identification, you'll know the moment a target account hits your website. Companies like CloudHR have cut their lead response time from 48 hours to under 1 hourβ€”and increased qualified meetings by 40%. We're proposing a 90-day pilot with your 8-person SDR team to deliver similar results.

Time to generate: 12 seconds

Implementation Options​

Option 1: OpenClaw Agent​

# openclaw.yaml
agents:
proposal-generator:
model: claude-3-5-sonnet-20241022
systemPrompt: |
You generate B2B sales proposals.
You have access to CRM data, case studies, and pricing.
Generate professional, personalized proposals.
tools:
- hubspot_read
- google_docs_create
- case_study_search

Option 2: n8n/Make Workflow​

Build a visual workflow:

  1. Trigger: New deal reaches "Proposal Requested" stage
  2. Fetch: Pull CRM data
  3. AI: Generate sections with Claude API
  4. Create: New Google Doc from template
  5. Notify: Slack message to rep with link

Option 3: Custom Script​

# Run proposal generation
node generate-proposal.js --deal-id 12345 --output gdoc

# Output:
# βœ… Data gathered from HubSpot
# βœ… Executive summary generated
# βœ… Case study selected: CloudHR
# βœ… Pricing calculated: $24,000/year
# βœ… Google Doc created: [link]
# βœ… Sent to #sales-proposals

Quality Control Checklist​

Before sending any AI-generated proposal:

  • Company name correct everywhere (search for placeholder text)
  • Pain points match discovery notes
  • Case study is relevant (same industry or problem)
  • Pricing math is correct
  • No hallucinated features or claims
  • Contact names spelled correctly
  • Timeline is realistic
  • Legal/compliance review if required

The AI does 80% of the work. The human does 20% of review that ensures quality.

ROI Calculation​

Before AI proposals:

  • Time per proposal: 3-4 hours
  • Proposals per week: 5
  • Weekly hours: 15-20
  • Monthly cost (at $75/hour): $4,500-6,000

After AI proposals:

  • Time per proposal: 30-45 minutes (review + customize)
  • Proposals per week: 5
  • Weekly hours: 2.5-4
  • Monthly cost: $750-1,200
  • AI costs: ~$50/month

Monthly savings: $3,200-4,750

Plus: faster turnaround means deals don't stall waiting for proposals.

Start Building Today​

  1. Document your proposal structure β€” What sections do you always include?
  2. Gather your inputs β€” What data goes into each section?
  3. Test with Claude β€” Paste a discovery transcript and ask for an executive summary
  4. Iterate β€” Refine prompts until output quality is consistently good
  5. Automate β€” Connect to your CRM and document tools

The best proposal is the one that arrives fast and speaks directly to what the prospect cares about. AI makes that possible at scale.


Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.

Want Proposals That Write Themselves?​

MarketBetter helps sales teams move faster at every stage. From finding leads to closing deals, our AI-powered platform handles the research so you can focus on selling.

Book a Demo β†’


Related reading:

The AI SDR Tech Stack: Tools We Actually Use at MarketBetter [2026]

Β· 8 min read
Sunder Iyer
Founder, marketbetter.ai

AI SDR Tech Stack Diagram

Everyone talks about "AI for sales." Few share what they actually use.

At MarketBetter, we don't just build AI-powered SDR tools β€” we use them. Every day. Our entire GTM motion runs on an AI-first stack that handles everything from lead research to email personalization to competitor intelligence.

This isn't a theoretical "you could do this" post. This is our actual stack, with real tools, real workflows, and honest assessments of what works and what doesn't.

Why Build an AI-First GTM Stack?​

The math is simple:

Traditional SDR workflow:

  • 40% of time on research
  • 30% on manual data entry
  • 20% on email/call prep
  • 10% actually selling

AI-augmented SDR workflow:

  • 10% reviewing AI research
  • 10% approving personalized content
  • 10% on strategy and exceptions
  • 70% actually selling

The shift isn't about replacing humans. It's about removing the grunt work so SDRs can do what they're good at: building relationships and closing deals.

Our Core Stack: The Foundation​

1. OpenClaw (AI Agent Orchestration)​

What it does: Runs our AI agents as persistent assistants with memory, tools, and the ability to work autonomously.

How we use it: We have multiple specialized agents that handle different parts of our GTM motion:

  • Content research and creation
  • Competitor intelligence gathering
  • Lead enrichment and scoring
  • Email personalization

Why it matters: Without an orchestration layer, AI is just a chat interface. OpenClaw turns it into an actual worker that can remember context, access tools, and complete multi-step tasks without constant babysitting.

The honest take: Setup isn't trivial. You need technical chops to configure agents properly. But once it's running, the leverage is enormous. One well-configured agent can do the work of multiple human hours daily.

2. Claude (AI Reasoning Engine)​

What it does: The brain behind our agents. Handles complex reasoning, writing, and decision-making.

How we use it:

  • Writing personalized outreach
  • Analyzing competitor positioning
  • Summarizing call transcripts
  • Generating content briefs

Why Claude over GPT-4? For sales tasks specifically:

  • Better at following complex instructions
  • More natural writing style (less "AI-sounding")
  • Stronger at maintaining context across long conversations
  • More reliable at structured output

The honest take: Claude is more expensive than GPT-4-turbo for high-volume tasks. We use Claude for quality-critical work (outreach, content) and sometimes GPT-4 for bulk processing where good-enough is fine.

3. HubSpot (CRM + Automation)​

What it does: Our central system of record for all customer and prospect data.

How we integrate AI:

  • AI agents read deal context before generating outreach
  • Automatic enrichment of new contacts with AI-gathered intel
  • Activity logging from AI workflows
  • Lead scoring enhanced with AI signals

Why not just use HubSpot's AI? HubSpot's native AI is improving, but it's generic. Our stack lets us:

  • Use custom prompts optimized for our ICP
  • Integrate signals HubSpot doesn't have
  • Control exactly how AI interacts with our data

The honest take: HubSpot's API is solid but rate-limited. We cache aggressively and batch operations to avoid hitting limits during high-activity periods.

The Research Layer: Where AI Shines Brightest​

4. Brave Search API (Real-Time Intelligence)​

What it does: Programmatic web search without the Google tax.

How we use it:

  • Real-time company news before outreach
  • Competitor monitoring (pricing changes, product launches, hiring)
  • Industry trend research for content
  • Finding contact info and social profiles

Why Brave over Google?

  • Better pricing for API access
  • Less aggressive rate limiting
  • Cleaner results without SEO spam

Pro tip: Combine search with web scraping. Search finds the pages; scraping extracts the data. AI then synthesizes it into usable intelligence.

5. LinkedIn Sales Navigator​

What it does: B2B prospecting and intent signals.

How we integrate AI:

  • AI reviews prospect activity before outreach
  • Automated analysis of shared connections
  • Content engagement tracking

The honest take: LinkedIn's API access is restrictive. We mostly use it manually but have AI help process and analyze the data we extract.

The Content Engine: AI-Generated At Scale​

6. Replicate (Image Generation)​

What it does: Creates custom images for blog posts and social content.

How we use it:

  • Workflow diagrams for tutorials
  • Quote cards for social sharing
  • Featured images for blog posts
  • Comparison graphics

Why Replicate?

  • Pay-per-image pricing (no subscriptions)
  • Fast generation via Flux
  • API-friendly for automation

The honest take: AI-generated images still need human review. About 70% are usable on first try; the rest need re-generation or light editing.

7. Our Blog Pipeline​

The workflow:

  1. AI agent receives content brief (topic, keywords, angle)
  2. Agent researches using web search
  3. Agent writes first draft in Docusaurus MDX format
  4. Agent generates 2-3 images
  5. Agent creates GitHub PR
  6. Human reviews and merges
  7. Auto-deploy to production

Volume: We're pushing 5+ blog posts daily during content sprints.

Quality control: AI writes, humans approve. Every piece gets a human eye before publishing. But the human review takes 5 minutes instead of the 2+ hours writing would take.

The Communication Layer: Personalization at Scale​

8. Email (Microsoft 365 + AI Drafts)​

The workflow:

  • AI researches prospect
  • AI generates personalized draft
  • Human reviews in drafts folder
  • Human sends (or edits then sends)

Why not fully automated sends? Trust. We want human judgment on anything that goes out under our name. AI proposes; humans dispose.

Personalization elements AI handles:

  • Recent company news references
  • Industry-specific pain points
  • Role-specific messaging
  • Timing recommendations

9. Slack (Internal Communication)​

How AI plugs in:

  • Automated alerts for important signals
  • Daily briefings from agents
  • Quick queries to AI from any channel

The honest take: The key is making AI accessible where work happens. Forcing people to switch contexts kills adoption.

The Intelligence Layer: Knowing Your Market​

10. Supabase (Data Lake)​

What it does: Stores and organizes all the intelligence our AI gathers.

What we track:

  • Competitor intel (pricing, features, positioning)
  • Customer insights (pain points, wins, objections)
  • Content performance (what's working)
  • Agent activity (what's been done)

Why Supabase?

  • PostgreSQL flexibility
  • Real-time subscriptions
  • Simple API
  • Generous free tier

The power move: When agents research a competitor, the insights go into Supabase. Next time anyone asks about that competitor, the answer is instant β€” no re-research needed.

What's NOT in Our Stack (And Why)​

We Don't Use: Automated LinkedIn Outreach Tools​

Why not: LinkedIn actively bans accounts that automate. The risk isn't worth it. We use LinkedIn for research and manual engagement only.

We Don't Use: AI Voice Callers (For Cold Outreach)​

Why not: The tech isn't there yet for cold calls. AI voice works for appointment reminders and simple transactions, but complex sales conversations still need humans.

We Don't Use: "All-in-One" AI Sales Platforms​

Why not: They're jacks of all trades, masters of none. Purpose-built tools connected by AI orchestration outperform monolithic platforms.

Results: What This Stack Delivers​

Since implementing this AI-first approach:

Research time: Down 80% (from 2 hours to 25 minutes per prospect deep-dive)

Email personalization: Every email is personalized. Previously, only high-value targets got custom messages.

Content output: 10x increase in blog production without adding headcount.

Competitor intelligence: Real-time vs. quarterly reports.

Lead response time: Under 5 minutes for inbound vs. industry average of 47 hours.

Building Your Own AI SDR Stack: Where to Start​

If You're Technical​

  1. Start with OpenClaw + Claude
  2. Connect to your CRM via API
  3. Build research workflows first (highest immediate ROI)
  4. Add content generation next
  5. Layer in communication drafting

If You're Not Technical​

  1. Start with ChatGPT/Claude directly for individual tasks
  2. Use Zapier to connect tools
  3. Focus on one workflow at a time
  4. Consider platforms like MarketBetter that package AI-powered SDR workflows without requiring technical setup

The Honest Assessment​

What AI does well:

  • Research and synthesis
  • First-draft writing
  • Pattern recognition across large datasets
  • 24/7 availability for routine tasks

What AI still struggles with:

  • Nuanced relationship building
  • Complex negotiation
  • Reading emotional cues
  • Knowing when rules should be broken

The winning formula: AI for scale and speed. Humans for judgment and relationships.

What's Next for Our Stack​

We're actively working on:

  1. Better lead scoring β€” Using AI to analyze intent signals across multiple sources
  2. Automated call prep β€” Briefing documents generated before every sales call
  3. Real-time competitive intel β€” Alerts when competitors make moves
  4. Predictive outreach timing β€” AI learning when prospects are most receptive
Free Tool

Try our Tech Stack Detector β€” instantly detect any company's tech stack from their website. No signup required.

Try It Yourself​

Building an AI-first GTM stack isn't about buying one magic tool. It's about connecting specialized tools with AI orchestration.

Start small. Pick your biggest time sink. Automate that one thing. See results. Expand.


Want to see AI-powered SDR workflows in action? Book a demo of MarketBetter to see how we turn intent signals into actionable playbooks for your SDRs β€” no AI expertise required.

Automate Lead Research with Claude Code: 6 Hours of SDR Work in 4 Minutes [Tutorial]

Β· 6 min read
MarketBetter Team
Content Team, marketbetter.ai

The average SDR spends 6 hours per week researching prospects. That's 6 hours of:

  • Googling company names
  • Scanning LinkedIn profiles
  • Reading news articles
  • Looking for pain points to reference

What if you could do all that in 30 seconds?

Claude Codeβ€”Anthropic's AI with tool use and code executionβ€”can turn a prospect name into a complete research brief automatically. Here's exactly how to set it up. Lead research is stage one of the bigger workflow in our guide to using Claude for lead generation.

Claude Code researching prospects from multiple data sources

What Good Lead Research Actually Looks Like​

Before we automate, let's define what we're building. A great prospect brief includes:

  1. Company Overview: What they do, company size, industry
  2. Recent News: Funding, product launches, leadership changes
  3. Tech Stack: What tools they already use (if visible)
  4. Pain Point Signals: Job postings, complaints, market trends
  5. Personalization Hooks: Specific details for your outreach

This used to take 10-15 minutes per prospect. Now it takes seconds.

The Claude Code Approach​

Claude Code can:

  • Execute searches and aggregate results
  • Read web pages and extract key information
  • Structure unstructured data into useful formats
  • Reason about what matters for your use case

Here's a prompt template that generates complete prospect briefs:

Research this company for a B2B sales outreach:

**Company:** {\{company_name\}}
**Our Product:** AI-powered SDR platform that turns intent signals into pipeline

**Create a prospect brief with:**

1. **Company Overview**
- What they do (one sentence)
- Employee count and headquarters
- Industry and target market

2. **Recent Activity (Last 6 Months)**
- Funding or acquisitions
- Product launches
- Leadership changes
- Press coverage

3. **Sales-Relevant Signals**
- Are they hiring for SDRs, sales ops, or demand gen?
- Any complaints about lead quality or outbound efficiency?
- What CRM/sales stack do they use? (check job postings)

4. **Personalization Hooks**
- 3 specific details I can reference in an email
- Potential pain points based on their situation
- Suggested angle for outreach

5. **Recommended Next Step**
- Best channel to reach them (email, LinkedIn, phone)
- Suggested first message angle

Be specific. Use actual data, not generic statements.

Setting Up Automated Research​

Option 1: OpenClaw + Claude (Always-On)​

If you want research to run automatically when new leads come in:

# OpenClaw config
cron:
jobs:
- name: "New Lead Research"
schedule:
kind: every
everyMs: 900000 # Every 15 minutes
payload:
kind: agentTurn
message: |
Check HubSpot for contacts added in the last 15 minutes.
For each new contact, create a prospect brief and add it
to the contact notes field.

This runs in the background, enriching leads as they arrive.

Option 2: Claude Code CLI (On-Demand)​

For manual research when you need it:

# Install Claude Code
npm install -g @anthropic-ai/claude-code

# Run research
claude-code research "Acme Corp"

Option 3: VS Code Extension​

If you work in VS Code, Claude Code integrates directly:

  1. Highlight a company name
  2. Cmd+Shift+P β†’ "Claude: Research Prospect"
  3. Get a brief in your sidebar

Lead research funnel: Raw data to enriched profile

Real Research Output Example​

Here's what Claude Code actually produces for a real company:


Company: Hologram (hologram.io)

Overview: IoT connectivity platform providing global cellular for devices. ~150 employees, HQ in Chicago. Series B ($65M from Battery Ventures).

Recent Activity:

  • Feb 2026: Launched Hyper network for low-latency IoT
  • Jan 2026: Partnership with AWS IoT Core announced
  • Hiring: 3 open SDR roles, 2 demand gen positions

Sales Signals:

  • Job posting mentions "scaling outbound motion" and "improving lead quality"
  • Uses HubSpot (seen in job req), Outreach for sequences
  • Active on G2 responding to reviews (cares about buyer perception)

Personalization Hooks:

  1. Reference the Hyper launch: "Saw the Hyper network announcementβ€”congrats"
  2. Note the hiring push: "Looks like you're scaling the SDR team"
  3. Connect to IoT/connectivity angle: "We work with several IoT companies..."

Recommended Approach: LinkedIn β†’ Email sequence. Their team is active on LinkedIn. Reference specific content they've posted.


This took 15 seconds to generate. A human would need 10-15 minutes minimum.

Enrichment Sources Claude Code Can Access​

When you give Claude Code research tasks, it can pull from:

SourceWhat It Finds
Company websiteProducts, pricing, team page
LinkedInEmployee count, org structure, recent posts
Job boardsHiring signals, tech stack clues
News sitesFunding, partnerships, launches
G2/CapterraReviews, complaints, competitor comparisons
CrunchbaseFunding history, investors, competitors

The key is structuring your prompt to tell Claude what matters for your specific outreach.

Advanced: Building a Research Pipeline​

For high-volume prospecting, build a full pipeline:

[New Lead] 
↓
[Basic Enrichment]
- Company size, industry
- Contact title, seniority
↓
[ICP Scoring]
- Match against ideal customer profile
- Score 1-100
↓
[Deep Research] (if score > 70)
- Full prospect brief
- Personalization hooks
↓
[Routing]
- Hot leads β†’ Slack alert + call queue
- Warm leads β†’ Automated sequence
- Cold leads β†’ Nurture list

Each step can be automated with Claude Code + OpenClaw.

Common Mistakes to Avoid​

1. Researching Every Lead Equally

Not every lead deserves 10 minutes of research. Use basic enrichment to score first, then deep-dive on high-potential prospects only.

2. Ignoring Negative Signals

Good research includes disqualifying information. If a company just laid off their sales team, that's important context.

3. Stale Data

Information decays. Set up refresh cycles for long-nurture prospects.

4. Over-Personalizing

Mentioning 5 specific details in an email feels creepy. Pick the ONE most relevant hook.

Measuring Research Quality​

Track these metrics:

  • Time per lead: Should drop from 10-15 min to under 1 min
  • Reply rates: Better research β†’ better personalization β†’ higher replies
  • Qualification accuracy: Are AI-scored leads actually converting?
  • Rep adoption: Is your team actually using the briefs?

The MarketBetter Advantage​

MarketBetter does this automatically for every website visitor:

  1. Identify: Know which companies visit your site
  2. Enrich: Pull firmographic and technographic data
  3. Research: AI generates prospect briefs
  4. Prioritize: Score and route to the right rep
  5. Act: Get a daily playbook of exactly who to contact

No manual research required. No copy-pasting between tools.


Ready to automate your lead research? See how MarketBetter turns visitor identification into actionable prospect intelligence. Book a demo.

How to Build a Custom Sales Copilot with OpenClaw [2026 Tutorial]

Β· 7 min read
MarketBetter Team
Content Team, marketbetter.ai

"Who should I call next?"
"What's the context on this deal?"
"Draft me a follow-up email."

What if you could ask these questions and get instant, accurate answersβ€”based on YOUR CRM, YOUR email history, YOUR calendar?

That's what a sales copilot does. And with OpenClaw, you can build one for free.

Sales copilot workflow: User query to AI-powered recommendation

What is a Sales Copilot?​

A sales copilot is an AI assistant that knows your business context:

  • Your deals: Pipeline stages, deal values, next steps
  • Your contacts: Communication history, preferences, pain points
  • Your calendar: Upcoming meetings, prep needed
  • Your emails: Recent exchanges, follow-ups due

Unlike generic ChatGPT, a copilot doesn't need you to paste context every time. It already knows.

Why Build Your Own (vs. Buying)?​

Off-the-shelf AI SDR tools cost $35,000-50,000/year. They come with:

  • Features you don't need
  • Limitations on customization
  • Data that lives on someone else's servers

OpenClaw is free and open source. You:

  • Build exactly what you need
  • Own your data completely
  • Customize endlessly

Architecture Overview​

Here's what we're building:

[You via WhatsApp/Slack/Telegram]
↓
[OpenClaw]
↓
[Claude/GPT-4 API]
↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Data Sources β”‚
β”‚ β€’ HubSpot CRM β”‚
β”‚ β€’ Gmail/Outlook β”‚
β”‚ β€’ Google Calendar β”‚
β”‚ β€’ Company Docs β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
↓
[Context-Aware Response]

OpenClaw acts as the bridge, connecting the AI to your tools.

Data sources feeding into the sales copilot AI

Step 1: Install OpenClaw​

npx openclaw@latest init

This creates your workspace with:

  • Configuration files
  • Memory system
  • Agent definitions

Step 2: Connect Your Data Sources​

HubSpot CRM​

Create a Private App in HubSpot and add to your config:

# .openclaw/config.yaml
plugins:
hubspot:
enabled: true
token: ${HUBSPOT_TOKEN}

Email (Microsoft 365)​

Set up Graph API access:

plugins:
ms365:
enabled: true
clientId: ${MS365_CLIENT_ID}
tenantId: ${MS365_TENANT_ID}
clientSecret: ${MS365_CLIENT_SECRET}

Google Calendar​

plugins:
gcal:
enabled: true
credentials: ${GCAL_CREDENTIALS_PATH}

Step 3: Define Your Copilot's Personality​

Create a SOUL.md file that defines how your copilot behaves:

# SOUL.md - Sales Copilot

## Who I Am
I'm your sales copilot. I know your pipeline, your contacts,
and your calendar. I help you sell smarter.

## How I Communicate
- Direct and actionable
- I give specific recommendations, not generic advice
- I cite my sources (which deal, which email, etc.)
- I flag urgency when it matters

## What I Can Do
- Pull deal info from HubSpot
- Summarize email threads
- Check upcoming meetings
- Draft follow-up messages
- Alert you to stale deals

## What I Won't Do
- Send emails without your approval
- Make changes to CRM without confirmation
- Share your data anywhere

Step 4: Create Core Commands​

Define common queries your copilot can handle:

"Who should I call today?"​

# In your agent config
prompts:
call_priority:
message: |
Check my HubSpot pipeline and identify:
1. Deals that haven't had activity in 7+ days
2. Deals with meetings scheduled this week
3. High-value deals (>$10K) in negotiation stage

Rank by urgency. For each, tell me:
- Company name and deal value
- Last contact date and method
- Suggested talking point based on history

"Prep me for my next call"​

prompts:
meeting_prep:
message: |
My next meeting is in {{time_until}} with {{contact_name}}.

Pull together:
1. Company overview (from HubSpot + web research)
2. Deal history and current stage
3. All email exchanges in last 30 days
4. Key talking points based on their pain points
5. Potential objections to prepare for

Format as a quick-reference briefing I can scan in 2 minutes.

"Draft a follow-up email"​

prompts:
follow_up:
message: |
I just finished a call with {{contact_name}} at {{company}}.

Based on our email history and CRM notes, draft a follow-up email that:
1. Thanks them for the call
2. Summarizes key points we discussed
3. Proposes clear next steps
4. Maintains my usual tone (check recent sent emails)

Keep it under 150 words.

Step 5: Set Up Proactive Alerts​

Your copilot shouldn't just respondβ€”it should reach out when needed:

# Cron jobs for proactive alerts
cron:
jobs:
- name: "Morning Pipeline Brief"
schedule:
kind: cron
expr: "0 8 * * 1-5" # 8am weekdays
payload:
kind: agentTurn
message: |
Good morning! Here's your pipeline brief:

1. Meetings today (with quick context)
2. Deals needing attention (stale or slipping)
3. Follow-ups due
4. Any hot signals (new website visitors, email opens)

Keep it to 5-7 bullet points max.

- name: "Stale Deal Alert"
schedule:
kind: cron
expr: "0 14 * * 1-5" # 2pm weekdays
payload:
kind: agentTurn
message: |
Check for deals over $5K that haven't been touched in 10+ days.
If you find any, alert me with:
- Deal name and value
- Last activity
- Suggested re-engagement approach

Step 6: Connect Your Messaging Channel​

OpenClaw supports multiple channels:

WhatsApp (Personal)​

openclaw whatsapp link
# Scan QR code with your phone

Slack​

plugins:
slack:
enabled: true
token: ${SLACK_BOT_TOKEN}
channel: "#sales-copilot"

Telegram​

plugins:
telegram:
enabled: true
token: ${TELEGRAM_BOT_TOKEN}

Real Conversation Examples​

Here's what interacting with your copilot looks like:

You: Who needs follow-up today?

Copilot: 3 follow-ups due:

  1. Acme Corp ($24K) - Demo was 3 days ago, promised to send proposal. Send it now.

  2. Initech ($12K) - They went quiet after pricing. Suggest: value-focused check-in email.

  3. Hooli ($45K) - Contract review since Monday. Time for a nudge.

Want me to draft emails for any of these?


You: Yes, draft Acme proposal email

Copilot: Based on your call notes from Thursday:


Subject: Acme proposal as promised

Hi Sarah,

Great speaking Thursday about reducing your SDR ramp time. As promised, I've attached our proposal.

Key points covered:

  • Visitor identification for 5K monthly visitors
  • HubSpot integration (you mentioned this was critical)
  • 90-day pilot option

Want to find 15 minutes next week to walk through it?

Best, [Your name]


Send, edit, or scrap?

Advanced: Adding Custom Tools​

OpenClaw supports custom tools. Example: Add a "competitor check" tool:

// tools/competitor-check.js
module.exports = {
name: 'check_competitor',
description: 'Check if a prospect uses a competitor product',
parameters: {
company: { type: 'string', required: true }
},
async execute({ company }) {
// Check BuiltWith, job postings, etc.
const techStack = await fetchTechStack(company);
return techStack.filter(t => COMPETITORS.includes(t));
}
};

Now your copilot can answer: "Does Acme use any competitor products?"

Common Pitfalls​

1. Too Much Context Don't dump your entire CRM into every prompt. Be selective about what context matters for each query.

2. No Memory Structure Use OpenClaw's memory files to store persistent context (ICP, competitors, etc.) so you don't repeat yourself.

3. Forgetting Permissions Your copilot has access to sensitive data. Keep it on a secure channel. Don't expose it to shared workspaces.

4. Over-Automation Start with assisted workflows (copilot drafts, you approve). Don't go full autonomous until you trust the outputs.

What's Next?​

Once your basic copilot works, extend it:

  • Add competitive intelligence lookups
  • Connect to Gong/Chorus for call analysis
  • Build a deal coaching mode
  • Create a forecasting assistant

The foundation is the sameβ€”you're just adding more context and capabilities.


Don't want to build from scratch? MarketBetter comes with AI-powered playbooks built in. Visitor identification, lead prioritization, and recommended actionsβ€”no coding required. Book a demo.

Free Tool

Try our AI Lead Generator β€” find verified LinkedIn leads for any company instantly. No signup required.