Open Claude Cowork (claude.ai or the desktop app). Go to Settings β Integrations β MCP and install each connector. You only do this once β they persist across all conversations.
Create sales-context.txt. You'll paste this at the top of every Claude sales conversation. Fill in the template below for your product β the GoLive Labs example is pre-filled.
SALES CONTEXT β GoLive Labs ============================ Product: GoLive Labs (goliveailabs.com) What we sell: Online learning platform teaching non-technical people to build and ship real software with AI. No coding experience required. Pricing: - Free: Project 1 in every track (no credit card) - Creator ($10/mo): Unlocks all projects across all tracks Value props: 1. You ship something live in your first session β no toy examples 2. Learn by doing, not watching β every project has a real URL at the end 3. AI as your co-pilot from day one β Claude Code, Supabase, Vercel ICP: Non-technical people who want to build real software using AI: aspiring developers, career changers, entrepreneurs, marketers who want to build their own tools. Age 22β45. Motivated by building something real, frustrated by expensive courses that don't ship anything. Pain points we solve: - "I tried to learn coding but couldn't stick with it" - "I want to build my idea but don't know where to start" - "I've watched hours of tutorials but never shipped anything" Competitors: - Udemy/Coursera: we ship real things, they teach theory - Bootcamps: we're async and 10x cheaper - Solo YouTube: no structure, no projects, no support Tone: Direct, honest, encouraging. No pushy sales tactics. Speak like a senior dev who genuinely wants the prospect to succeed. ============================
sales-context.txt in a /sales folder. Update every section for your own product before using it in the next projects.Before running any sales campaigns, capture your starting numbers. Paste the prompt below into Claude with your HubSpot MCP connected.
Use the HubSpot MCP to pull my current pipeline data: 1. Total number of active contacts 2. Deals by stage β name each stage and the count + total value 3. Average deal size across all open deals 4. Win rate over the last 90 days (closed won vs closed lost) 5. My 5 most recent deal activities (what was logged and when) Format this as a pipeline baseline snapshot with today's date. I'll use it to measure progress as I implement this sales track.
pipeline-baseline.txt with today's date. You'll compare against this in Project 6 β Full Pipeline Orchestrator.A sharp ICP makes every outreach email, proposal, and call sharper. Paste the sales context doc first, then use this prompt.
Based on the sales context above, help me build a detailed ICP for sales. Starting point: [paste your brief ICP description here] Expand it into a full sales ICP covering: 1. Job titles and seniority levels most likely to buy 2. Company size and industry profile 3. Trigger events that make them ready to buy NOW (e.g. new job, recent funding, hiring spike, competitor switch) 4. Their decision-making process β who else is involved 5. Top 5 objections before signing and the honest response to each 6. The exact phrases they use when describing their problem 7. Where they spend time online (communities, newsletters, events) Format as a reference doc I'll paste into future sales prompts.
icp-sales.txt in your /sales folder alongside the other context files.sales-context.txt, pipeline-baseline.txt, and icp-sales.txt. Claude will reference these in every project. Start Project 1 β Lead Research.This script asks for your ICP criteria, uses Claude with Apollo MCP to find matching prospects, and returns a scored list with reasoning.
import anthropic
client = anthropic.Anthropic()
SALES_CONTEXT = open("sales-context.txt").read()
ICP = open("icp-sales.txt").read()
def find_prospects(industry, company_size, job_title, location=""):
prompt = f"""
{SALES_CONTEXT}
{ICP}
Using the Apollo MCP, search for prospects matching:
- Industry: {industry}
- Company size: {company_size} employees
- Job title: {job_title}
- Location: {location or 'any'}
For each prospect returned, provide:
1. Full name
2. Company name and size
3. Job title
4. LinkedIn URL (if available)
5. Fit score (1β5) with one sentence of reasoning based on our ICP
6. One specific reason they might be ready to buy now
Return up to 10 prospects formatted as a numbered list.
"""
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
if __name__ == "__main__":
industry = input("Industry: ").strip()
size = input("Company size (e.g. '10-50'): ").strip()
title = input("Job title to target: ").strip()
location = input("Location (leave blank for any): ").strip()
results = find_prospects(industry, size, title, location)
print("\n" + results)
/sales folder. Run with python prospect_finder.py. Answer the prompts β Claude will query Apollo and return a scored list.For each prospect you want to prioritise, use this prompt to pull live buying signals from LinkedIn before reaching out.
I'm researching a prospect before reaching out. Here's their info: Name: [full name] Company: [company name] Title: [job title] LinkedIn: [LinkedIn URL] Using the LinkedIn MCP: 1. Pull their last 5 posts or comments and summarise the themes 2. Check if their company has posted any recent news (hiring, product launch, funding) 3. Identify any job postings that signal growth or pain 4. Note any shared connections or mutual interests Then give me: - Buying readiness score (1β10) with reasoning based on our ICP - The single best conversation starter for cold outreach - One thing I should NOT mention (potential sensitivity or wrong angle)
This script runs 10 prospects through the enrichment prompt and outputs a CSV ready to work from.
import anthropic, csv
from datetime import date
client = anthropic.Anthropic()
CONTEXT = open("sales-context.txt").read()
prospects = [
# Add your prospects from Step 1 here:
# {"name": "Jane Smith", "company": "Acme Corp", "title": "Head of Growth", "linkedin": "..."},
]
def enrich(p):
prompt = f"""{CONTEXT}
Prospect: {p['name']}, {p['title']} at {p['company']}
LinkedIn: {p.get('linkedin', 'unknown')}
Score their fit (1β5) and buying readiness (1β10).
Return a single line: fit_score, readiness_score, top_buying_signal, best_opener
No extra text."""
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=200,
messages=[{"role": "user", "content": prompt}]
)
return r.content[0].text.strip()
filename = f"leads_{date.today()}.csv"
with open(filename, "w", newline="") as f:
w = csv.writer(f)
w.writerow(["Name","Company","Title","LinkedIn","Fit","Readiness","Signal","Opener"])
for p in prospects:
result = enrich(p)
parts = [x.strip() for x in result.split(",", 3)]
w.writerow([p["name"], p["company"], p["title"],
p.get("linkedin",""), *parts])
print(f"Saved: {filename}")
prospects list with names from Step 1, then run python build_lead_list.py. Open the CSV in Google Sheets and sort by fit score to build your outreach queue.This script takes a prospect and their buying signals, then generates a complete 3-touch email sequence saved to a file.
import anthropic
client = anthropic.Anthropic()
CONTEXT = open("sales-context.txt").read()
ICP = open("icp-sales.txt").read()
def write_sequence(name, company, title, buying_signal, linkedin_url=""):
prompt = f"""
{CONTEXT}
{ICP}
Prospect:
- Name: {name}
- Company: {company}
- Title: {title}
- Buying signal: {buying_signal}
- LinkedIn: {linkedin_url}
Write a 3-email cold outreach sequence. Rules:
- Email 1: Value-first opener that references {buying_signal} specifically.
Subject line + preview text + body (under 100 words). CTA: 15-min call.
- Email 2 (3 days later): Follow-up with a relevant result or case study angle.
Under 80 words. Different angle from Email 1.
- Email 3 (7 days later): Break-up email. Honest, no guilt.
Under 60 words. Low-commitment CTA (a resource, not a call).
No generic openers. No "I hope this email finds you well."
Write in first person as a founder/sales rep.
"""
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1500,
messages=[{"role": "user", "content": prompt}]
)
output = r.content[0].text
filename = f"outreach_{name.replace(' ','_').lower()}.txt"
with open(filename, "w") as f:
f.write(output)
print(f"Saved: {filename}")
return output
if __name__ == "__main__":
name = input("Prospect name: ").strip()
company = input("Company: ").strip()
title = input("Job title: ").strip()
signal = input("Key buying signal: ").strip()
linkedin = input("LinkedIn URL (optional): ").strip()
print(write_sequence(name, company, title, signal, linkedin))
python outreach_writer.py. Always read the output before sending β Claude drafts, you approve. Tweak anything that sounds off for your voice.LinkedIn connection notes cap at 300 characters. Paste this prompt into Claude after your MCP pulls their recent activity.
Using the LinkedIn MCP, pull the last 3 posts or comments from: [paste LinkedIn URL] Then write a connection request note under 300 characters that: - References something specific they posted or shared - Does NOT say "I'd love to connect" or "I came across your profile" - Feels like a genuine human response, not a sales opener - Ends with a soft, natural question Give me 3 options β I'll pick the one that fits best.
Once you're happy with Email 1, use Claude's Gmail MCP to draft it directly in your inbox β ready to review and send.
Using the Gmail MCP, create a draft email with: To: [prospect email] Subject: [subject line from Email 1] Body: [paste Email 1 body here] Do not send β save as a draft so I can review it first. After creating the draft, confirm the subject line and first sentence so I can verify it looks right.
Run this script 15 minutes before any discovery call to get a one-page brief with everything Claude knows about the prospect.
import anthropic
client = anthropic.Anthropic()
CONTEXT = open("sales-context.txt").read()
ICP = open("icp-sales.txt").read()
def pre_call_brief(name, company, linkedin_url=""):
prompt = f"""
{CONTEXT}
{ICP}
I have a discovery call in 15 minutes with:
Name: {name}
Company: {company}
LinkedIn: {linkedin_url}
Using HubSpot MCP: pull all notes, email history, and deal stage for this contact.
Using LinkedIn MCP: pull their last 3 posts and any recent company news.
Generate a one-page pre-call brief:
1. BACKGROUND (2β3 sentences on who they are and their company)
2. WHAT WE KNOW (previous touchpoints, how they found us, any notes)
3. LIKELY PRIORITIES (based on their role, company, and ICP β what they probably care about)
4. 5 DISCOVERY QUESTIONS (open-ended, tailored to this specific person β not generic)
5. OBJECTIONS TO PREPARE FOR (top 2 based on ICP, with your recommended response)
6. RECOMMENDED NEXT STEP (what to propose at the end of the call)
Be specific. If you don't have data, say so β don't invent it.
"""
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1500,
messages=[{"role": "user", "content": prompt}]
)
brief = r.content[0].text
filename = f"brief_{name.replace(' ','_').lower()}.txt"
with open(filename, "w") as f:
f.write(brief)
print(brief)
print(f"\nSaved: {filename}")
if __name__ == "__main__":
name = input("Prospect name: ").strip()
company = input("Company: ").strip()
linkedin = input("LinkedIn URL (optional): ").strip()
pre_call_brief(name, company, linkedin)
pre_call_brief.py and run it 10β15 minutes before each discovery call. Print or keep open on a second screen during the conversation.Generate a reusable discovery question bank tuned to your product and ICP. Run this once, then pull from it before every call.
Based on our sales context and ICP, generate a master discovery question bank. Organise 20 questions into 5 categories: 1. CURRENT STATE (understand where they are now) 2. PAIN & IMPACT (surface the real cost of the problem) 3. DECISION PROCESS (understand who decides, how, and when) 4. TIMELINE & URGENCY (is this a priority right now?) 5. BUDGET & AUTHORITY (without asking directly β read the signals) Rules: - All questions must be open-ended (no yes/no answers) - Each must feel natural in conversation, not like a survey - Mark the 5 most important across all categories with β - Add a brief note on what you're listening for after each question
question-bank.txt. Before each call, pick 4β5 questions from the bank that fit the specific prospect β don't use all 20.Immediately after your call, paste your notes and use this prompt to turn them into a follow-up email β then draft it straight to Gmail.
[Paste your call notes here β bullet points are fine] Based on these notes, write a follow-up email that: 1. Thanks them (one line β not gushing) 2. Summarises the 2β3 main pain points they mentioned in their words 3. Confirms the next steps we agreed on 4. Includes one relevant resource, example, or result based on what they care about 5. Ends with a single clear ask or confirmation Tone: warm but direct. Under 200 words. No fluff. Then use the Gmail MCP to create a draft email to [prospect email] with this as the body. Subject: "Quick follow-up β [their company name]" Save as draft so I can review before sending.
This script takes the key details from your discovery call and generates a full custom proposal saved as a Markdown file.
import anthropic
from datetime import date
client = anthropic.Anthropic()
CONTEXT = open("sales-context.txt").read()
def generate_proposal(company, pain_points, solution_fit, deal_size, timeline):
prompt = f"""
{CONTEXT}
Generate a professional sales proposal for:
Company: {company}
Their pain points (from discovery call): {pain_points}
How our solution fits: {solution_fit}
Investment level: {deal_size}
Their timeline: {timeline}
Structure the proposal as:
# Proposal for {company}
## Executive Summary
[2β3 sentences. Their problem, our solution, the outcome. Lead with them, not us.]
## The Problem
[Their situation in their language β reference the pain points above]
## Our Solution
[Tailored to their specific use case β not a generic product description]
## Why It Works
[2β3 results or examples relevant to their industry/size]
## ROI Estimate
[Rough time saved, revenue impact, or risk reduced β be honest about assumptions]
## Investment
[{deal_size}. What's included. What happens next.]
## Next Steps
[3 clear actions with rough dates]
Write in plain English. No buzzwords. Make it feel written for this company specifically.
"""
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
proposal = r.content[0].text
filename = f"proposal_{company.replace(' ','_').lower()}_{date.today()}.md"
with open(filename, "w") as f:
f.write(proposal)
print(f"Proposal saved: {filename}")
return proposal
if __name__ == "__main__":
company = input("Company name: ").strip()
pain = input("Their main pain points (from discovery): ").strip()
fit = input("How our solution fits their situation: ").strip()
size = input("Deal size / investment level: ").strip()
timeline = input("Their timeline: ").strip()
generate_proposal(company, pain, fit, size, timeline)
python proposal_writer.py and use your call notes to answer the prompts.Paste your proposal into Claude and convert it into a 10-slide deck outline with talking points and recommended visuals for each slide.
[Paste your proposal here] Convert this proposal into a 10-slide pitch deck outline. For each slide provide: - Slide title - 3 bullet points (what to say, not what to display) - Recommended visual or data display - The one thing the audience should feel or believe after this slide Slides: 1. The Problem (their words, not ours) 2. Why Now (why this can't wait) 3. Our Solution (one clear sentence + how it works) 4. Live Demo / How It Works (what to show) 5. Results (real numbers or honest estimates) 6. ROI Calculator (their numbers, our impact) 7. Pricing & What's Included 8. Objection Pre-emption (address the top 2 before they ask) 9. Next Steps (specific dates and actions) 10. Q&A (what to expect and how to handle it) Keep it direct. No filler slides. Every slide must earn its place.
Deals often stall because the person you spoke to can't sell internally. Give them a 5-sentence exec summary they can forward.
[Paste your proposal here] Write a 5-sentence executive summary for a C-level stakeholder who was NOT on the discovery call. Rules: - Sentence 1: Their problem (specific, not generic) - Sentence 2: What changes if they solve it (outcome, not feature) - Sentence 3: Our solution in plain English (one sentence) - Sentence 4: Why us / why now (honest, not salesy) - Sentence 5: Single clear ask (a 20-min call, a trial, a decision) Lead with their problem, not our product. Write it so they can forward it to their CFO without editing.
Paste your sales context doc into Claude, then use this prompt to generate a complete objection handling reference.
Based on our sales context and ICP, generate a comprehensive objection handling playbook. Cover these 6 objections: 1. "It's too expensive / we don't have budget" 2. "We already have a solution for this" 3. "I need to think about it / let me get back to you" 4. "Send me some information and I'll review it" 5. "Now's not a good time β maybe next quarter" 6. "I need to check with my team / get buy-in" For each objection provide: - The REAL underlying concern (what they actually mean) - How to acknowledge it without being defensive - The honest reframe (not a manipulation tactic) - A specific response script under 60 words - The follow-up question to re-engage after your response - One thing you should NOT say in response Format as a reference card I can keep open during calls.
A simple CLI tool β paste any objection and get an immediate, specific response. Useful for async objections that come in via email.
import anthropic
client = anthropic.Anthropic()
CONTEXT = open("sales-context.txt").read()
PLAYBOOK = open("objection-playbook.txt").read()
history = []
def coach(objection):
history.append({"role": "user", "content": objection})
system = f"""You are a sales coach for this product:
{CONTEXT}
You have this objection playbook:
{PLAYBOOK}
When given an objection:
1. Identify which category it falls into
2. Give the recommended handling approach in 2β3 sentences
3. Write the exact response script (under 60 words, first person)
4. Provide the follow-up question to re-engage
Be direct. No preamble. Lead with the response."""
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=600,
system=system,
messages=history
)
reply = r.content[0].text
history.append({"role": "assistant", "content": reply})
return reply
print("Objection Coach β paste an objection and press Enter. Type 'quit' to exit.\n")
while True:
obj = input("Objection: ").strip()
if obj.lower() in ("quit", "exit", "q"):
break
if obj:
print("\n" + coach(obj) + "\n")
When a deal goes quiet or you're not sure what to do next, paste the deal summary and let Claude diagnose it.
[Paste your sales context doc] Here's a deal I need help with: Prospect: [name, title, company] Deal stage: [current CRM stage] Deal size: [rough value] Last 3 interactions: [bullet points β what happened, what was said] Their stated objections: [list them] Budget confirmed: [yes/no/unclear] Timeline: [what they told you] Decision makers involved: [who else is in the room] Analyse this deal and give me: 1. The REAL blocker (not what they said β what's actually stopping this) 2. Likelihood to close in next 30 days (1β10) with honest reasoning 3. The single most important action I should take in the next 48 hours 4. The exact message I should send today (draft it β subject + body) 5. One thing I'm probably doing wrong with this deal Be direct. Don't sugarcoat. I'd rather know the truth.
Run this every Monday morning. Paste into Claude with HubSpot MCP active β it turns your CRM data into a prioritised action plan.
Use the HubSpot MCP to pull my full active pipeline. For each deal, retrieve: name, stage, deal value, last activity date, next scheduled action, and any notes from the last 7 days. Then give me a Monday morning pipeline review: 1. COLD DEALS β flag any with no activity in the last 7 days. For each: draft a re-engagement message I can send today. 2. CLOSE THIS WEEK β identify the 3 deals most likely to close in the next 5 days. Explain why for each. 3. ACTION PLAN β for every active deal, one next action. Be specific: "Send the proposal", not "follow up". 4. DRAFT MESSAGES β for the top 3 priority deals, draft the exact message to send today via Gmail MCP. Save as drafts. Format as a clean action plan I can work through in order.
One script that pulls all active deals from HubSpot and generates the right output for each stage automatically.
import anthropic
from datetime import date
client = anthropic.Anthropic()
CONTEXT = open("sales-context.txt").read()
ICP = open("icp-sales.txt").read()
STAGE_ACTIONS = {
"new_lead": "prospect research and personalised outreach email",
"contacted": "follow-up email if no reply, or next touch if replied",
"discovery": "pre-call brief and discovery question selection",
"proposal": "proposal draft or proposal follow-up",
"negotiation": "objection handling response and deal coaching",
"closing": "final follow-up and next steps confirmation",
}
def orchestrate_deal(name, company, stage, last_activity, notes=""):
action = STAGE_ACTIONS.get(stage.lower().replace(" ", "_"),
"assess status and recommend next step")
prompt = f"""
{CONTEXT}
{ICP}
Deal: {name} at {company}
Stage: {stage}
Last activity: {last_activity}
Notes: {notes or 'none'}
Required action: {action}
Generate the appropriate output for this stage:
- If outreach: write the email draft
- If call prep: write the pre-call brief (abbreviated)
- If proposal: write the executive summary
- If objection/negotiation: write the response + coaching note
- If closing: write the follow-up and next steps
Keep each output under 300 words. Be specific to this deal.
End with: NEXT ACTION (one sentence, specific and actionable).
"""
r = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=800,
messages=[{"role": "user", "content": prompt}]
)
return r.content[0].text
# In production: pull deals from HubSpot MCP and loop through them
# For now: add your deals manually to test the script
deals = [
# {"name": "Jane Smith", "company": "Acme", "stage": "contacted",
# "last_activity": "3 days ago", "notes": "No reply to first email"},
]
filename = f"pipeline_{date.today()}.md"
with open(filename, "w") as f:
f.write(f"# Pipeline Action Plan β {date.today()}\n\n")
for d in deals:
f.write(f"## {d['name']} β {d['company']} ({d['stage']})\n")
output = orchestrate_deal(**d)
f.write(output + "\n\n---\n\n")
print(f"Pipeline plan saved: {filename}")
deals list with a HubSpot MCP call to pull all active deals automatically. Claude can make that MCP call in the same script if you ask it to in the prompt.Run this every Friday afternoon. It compares this week's activity to your baseline and tells you what to do differently next week.
[Paste your pipeline-baseline.txt here] Use the HubSpot MCP to pull this week's sales activity: - Emails sent and reply rate - Calls logged and outcomes - Deals advanced (stage changes) - Deals closed won / closed lost - New deals added to pipeline Compare to the baseline above and give me a weekly sales review: 1. WHAT WORKED β activities that moved deals forward 2. WHAT STALLED β deals that didn't progress and the likely reason 3. PIPELINE HEALTH β is the top of the funnel growing or shrinking? 4. WIN/LOSS INSIGHT β if any deals closed, what drove the outcome? 5. NEXT WEEK FOCUS β the single most important thing to prioritise Format as a crisp 1-page review. Be honest β I'm trying to improve, not feel good about a bad week.