Plan Sales Capacity with Ramp and Attrition, Not Headcount
The problem
Bookings targets are usually funded as headcount times quota, which assumes every rep is fully ramped all year and nobody leaves, so a plan can look covered on paper while new hires are still ramping, leavers' seats sit empty for months, and the shortfall shows up mid-year, too late to hire into.
Implementation steps
- 1
Pull the roster from the HRIS into a roster tab: rep id, role, quota-carrying flag, start date, and termination date for everyone who carried quota in the last 8 quarters, plus approved and planned hires with target start dates; refresh it weekly with a scheduled Zapier or n8n run or a CSV export, and never overwrite past rows
- 2
Pull attainment history from the CRM: closed won bookings by owner by month for the same 8 quarters, and each rep's monthly quota; join to the roster so every rep-month carries its tenure month (1 = start month)
- 3
Build the ramp curve from your own cohorts: for each tenure month 1 to 12, median attainment of reps in that month divided by median attainment of fully ramped reps; use a month only when at least 5 reps are behind it (an assumption you can change), otherwise label the example curve as an assumption; ramped productivity = monthly quota x median ramped attainment
- 4
Model attrition and backfill from your history: trailing 12 month quota-carrying attrition rate x average headcount = expected leavers for the plan year, placed in the months you choose and labeled as an assumption; backfill start = departure + backfill lag (median days from resignation to the replacement's start, from the HRIS or ATS), and every backfill ramps from month 1
- 5
Compute ramped-rep equivalents by month: RE(month) = sum over reps on the team of ramp factor for their tenure month; capacity = RE x ramped productivity; compare with the bookings target by quarter and for the year, and show the gap in dollars and in ramped-rep months
- 6
Work out the hire-by date: one hire starting in month s adds the sum of the ramp curve over the months left; find the fewest hires, starting no earlier than today + recruiting lead time, that cover the gap, the latest start month that still works, and the req-open-by date = start date - lead time; list the quarters hiring cannot fix, because those need pipeline, win rate, or target changes instead
- 7
Add an AI step that flags the result: an OpenAI API call in Clay or a Sheets add-on reads only the computed cells and writes a five-line flag (gap, quarters at risk, hires needed, start-by and req-open-by dates, top assumption), does no arithmetic of its own, and is checked by a formula that every number in the flag matches a cell; post it to Slack for the sales leader and finance each month and whenever the roster changes
- 8
Back-test each quarter: compare the capacity the plan showed at the start of the quarter with actual bookings, record the error, refresh the ramp curve, attainment, attrition rate, and backfill lag, and keep each month's plan as the audit trail for headcount decisions; state in every post that it is a capacity plan, not the forecast
Cost, time saved, and break-even
Tool cost here is your automation plan share and AI usage, which depend on your vendors and volume, so it is an input. Every number below is an assumption; replace each with your own figure.
Inputs (all assumptions)
Replace each value with your own figure.
- THours a month to rebuild the capacity plan by hand (HRIS and CRM exports, tenure math, ramp, attrition, write-up)6AssumptionTime the next manual headcount or capacity review from export to sent summary.
- VHours a month to review the automated plan and post1.5AssumptionTime the first two monthly reviews.
- RLoaded hourly cost of the FP&A or RevOps analyst$75AssumptionSalary plus benefits, divided by working hours.
- KMonthly tool cost for the scheduled runs and the AI step$25AssumptionYour Zapier, n8n, or Clay plan share plus API usage, from current vendor pricing and your invoices; Google Sheets, the HRIS, and Slack are usually already paid for.
Formulas
- Time saved per month
T - V - 6 - 1.5 = 4.5 hours
- Time saved per week
(T - V) / 4.33 - 4.5 / 4.33 = 1.04 hours, shown as 1 hour per week on this page
- Value of time saved per month
(T - V) x R - 4.5 x $75 = $337.50
- Break-even hours per month
K / R - $25 / $75 = 0.33 hours, so the runs cover their tool cost once they save 20 minutes a month
- The math counts analyst time only. The larger effect is timing a hiring decision: in the worked example, three reqs opened by 2027-01-01 cover the year, and waiting a month means more hires for the same gap. What that is worth depends on your margins and hiring costs, so it is not added here.
- The back-test in step 8 is the accuracy check: if the plan misses actual bookings by more than your tolerance two quarters in a row, rebuild the ramp curve and attainment before trusting the hire-by date.
- Rerun the math after the first two months with your real review time V.
Template outline
The structure to recreate in your own workspace. Field names and thresholds are starting points.
Workbook: Sales capacity plan FY2027 (rebuilt monthly; finance and the sales leader own it)
Tab roster (HRIS, refreshed weekly, past rows never edited):
rep_id, role, quota_carrying, start_date, termination_date, status (active, approved hire, planned hire)
Tab attainment (CRM, closed won by owner by month, last 8 quarters):
rep_id, month, bookings, quota, attainment = bookings / quota, tenure_month = months since start_date + 1
Tab ramp_curve:
tenure_month, reps_behind_it, median_attainment, ramp_factor = median_attainment / ramped_median_attainment
Rule: use a month only if reps_behind_it >= 5, else the labeled example curve
ramped_productivity = monthly_quota x ramped_median_attainment
Tab attrition:
trailing_12m_leavers / average_headcount = attrition_rate
expected_leavers = attrition_rate x headcount; departure months chosen and labeled
backfill_lag_days = median(replacement start - resignation date); recruiting_lead_days = median(req open to start)
Tab capacity (one column per month):
RE(month) = SUM over reps on the team of ramp_factor(tenure_month)
capacity(month) = RE(month) x ramped_productivity
gap = target - SUM(capacity); gap_re_months = gap / ramped_productivity
hire_adds(start_month) = SUM of ramp_factor over the months left in the plan
hires_needed = fewest n with n x hire_adds(start) >= gap_re_months, start >= earliest_start
req_open_by = start_date - recruiting_lead_days
Worked example (example assumptions, not benchmarks; plan year 2027, as of 2026-10-22):
Target $5,400,000. Quota $50,000 a month per ramped rep, ramped attainment 80%
-> ramped productivity $40,000 per ramped-rep month
Ramp curve: month 1 0%, month 2 25%, month 3 50%, month 4 75%, month 5+ 100%
Team: 8 ramped reps; rep I started 2026-11-01; rep J started 2026-12-01; approved hire starts 2027-03-01
Attrition 20% a year x 10 reps = 2 leavers, placed at the end of March and the end of September
Backfill lag 3 months: March leaver's backfill starts 2027-07-01; September leaver's starts in 2028
Month Ramped Rep I Rep J Mar hire Backfill RE
Jan 8 0.50 0.25 - - 8.75
Feb 8 0.75 0.50 - - 9.25
Mar 8 1.00 0.75 0.00 - 9.75
Apr 7 1.00 1.00 0.25 - 9.25
May 7 1.00 1.00 0.50 - 9.50
Jun 7 1.00 1.00 0.75 - 9.75
Jul 7 1.00 1.00 1.00 0.00 10.00
Aug 7 1.00 1.00 1.00 0.25 10.25
Sep 7 1.00 1.00 1.00 0.50 10.50
Oct 6 1.00 1.00 1.00 0.75 9.75
Nov 6 1.00 1.00 1.00 1.00 10.00
Dec 6 1.00 1.00 1.00 1.00 10.00
Total ramped-rep months 116.75
Capacity = 116.75 x $40,000 = $4,670,000 (headcount x quota would have said 10 x $600,000 = $6,000,000)
Gap = $5,400,000 - $4,670,000 = $730,000 = 18.25 ramped-rep months
One hire adds: Jan start 9.5, Feb 8.5, Mar 7.5, Apr 6.5, May 5.5 ramped-rep months
Earliest start = 2026-10-22 + 90 days recruiting lead time = 2027-01-20 -> first full month February
2 hires need 9.125 each: only a January start works, which is already too late
3 hires need 6.083 each: latest start 2027-04-01 (6.5 each, 19.5 total = $780,000, $50,000 over the gap)
Open the 3 reqs by 2027-04-01 - 90 days = 2027-01-01
By quarter, target $1,350,000 each:
Before hires: Q1 $1,110,000, Q2 $1,140,000, Q3 $1,230,000, Q4 $1,190,000 (gap $240k, $210k, $120k, $160k)
With 3 April hires: Q1 $1,110,000, Q2 $1,230,000, Q3 $1,560,000, Q4 $1,550,000
-> the year closes $50,000 over, but Q1 stays $240,000 short and Q2 $120,000 short; hiring cannot fix them
AI step (OpenAI API in a Clay column or a Sheets add-on; reads cells, does no math):
"You write a capacity flag for a sales leader and CFO. Use only these values: {{target}}, {{capacity}},
{{gap}}, {{gap_re_months}}, {{quarter_gaps}}, {{hires_needed}}, {{latest_start}}, {{req_open_by}},
{{earliest_start}}, {{assumptions}}. Write five lines: the gap; the quarters at risk; hires needed and the
start-by and req-open-by dates; what hiring cannot fix; the assumption that moves the answer most.
Copy numbers exactly as given. Do not calculate, round, or add numbers. End with: Capacity plan, not the forecast."
Check: every number in the flag must appear in the source cells, or the post is held for review.
Slack to #sales-leadership monthly:
"Capacity FY{{year}}: {{capacity}} vs target {{target}}, gap {{gap}} ({{gap_re_months}} ramped-rep months).
Hires: {{hires_needed}} starting by {{latest_start}}, reqs open by {{req_open_by}}. Quarters hiring cannot fix: {{quarters}}.
Sheet: {{sheet_url}}. Capacity plan, not the forecast."Common questions
- Why not plan sales capacity as headcount times quota?
- Because it assumes every rep is fully ramped all year and nobody leaves. In the worked example, headcount x quota says $6,000,000, while ramped-rep equivalents give $4,670,000 against a $5,400,000 target, a $730,000 gap.
- Where does the ramp curve come from?
- Your own cohorts: for each tenure month 1 to 12, median attainment of reps in that month divided by median attainment of fully ramped reps, using a month only when at least 5 reps are behind it. Otherwise the example curve is used and labeled as an assumption.
- How is the hire-by date worked out?
- Find the fewest hires, starting no earlier than today plus recruiting lead time, whose ramped months cover the gap, then the latest start month that still works; req-open-by = start date - lead time. In the worked example, 3 hires starting by 2027-04-01 cover the year, so the reqs open by 2027-01-01.
- Can hiring fix every quarter?
- No. In the worked example the year closes $50,000 over with 3 April hires, but Q1 stays $240,000 short and Q2 $120,000 short. Those quarters need pipeline, win rate, or target changes instead.
Keep going
Related playbooks
- Finance/FP&AIntermediate
Check Pipeline Coverage with Historical Conversion, Not Rep Probability
Pipeline coverage is usually reported as open pipeline over quota, or weighted by the probability reps enter in the CRM, so a quarter can look covered at 3x while the deals, at the rates they have actually closed in the past, fall well short of the number, and finance finds out late in the quarter.
HubSpot or SalesforceGoogle SheetsZapier or n8n+1Estimate: 2 hrs/week - Finance/FP&AIntermediate
Auto-Generate Monthly Revenue Forecast from Pipeline
Finance builds revenue forecasts by hand, applying historical close rates to current pipeline. It eats hours every month.
SalesforceGoogle SheetsZapierEstimate: 4 hrs/week - Finance/FP&AAdvanced
Check Sales Commissions Against Billing Before They Are Paid
Commissions are calculated from CRM closed-won data that can disagree with what was invoiced and collected, so wrong close dates, amount mismatches, split errors, and missed clawbacks surface after payroll, when they are harder to recover and explain.
HubSpot or SalesforceStripe or QuickBooksGoogle Sheets+3Estimate: 2 hrs/week - RevOpsBeginner
Sync Salesforce Pipeline to Google Sheets Dashboard
Executives ask for pipeline reports in spreadsheets, but pulling data manually creates version control chaos.
ZapierSalesforceGoogle SheetsEstimate: 4 hrs/week - RevOpsIntermediate
Work Back from a New-Logo Bookings Target to the Ramped SDRs You Need
Headcount plans start from "how many SDRs do we have" instead of the quarterly new-logo bookings target, so finance and sales argue about reqs without a shared funnel from ACV, win rate, show rate, and meetings booked per ramped SDR.
HubSpot or SalesforceGoogle SheetsClaude or ChatGPT+1Estimate: 0.3 hrs/week - Finance/FP&AIntermediate
Audit GTM Tool Seats and Credits Against Usage Before Renewal
GTM tools renew on different dates with different notice periods, seats stay assigned to people who left or stopped logging in, and credit plans are sized for last year's volume, so finance finds unused seats after the notice deadline has passed and pays for another full term.
Google SheetsHubSpot or SalesforceClay+3Estimate: 1 hrs/week - RevOpsIntermediate
Measure Sales Cycle Length by Segment and Set When Pipeline Must Be Created
Most teams plan pipeline with one blended sales cycle, so segments that close in a month and segments that take half a year get the same creation deadline, and the long-cycle segment finds out in the last month of the quarter that the pipeline it needed should have existed a quarter earlier.
HubSpot or SalesforceGoogle SheetsClaude or ChatGPT+1Estimate: 0.4 hrs/week - Finance/FP&AIntermediate
Check Whether Quota Is Realistic From the Distribution of Rep Attainment
Quota and headcount plans usually assume every ramped rep hits 100%, and the check afterwards is one average attainment number, so nobody sees that most reps landed below quota, that a few top performers carried the average, or that the plan needed more from the typical rep than the team has delivered.
HubSpot or SalesforceGoogle SheetsClaude or ChatGPT+1Estimate: 0.4 hrs/week
Need help implementing a playbook?
Our team builds custom Clay workflows and AI automations for revenue teams.
Get it built for you