Sales Prep Pipeline: Install, Source and Security | FunnelSlayer

Sales Prep Pipeline

Published by chriswestt in claude-skills

Review recommended1 installs

What this skill does

Automated sales call prep pipeline. Given a prospect name or upcoming call, pulls similar past sales calls from Supabase, analyzes objection patterns and what closed, loads into NotebookLM for grounded insights, and generates a call prep brief with talking points, anticipated objections, and recommended approach. Triggers on "prep for call with [X]", "sales prep [X]", "call prep [X]", or before any booked sales call.

Add Sales Prep Pipeline to your agent

Review the source and files first. When you are ready, copy the prompt instruction or use the CLI command supported by your environment.

Install with a prompt

Paste this into a compatible coding agent:

add this skill "sales-prep-pipeline" from https://github.com/chriswestt/claude-skills

Install with the CLI

Run this command in a controlled environment after reviewing the repository:

npx skills add https://github.com/chriswestt/claude-skills --skill sales-prep-pipeline

Skill instructions

Sales Call Prep Pipeline

Flow: Prospect Info -> Past Call Data -> NotebookLM Analysis -> Call Prep Brief

No pauses. Run end to end once triggered.

Parse the user's message for:

  • Prospect name or company (required)
  • Any known context (optional) — industry, size, how they found us

Step 1: Gather Intelligence

1a. Prospect Data (if exists)

source ~/.zshrc && python3 -c "
import sys; sys.path.insert(0, '$HOME/tools')
from lib.supabase_client import supabase_select
import json

# Check if prospect exists in clients or brand_intake
clients = supabase_select('clients', '?select=*&name=ilike.*<PROSPECT>*', limit=5)
intake = supabase_select('brand_intake', '?select=*&client_name=ilike.*<PROSPECT>*', limit=5)
print('CLIENTS:', json.dumps(clients, indent=2, default=str))
print('INTAKE:', json.dumps(intake, indent=2, default=str))
"

1b. Past Sales Calls (all of them)

source ~/.zshrc && python3 -c "
import sys; sys.path.insert(0, '$HOME/tools')
from lib.supabase_client import supabase_select
import json

calls = supabase_select('sales_calls', '?select=prospect_name,title,transcript,objections,pain_points,outcome,summary,action_items,meeting_date&order=meeting_date.desc', limit=20)
print(json.dumps(calls, indent=2, default=str))
" > /tmp/sales-prep-calls.json

1c. Revenue Data (context on deal sizes)

source ~/.zshrc && python3 -c "
import sys; sys.path.insert(0, '$HOME/tools')
from lib.supabase_client import supabase_select
import json

revenue = supabase_select('revenue', '?select=*&order=transaction_date.desc', limit=10)
print(json.dumps(revenue, indent=2, default=str))
" > /tmp/sales-prep-revenue.json

1d. Sales Playbook from Vault

python3 ~/tools/scripts/vault-search.py --query "sales playbook objection handling"
python3 ~/tools/scripts/vault-search.py --query "offer pricing"
python3 ~/tools/scripts/vault-search.py --query "ICP ideal customer"

Read the relevant files (offer structure, ICP, objection handling scripts).

Step 2: NotebookLM Analysis

2a. Prepare Sources

Export sales call data to a Google Doc for NotebookLM:

mcp__google-workspace__create_doc -> title: "Sales Prep: <PROSPECT>"

Write into the doc:

  • All past call transcripts/summaries
  • Objections and outcomes for each call
  • Prospect's intake data (if available)

2b. Create Notebook & Add Sources

Use Playwright MCP to create a NotebookLM notebook and add the Google Doc.

2c. Register & Query

python ~/.claude/skills/notebooklm/scripts/run.py notebook_manager.py add \
  --url "<NOTEBOOK_URL>" \
  --name "Sales Prep: <PROSPECT>" \
  --description "Sales call prep for <PROSPECT>. Past calls, objections, outcomes." \
  --topics "sales,call prep,<PROSPECT>"

Q1 — Objection patterns:

python ~/.claude/skills/notebooklm/scripts/run.py ask_question.py \
  --question "What are the most common objections across all sales calls? How were they handled? Which responses led to closes vs losses?" \
  --notebook-url "<NOTEBOOK_URL>"

Q2 — What closes:

python ~/.claude/skills/notebooklm/scripts/run.py ask_question.py \
  --question "What patterns appear in the calls that resulted in a close? What was the approach, framing, or specific language that worked?" \
  --notebook-url "<NOTEBOOK_URL>"

Q3 — Prospect-specific (if data exists):

python ~/.claude/skills/notebooklm/scripts/run.py ask_question.py \
  --question "Based on the prospect's profile and industry, which past calls are most similar? What approach would likely work best for this specific prospect?" \
  --notebook-url "<NOTEBOOK_URL>"

Step 3: Generate Call Prep Brief

Combine all intelligence into a structured brief:

## Call Prep: [PROSPECT NAME]
**Date:** [call date]  |  **Industry:** [if known]  |  **Source:** [how they found us]

### Prospect Profile
[Everything known about them — intake data, company, size, current situation]

### Similar Past Calls
[2-3 most similar past prospects, what happened, what worked/didn't]

### Anticipated Objections (ranked by likelihood)
1. **[Objection]** — Recommended response: [based on what worked in past calls]
2. **[Objection]** — Recommended response: [...]
3. **[Objection]** — Recommended response: [...]

### Recommended Approach
- **Lead with:** [specific angle based on their likely pain points]
- **Proof points to use:** [specific client results relevant to their situation]
- **Avoid:** [approaches that failed with similar prospects]
- **Close strategy:** [what's worked with similar deals]

### Talking Points
1. [Point — tied to their specific situation]
2. [Point — addresses likely objection preemptively]
3. [Point — proof/case study relevant to them]

### Pricing Strategy
- **Recommended package:** [based on their size/needs]
- **If price objection:** [specific response from playbook]
- **If timeline objection:** [specific response]

### Post-Call Actions
- [ ] Log transcript to Supabase
- [ ] Update outcome
- [ ] Send follow-up [email/DM/proposal]

Step 4: Feed Back

After the call, log the result:

source ~/.zshrc && python3 -c "
import sys; sys.path.insert(0, '$HOME/tools')
from lib.supabase_client import supabase_insert, now_iso
supabase_insert('sales_calls', {
    'prospect_name': '<PROSPECT>',
    'title': '<CALL_TITLE>',
    'meeting_date': '<DATE>',
    'outcome': '<OUTCOME>',
    'objections': '<OBJECTIONS>',
    'pain_points': '<PAIN_POINTS>',
    'summary': '<SUMMARY>',
    'created_at': now_iso()
})
print('Call logged')
"

Error Handling

ProblemSolution
No past calls in SupabaseUse sales playbook + ICP from vault only
Prospect not in systemPrep based on similar industry/size prospects
NotebookLM failsAnalyze call JSON directly, still generate brief
No revenue dataSkip pricing insights, use standard offer from vault

Cleanup

rm -f /tmp/sales-prep-*.json

Files included

  • SKILL.md

More skills