Sales Automation
proposals documents
How to Automate Sales Deck Customization
Generate customized sales presentations based on prospect data and industry.
Jay Banlasan
The AI Systems Guy
This system automates sales deck customization by pulling prospect data from your CRM and generating tailored presentation slides. Every deck feels personal without manual work.
What You Need Before Starting
- Python 3.8+
- Claude or GPT API key
- Jinja2 for templating
- weasyprint for PDF generation
Step 1: Define Your Data Model
Set up the structure for sales decks records.
import json
import sqlite3
from datetime import datetime
def init_db():
conn = sqlite3.connect("sales_decks.db")
conn.execute("""CREATE TABLE IF NOT EXISTS sales_decks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
deal_id TEXT, content TEXT, status TEXT DEFAULT 'draft',
created_at TEXT, updated_at TEXT
)""")
conn.commit()
return conn
Step 2: Pull CRM Context
Get deal and company data to populate your sales decks.
def get_context(crm_client, deal_id):
deal = crm_client.get_deal(deal_id)
company = crm_client.get_company(deal["company_id"])
return {
"deal_name": deal["name"],
"company": company["name"],
"industry": company["industry"],
"amount": deal["amount"],
"notes": deal.get("notes", ""),
}
Step 3: Generate Content with AI
Use Claude to create customized sales decks content.
import anthropic
def generate_content(context):
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-20250514", max_tokens=2000,
messages=[{"role": "user",
"content": f"Generate sales decks content for {context['company']} in {context['industry']}.\nDeal value: ${context['amount']:,.0f}\nNotes: {context['notes']}"}]
)
return message.content[0].text
Step 4: Format and Export
Create a professional output document.
def export_document(content, context, output_dir):
filename = f"{context['deal_name']}_{datetime.now().strftime('%Y%m%d')}.md"
path = os.path.join(output_dir, filename)
with open(path, "w") as f:
f.write(f"# {context['company']}\n\n{content}")
return path
Step 5: Track and Measure
Log every document and track conversion.
def log_document(conn, deal_id, path, status="draft"):
conn.execute(
"INSERT INTO sales_decks (deal_id, content, status, created_at, updated_at) VALUES (?, ?, ?, ?, ?)",
(deal_id, path, status, datetime.now().isoformat(), datetime.now().isoformat()))
conn.commit()
What to Build Next
Track which slide combinations lead to the highest close rates.
Related Reading
- How to Automate Your Sales Pipeline Updates - automate sales pipeline updates
- Building Automated Sales Enablement Content - automated sales enablement content guide
- Cost of Manual vs Cost of Automated - cost manual vs automated operations
Want this system built for your business?
Get a free assessment. We will map every system your business needs and show you the ROI.
Get Your Free Assessment