Sunday, 30 November 2025

CRM: Customer Acquisition Cost (CAC)




The Customer Acquisition Cost (CAC) is the total average cost to acquire one new, paying customer.

It’s a key marketing and financial metric that tells you how efficient (or expensive) your growth efforts are. The lower the CAC, the better — assuming the customer is profitable over time.
ExampleLet’s say in Q1 your startup spent:
  • $200,000 on ads
  • $300,000 on marketing + sales team salaries & commissions
  • $50,000 on tools and agencies
Total spend = $550,000
You acquired 1,000 new paying customers
CAC = $550,000 ÷ 1,000 = $550 per customerWhy CAC Matters
  1. Profitability check – Compare CAC to Lifetime Value (LTV or CLV). The rule of thumb is LTV should be at least 3× CAC.
    • LTV:CAC = 3:1 → Healthy
    • <1:1 → Losing money on every customer
    • 5:1 → Might be under-investing in growth
  2. Channel efficiency – You can calculate CAC per channel (e.g., Google Ads CAC = $400, LinkedIn = $1,200) to decide where to double down or cut.
  3. Fundraising & unit economics – Investors obsess over CAC and the LTV/CAC ratio. A rising CAC with flat or falling LTV is a red flag.
Common Ways Companies Reduce CAC
  • Improve conversion rates (better landing pages, targeting)
  • Increase organic channels (SEO, word-of-mouth, viral loops)
  • Retention (happier customers refer more → lower effective CAC)
  • Upselling existing customers (cheaper than acquiring new ones)

References

  1. Sario, Azhar ul Haque. Digital Marketing Strategy: Frameworks, Analytics, and AI Driven Application (2025 Edition) (p. 169). Kindle Edition. 
  2. Grok




Python Code by Grok

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd

# -------------------------- DATA --------------------------
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec 2025"]

spend = [120000, 135000, 140000, 160000, 155000, 180000,
         195000, 210000, 205000, 220000, 230000, 250000]

new_customers = [240, 285, 320, 380, 410, 450,
                 520, 580, 610, 680, 750, 820]

# Calculate CAC
cac = [s / c for s, c in zip(spend, new_customers)]

# Channel breakdown (Dec 2025 example)
channels = ["Google Ads", "Meta Ads", "LinkedIn", "SEO/Organic", "Referrals", "Partnerships"]
channel_cac = [420, 580, 920, 180, 90, 650]

# -------------------------- FIXED DASHBOARD --------------------------
fig = make_subplots(
    rows=2, cols=2,
    subplot_titles=(
        "CAC Trend Over Time",
        "Spend & New Customers",
        "CAC by Channel (Dec 2025)",
        "CAC vs Target"
    ),
    specs=[[{"secondary_y": False}, {"secondary_y": True}],
           [{"type": "bar"}, {"type": "scatter"}]],  # Fixed this line!
    vertical_spacing=0.12,
    horizontal_spacing=0.10,
    row_heights=[0.6, 0.4]
)

# 1. CAC Trend
fig.add_trace(go.Scatter(x=months, y=cac, mode='lines+markers',
                         name='CAC', line=dict(color='#636EFA', width=4),
                         marker=dict(size=8)), row=1, col=1)

# 2. Spend (bar) + Customers (line)
fig.add_trace(go.Bar(x=months, y=spend, name="Spend ($)",
                     marker_color='lightblue'), row=1, col=2)
fig.add_trace(go.Scatter(x=months, y=new_customers, mode='lines+markers',
                         name="New Customers", line=dict(color='green', width=4)),
              row=1, col=2, secondary_y=True)

# 3. Channel CAC
fig.add_trace(go.Bar(y=channels, x=channel_cac, orientation='h',
                     name="Channel CAC", marker_color='#636EFA',
                     text=channel_cac, textposition='outside',
                     texttemplate='$%{text:,.0f}'), row=2, col=1)

# 4. CAC vs Target
target = 350
fig.add_trace(go.Scatter(x=months, y=cac, mode='lines+markers',
                         name='Actual CAC', line=dict(color='#636EFA')), row=2, col=2)
fig.add_trace(go.Scatter(x=months, y=[target]*len(months),
                         mode='lines', name=f'Target (${target})',
                         line=dict(color='red', dash='dash', width=3)), row=2, col=2)

# -------------------------- LAYOUT --------------------------
fig.update_layout(
    height=800,
    title_text="Customer Acquisition Cost (CAC) Dashboard",
    title_x=0.5,
    template="plotly_white",
    showlegend=False,
    font=dict(family="Arial", size=12)
)

# Axis labels
fig.update_yaxes(title_text="CAC ($)", tickprefix="$", row=1, col=1)
fig.update_yaxes(title_text="Marketing Spend ($)", tickprefix="$", row=1, col=2)
fig.update_yaxes(title_text="New Customers", secondary_y=True, row=1, col=2)
fig.update_yaxes(title_text="CAC ($)", tickprefix="$", row=2, col=2)

fig.show()

# Optional: save
fig.write_html("CAC_Dashboard.html")

No comments:

Post a Comment

CRM: Customer Acquisition Cost (CAC)

The Customer Acquisition Cost (CAC) is the total average cost to acquire one new, paying customer. It’s a key marketing and financial metric...