Stage-to-Stage Conversion Rates From Your CRM, by Cohort and Segment
The problem
Most pipeline plans use one conversion rate per stage, often from a dashboard that counts open deals as losses or from a number nobody can trace, so the stage where one segment loses its deals is hidden in the average, deals that stopped moving weeks ago stay in the forecast, and the pipeline target behind the bookings number cannot be checked.
Get the data
Multi-state contractor license search on Apify
Tag opportunities created from new contractor licenses so you can see whether that source converts differently by stage. It covers California, Texas, Washington, Oregon and Virginia only.
Partner link: GTM Playbooks has a commercial relationship with this data source. See the affiliate disclosure.
Run it in your LLM
One prompt for Claude or ChatGPT that runs the whole analysis on your own export: it finds each deal's furthest stage, builds the conversion table with the deal counts behind every rate, flags open deals that have sat in a stage longer than three of four deals that moved on, and turns your bookings target into the opportunities each stage needs. Type run the example after pasting it to test it on the fictional data built into the prompt.
# Stage-to-Stage Conversion Rates
You are a revenue operations and FP&A lead reporting to the CRO and the CFO. From an opportunity export with the date each stage was entered, measure how many deals move from each stage to the next, overall, by segment, and by the quarter the deals were created; find the stages where deals stall; and work back from a bookings target to the opportunities each stage needs, with every number traceable to the export.
## Rules
- Use only the data in this conversation. Do not invent deals, dates, conversion benchmarks, or industry averages. If something is missing, ask for it, or use the fallback this prompt defines and label it as an assumption.
- Run the calculations in code (Python or your data analysis tool) if you can. If you cannot run code, say so at the top and show the working stage by stage.
- Show the formula and the deal counts next to every rate: a rate without its denominator cannot be checked.
- Every default in this prompt (5 decided deals per rate, 5 deals per stall threshold, the 75th percentile, the 20% open share for a maturing cohort, calendar quarters) is a starting assumption the user can change, not a benchmark.
- Read only. Do not tell the user to edit CRM records as part of this run; list the records that look wrong instead.
- Format: rates as percentages with one decimal, deal counts needed with one decimal (they are averages, round up when setting targets), money to the nearest dollar, dates as YYYY-MM-DD.
## Step 0. Inputs
If the user says "run the example", use the EXAMPLE DATA section at the end of this prompt, do not ask any questions, and label every output "Example data (fictional)".
Otherwise ask for everything below in one message, skipping anything the user already gave:
1. A CSV export of opportunities, one row per opportunity, with these columns (ask the user to map theirs):
- opportunity_id, segment, amount, created_date, one date column per stage in order (the date the deal entered that stage), close_date, outcome (won, lost, or open)
Where to get it: in HubSpot, a deals export with the "date entered" property for each deal stage in the pipeline, plus create date, close date, amount, and the segment property. In Salesforce, stage dates live in opportunity history: a report on opportunity history or field history for Stage, or a custom date field per stage if the team keeps one; ask the admin which the org uses. Ask for the stage names in order and which outcome values mean won, lost, and open.
2. The as-of date (today by default). Days in stage for open deals are counted to this date.
3. The period: by default opportunities created in the last four full quarters plus the quarter in progress. Ask whether the fiscal year starts in January; cohorts are calendar quarters of created date unless the user gives another start month.
4. For the bookings math: the target bookings for the period being planned, the number of weeks in it (13 for a quarter by default), and the deal size to plan with (by default the average amount of won deals in the export). Ask which rates to plan with: overall by default, or one segment. Optional: how many opportunities the team creates per week now.
5. Any change to the defaults above.
Then report a data check before any analysis: rows read, rows dropped and why (outcome missing or not won, lost, or open; no created date; stage dates out of order, such as a later stage entered before an earlier one or a close date before the last stage date), deals by outcome, deals that skipped a stage (a later stage date with an earlier one blank), and segment values that look like the same segment spelled differently. Ask the user to confirm a mapping for messy values before going on, unless they said "run the example".
## Step 1. Conversion by stage
Furthest stage reached: for a won deal, every stage; otherwise the last stage with a date. A deal that skipped a stage counts as having reached it. For each stage:
- Reached = deals whose furthest stage is this one or later
- Open here = open deals whose furthest stage is this one. They have no result yet, so they are left out of the rate, not counted as losses.
- Decided = reached - open here
- Advanced = deals that reached the next stage (for the last stage: won)
- Conversion = advanced / decided
- Enough data = decided is 5 or more. Show rates under the minimum, marked "under 5 decided", and do not plan with them without saying so.
Build the table three ways: all deals, by segment, and by cohort (the quarter of created date). Show reached, open here, decided, advanced, and the rate for every cell. End to end = the product of the stage rates.
Also give won deals / closed deals (won + lost) next to the end-to-end rate, and explain the gap: open deals are left out of both, but most open deals have already passed early stages, so leaving them out of won / closed takes deals that were going well out of the early stages; the product of stage rates counts each stage decision once.
Cohort reading: a cohort with more than 20% of its deals still open is still maturing. Its rates come only from deals that were decided quickly, so do not compare it with older cohorts; say so next to it. Two or three cohorts are not a trend: report the change, do not forecast from it.
## Step 2. Where deals stall
For each stage, take the deals that moved past it (reached the next stage, or won for the last stage) and both dates are present:
- Days in stage = date entered the next stage (or close date) - date entered this stage
- Median days, and the stall threshold = 75th percentile days by nearest rank: sort ascending and take the value at position ceil(0.75 x n). A stage with fewer than 5 such deals gets no threshold: say "too few deals to set a threshold" and list its open deals for review by hand.
- For each open deal: days in its current stage = as-of date - date it entered the stage. Stalled = days in stage greater than the threshold.
Report per stage: deals that moved past it, median days, threshold, open deals in it, stalled deals and their amount. Then list every open deal with stage, date entered, days in stage, threshold, and stalled or not, stalled first.
Name the stage with the lowest conversion among stages with enough decided deals, overall and in each segment, and say where the segment differs from the overall picture. That stage, and the stage with the most stalled dollars, are the main findings.
## Step 3. Work back from the bookings target
With the target bookings B, deal size A, weeks W, and the chosen rates:
- Won deals needed = B / A
- Deals that must enter each stage, from the last stage back to the first: deals entering the next stage / this stage's conversion
- Pipeline entering each stage = deals x A
- Per week = deals / W and pipeline / W
- Check: deals entering the first stage = won deals needed / end-to-end conversion
- Coverage implied at the first stage = first-stage pipeline / B
Show the chain with the arithmetic. If the user gives the number of opportunities the team creates per week now, compare it with the first-stage deals per week and state the gap; do not estimate the current pace from a cohort that is still maturing.
Then show one lever: the lowest-converting stage with enough data, 5 percentage points higher, and how many fewer first-stage opportunities that needs. Do not claim the 5 points are achievable; it shows sensitivity, not a plan.
Do not forecast bookings from current pipeline, and do not adjust rates for seasonality or a process change the user has not described. The rates are history from the export.
## Step 4. Output
Start with a five-line summary:
- Headline: "Conversion by stage: {stage} {rate} ({advanced}/{decided}), ...; end to end {rate}."
- The lowest-converting stage overall, and any segment where a different stage is the problem.
- Stalled deals: {count} worth {amount}, by stage.
- To book {B} in {W} weeks at {A} a deal: {first-stage deals} opportunities entering {first stage} ({per week} a week), {coverage}x the target in first-stage pipeline.
- One line: "Rates come from {valid} deals created {period}; {n} open deals are left out of the rates until they are decided."
Then these tables:
1. Data check
2. Conversion by stage, all deals (stage, reached, open here, decided, advanced, conversion, enough data)
3. Conversion by segment and by cohort (one row per group, a rate with its advanced/decided for each stage, maturing flag)
4. Stall thresholds by stage, then open deals with days in stage, stalled first
5. Bookings target worked back (stage, conversion, deals entering, pipeline entering, deals per week, pipeline per week, then the won row)
6. Records to check (dropped rows, skipped stages, segment values to map)
7. Assumptions, each labeled as an assumption, including: stage entry dates are as recorded in the CRM, and reps who move several stages at once compress the days; open deals are left out of rates; the same deal size is used at every stage; the minimums, the percentile, and the maturing cutoff are defaults.
If you can create files, offer the conversion tables, the open deal list, and the bookings table as CSV downloads.
## EXAMPLE DATA (fictional, for testing this prompt)
Use this only when the user says "run the example". The company and deals are made up.
- As-of date: 2026-07-01
- Stages in order: Discovery, Demo, Proposal, Negotiation. Discovery is entered on created_date; the other date columns are demo_date, proposal_date, negotiation_date.
- Outcome values: "Won", "Lost", "Open"
- Period: all rows; calendar quarters
- Bookings math: target $150,000 over 13 weeks, deal size = average won amount, overall rates
- Defaults: all as written above
```csv
opportunity_id,segment,amount,created_date,demo_date,proposal_date,negotiation_date,close_date,outcome
O-001,SMB,20000,2025-10-01,2025-10-31,2025-11-20,2025-12-20,2026-01-19,Won
O-002,SMB,12000,2025-10-04,,,,2025-10-16,Lost
O-003,SMB,18000,2025-10-07,2025-10-21,,,2025-11-02,Lost
O-004,Mid-market,25000,2025-10-10,2025-10-31,2025-12-05,2025-12-26,2026-01-20,Won
O-005,SMB,24000,2025-10-13,,,,2025-10-25,Lost
O-006,Mid-market,30000,2025-10-16,2025-11-06,,,2025-11-18,Lost
O-007,Mid-market,36000,2025-10-19,2025-11-02,2025-11-12,2025-12-12,2025-12-24,Lost
O-008,Mid-market,15000,2025-10-22,,,,2025-11-03,Lost
O-009,Mid-market,21000,2025-10-25,2025-11-15,,,2025-11-27,Lost
O-010,Mid-market,27000,2025-10-28,2025-11-11,2025-11-21,,2025-12-03,Lost
O-011,Mid-market,12000,2025-10-31,,,,2025-11-12,Lost
O-012,Mid-market,18000,2025-11-03,2025-11-24,,,2025-12-06,Lost
O-013,Mid-market,24000,2025-11-06,2025-11-20,2025-11-30,,2025-12-12,Lost
O-014,Mid-market,30000,2025-11-09,,,,2025-11-21,Lost
O-015,SMB,36000,2025-11-12,,,,2025-11-24,Lost
O-016,Mid-market,15000,2025-11-15,2025-11-29,2025-12-19,,2025-12-31,Lost
O-017,SMB,21000,2025-11-21,,,,2025-12-03,Lost
O-018,SMB,27000,2025-11-24,2025-12-08,,,2025-12-20,Lost
O-019,Mid-market,12000,2025-11-28,2026-01-12,2026-02-16,,,Open
O-020,SMB,18000,2025-11-30,,,,2025-12-12,Lost
O-021,SMB,24000,2025-12-03,2025-12-17,,,2025-12-29,Lost
O-022,SMB,30000,2025-12-09,,,,2025-12-21,Lost
O-023,SMB,36000,2025-12-12,2025-12-26,,,2026-01-07,Lost
O-024,SMB,30000,2026-01-01,2026-01-15,2026-01-25,2026-02-08,2026-02-28,Won
O-025,SMB,15000,2026-01-07,,,,2026-01-19,Lost
O-026,Mid-market,21000,2026-01-10,2026-01-24,2026-02-28,,2026-03-12,Lost
O-027,SMB,27000,2026-01-16,,,,2026-01-28,Lost
O-028,SMB,12000,2026-01-19,2026-02-09,,,2026-02-21,Lost
O-029,SMB,18000,2026-01-25,,,,2026-02-06,Lost
O-030,SMB,24000,2026-01-28,2026-02-18,,,2026-03-02,Lost
O-031,SMB,30000,2026-02-02,2026-03-19,,,,Open
O-032,Mid-market,36000,2026-02-03,,,,2026-02-15,Lost
O-033,Mid-market,15000,2026-02-06,2026-03-08,,,2026-03-20,Lost
O-034,Mid-market,21000,2026-02-12,,,,2026-02-24,Lost
O-035,Mid-market,27000,2026-02-15,2026-03-17,,,2026-03-29,Lost
O-036,Mid-market,12000,2026-02-21,,,,2026-03-05,Lost
O-037,Mid-market,18000,2026-02-23,2026-03-25,2026-04-14,2026-05-05,,Open
O-038,Mid-market,24000,2026-02-24,2026-03-26,,,2026-04-07,Lost
O-039,Mid-market,30000,2026-03-02,,,,2026-03-14,Lost
O-040,SMB,36000,2026-03-05,,,,2026-03-17,Lost
O-041,SMB,15000,2026-03-09,,,,,Open
O-042,SMB,21000,2026-03-14,,,,2026-03-26,Lost
O-043,SMB,27000,2026-04-06,2026-04-20,2026-04-30,2026-05-14,,Open
O-044,Mid-market,12000,2026-04-27,2026-05-18,2026-06-07,,,Open
O-045,Mid-market,18000,2026-05-30,2026-06-13,,,,Open
O-046,SMB,24000,2026-06-03,2026-06-17,,,,Open
O-047,Mid-market,30000,2026-06-20,,,,,Open
O-048,SMB,16000,2026-02-10,2026-01-28,,,2026-03-02,Lost
O-049,Mid-market,22000,2026-01-19,2026-02-02,,,,
```
How to run it
- Open Claude or ChatGPT with code execution on (Claude's analysis tool, ChatGPT data analysis). Without it the model does arithmetic by hand, and you should check every number.
- Paste the prompt. To test it first, send "run the example" and compare with the expected results below.
- Attach a CSV with opportunity ID, segment, amount, created date, the date each stage was entered, close date, and outcome, list the stages in order, and give today's date, the bookings target, and the weeks in the period. The prompt lists the columns and where HubSpot and Salesforce keep stage dates.
- Read the data check first and confirm how messy segment values map, then take two things to the forecast call: the stage with the lowest conversion in each segment, and the stalled deals with their owners. Check the required opportunities per week against what the team creates now.
Before you paste CRM data
Pasting an export sends it to the LLM vendor. Check your company's AI and data policy, prefer a business or enterprise plan, and drop account names and contacts: the prompt only needs opportunity IDs, segments, amounts, stage dates, and outcomes. It reads the data and changes nothing in your CRM.
Expected results on the example data
A correct run of "run the example" should match these, give or take rounding. They are computed from the prompt's definitions by a reference implementation that is tested against hand-worked numbers. The data is fictional.
- Conversion by stage, all deals
- Discovery 60.0% (27/45), Demo 50.0% (12/24), Proposal 60.0% (6/10), Negotiation 75.0% (3/4, under 5 decided)
- End to end
- 60.0% x 50.0% x 60.0% x 75.0% = 13.5%, against won / closed 3 / 38 = 7.9%
- Lowest stage with enough data
- All deals Demo 50.0% (12/24); Mid-market Proposal 42.9% (3/7); SMB Demo 33.3% (3/9)
- Stall thresholds (75th percentile days in stage)
- Discovery 30 days, Demo 20 days, Proposal 30 days, Negotiation none, 3 deals moved past it
- Stalled open deals
- 3 worth $57,000: O-019 Proposal 135 days (threshold 30), O-041 Discovery 114 days (threshold 30), O-031 Demo 104 days (threshold 20)
- Cohorts still maturing
- 2026-Q2, 5 of 5 deals open
- To book $150,000 in 13 weeks at $25,000 a deal
- 6.0 Closed won, 8.0 Negotiation, 13.3 Proposal, 26.7 Demo, 44.4 Discovery; 3.4 new opportunities a week, 7.4x the target in first-stage pipeline
- Rows excluded
- 2: O-048 (stage dates out of order), O-049 (outcome missing or not Won, Lost, or Open)
| Group | Deals | Open | Discovery | Demo | Proposal | Negotiation | End to end |
|---|---|---|---|---|---|---|---|
| All deals | 47 | 9 | 60.0% (27/45) | 50.0% (12/24) | 60.0% (6/10) | 75.0% (3/4) | 13.5% |
| Mid-market | 24 | 5 | 69.6% (16/23) | 60.0% (9/15) | 42.9% (3/7) | 50.0% (1/2) | 8.9% |
| SMB | 23 | 4 | 50.0% (11/22) | 33.3% (3/9) | 100.0% (3/3) | 100.0% (2/2) | 16.7% |
| 2025-Q4 | 23 | 1 | 60.9% (14/23) | 50.0% (7/14) | 50.0% (3/6) | 66.7% (2/3) | 10.1% |
| 2026-Q1 | 19 | 3 | 50.0% (9/18) | 37.5% (3/8) | 66.7% (2/3) | 100.0% (1/1) | 12.5% |
| 2026-Q2 (maturing) | 5 | 5 | 100.0% (4/4) | 100.0% (2/2) | 100.0% (1/1) | n/a | n/a |
The overall Demo rate of 50% hides two different problems: SMB moves 3 of 9 decided deals past Demo, while Mid-market converts 60% at Demo and loses at Proposal (3 of 7). Three open deals worth $57,000 have sat in a stage longer than the threshold. At the overall rates, $150,000 in a quarter needs 44.4 new Discovery opportunities, 3.4 a week; the 75% at Negotiation rests on 4 decided deals, so treat it as a placeholder.
Opportunities each stage needs to hit your bookings target
Enter your target, deal size, and each stage's conversion to the next from the prompt or the template. Prefilled with the fictional example. Won deals = target / deal size; deals entering a stage = deals entering the next stage / that stage's conversion.
- Won deals needed
- 6.0
- Entering Discovery
- 44.4
- 3.4 a week
- End-to-end conversion
- 13.5%
- Discovery pipeline / target
- 7.4x
- $1,111,111
| Stage | Conversion to next (%) | Deals entering | Pipeline entering | Deals a week | Pipeline a week | Remove |
|---|---|---|---|---|---|---|
| 44.4 | $1,111,111 | 3.4 | $85,470 | |||
Lowest | 26.7 | $666,667 | 2.1 | $51,282 | ||
| 13.3 | $333,333 | 1.0 | $25,641 | |||
| 8.0 | $200,000 | 0.6 | $15,385 | |||
| Closed won | target | 6.0 | $150,000 | 0.5 | $11,538 |
At 55.0% instead of 50.0% for Demo, Discovery needs 40.4 opportunities instead of 44.4. Deal counts are averages; round up when you set targets. The same deal size is used at every stage, and rates come from your own history, not a forecast.
Implementation steps
- 1
Write the definitions down before pulling data: the stages in order and what moves a deal into each; furthest stage = the last stage with an entry date, or every stage for a won deal (a deal that skipped a stage counts as having reached it); conversion at a stage = deals that reached the next stage / deals decided at the stage, where decided = deals that reached it minus deals still open in it; cohort = the quarter the opportunity was created; a rate needs 5 decided deals before you plan with it (an assumption you can change)
- 2
Export opportunities with ID, segment, amount, created date, the date each stage was entered, close date, and outcome. In HubSpot, add the date entered property for each stage of the pipeline to a deals export; in Salesforce, stage changes are kept in opportunity history, which you can report on, and some orgs keep a date field per stage, so ask the admin which yours uses. Drop rows with no outcome, no created date, or stage dates out of order, list each with the reason, and list deals that skipped a stage
- 3
Build the conversion table for all deals, by segment, and by created-quarter cohort, with reached, open here, decided, and advanced next to every rate; multiply the stage rates for end to end and show won / closed deals next to it, since leaving open deals out of won / closed drops deals that had already passed the early stages. Mark a cohort with more than 20% of its deals still open as maturing and do not compare it with older cohorts
- 4
Find where deals stall: for each stage, days in stage for deals that moved past it, the median, and a stall threshold at the 75th percentile by nearest rank (sort ascending, take position ceil(0.75 x n)), set only when 5 or more deals moved past; list open deals whose days in their current stage exceed the threshold, with owner and amount, and name the lowest-converting stage with enough data overall and in each segment
- 5
Work back from the bookings target: won deals = target / average deal size; deals that must enter each stage = deals entering the next stage / that stage's conversion, from the last stage back; pipeline = deals x deal size; divide by the weeks in the period for a weekly number, and compare the first-stage number with what the team creates per week now
- 6
Take two things to the weekly pipeline or forecast call: the stalled deal list for owners to update or close, and the stage with the lowest conversion in each segment as the place to look for a process fix; post the summary to the revenue leadership channel in Slack and give Finance the per-stage pipeline numbers for the bookings plan
- 7
Run it with the copy-paste prompt on this page in Claude or ChatGPT, or with formulas in the template, check every rate against its counts, and use the calculator on this page to try other targets, deal sizes, and rates
- 8
Repeat each quarter on the same definitions and keep each quarter's table: rerun the older cohorts as their open deals close, and treat a stage rate that moves while its decided count is small as noise until it holds for another quarter
Template outline
The structure to recreate in your own workspace. Field names and thresholds are starting points.
Google Sheet: Stage conversion FYxx Qx (RevOps owns it, Finance reviews the plan tab)
Tab inputs: as_of, stages in order, won/lost/open labels, min_decided (default 5), min_stall_deals (5),
stall_pct (0.75), max_open_share (0.20), target_bookings, acv, weeks
Tab opps (CRM export): opportunity_id, segment, amount, created_date, demo_date, proposal_date, negotiation_date,
close_date, outcome
valid = outcome in (Won, Lost, Open) AND created_date not blank AND stage dates (and close date) in order
furthest = 4 if Won, else the position of the last stage date that is not blank (0 = Discovery)
cohort = YEAR(created_date) & "-Q" & ROUNDUP(MONTH(created_date) / 3)
days_in_current = as_of - date the deal entered its furthest stage (open deals)
Tab conversion (one block for all deals, one per segment, one per cohort):
reached(i) = COUNTIFS(valid, TRUE, furthest, ">=" & i)
open_here(i) = COUNTIFS(valid, TRUE, outcome, "Open", furthest, i)
decided(i) = reached(i) - open_here(i); advanced(i) = reached(i + 1), and won deals for the last stage
conversion(i) = advanced(i) / decided(i); enough = decided(i) >= min_decided
end_to_end = PRODUCT(conversion); maturing (cohorts) = open deals / deals > max_open_share
Tab stalls: days_in_stage(i) = next stage date (or close date for the last stage) - stage date, deals past stage i
median_days = MEDIAN(...); threshold = INDEX(SORT(...), ROUNDUP(stall_pct x n)) when n >= min_stall_deals
stalled = outcome is Open AND days_in_current > threshold of its stage
Tab plan: won = target_bookings / acv; deals(i) = deals(i + 1) / conversion(i); pipeline = deals x acv;
per week = deals / weeks and pipeline / weeks; coverage = first-stage pipeline / target_bookings
Worked example (example data, fictional):
49 rows as of 2026-07-01; 2 dropped: O-048 demo date 2026-01-28 before created 2026-02-10, O-049 blank outcome.
47 valid: 3 won, 35 lost, 9 open. Lost at Discovery 18, Demo 12, Proposal 4, Negotiation 1;
open in Discovery 2, Demo 3, Proposal 2, Negotiation 2.
Stage Reached Open here Decided Advanced Conversion
Discovery 47 2 45 27 27 / 45 = 60.0%
Demo 27 3 24 12 12 / 24 = 50.0%
Proposal 12 2 10 6 6 / 10 = 60.0%
Negotiation 6 2 4 3 3 / 4 = 75.0% (under 5 decided)
End to end = 0.60 x 0.50 x 0.60 x 0.75 = 13.5%; won / closed = 3 / 38 = 7.9%
By segment (advanced / decided):
SMB, 23 deals: Discovery 11/22 = 50.0%, Demo 3/9 = 33.3%, Proposal 3/3, Negotiation 2/2 (both under 5)
Mid-market, 24 deals: Discovery 16/23 = 69.6%, Demo 9/15 = 60.0%, Proposal 3/7 = 42.9%, Negotiation 1/2
The overall Demo rate of 50% hides an SMB problem at Demo and a Mid-market problem at Proposal.
By cohort:
2025-Q4, 23 deals, 1 open: Discovery 14/23 = 60.9%, Demo 7/14 = 50.0%, Proposal 3/6 = 50.0%, Negotiation 2/3
2026-Q1, 19 deals, 3 open: Discovery 9/18 = 50.0%, Demo 3/8 = 37.5%, Proposal 2/3, Negotiation 1/1
2026-Q2, 5 deals, 5 open: maturing, not compared
Stall thresholds (deals that moved past the stage, 75th percentile by nearest rank):
Discovery, 27 deals: 13 x 14, 7 x 21, 5 x 30, 2 x 45 days; position ceil(20.25) = 21 -> 30 days
Demo, 12 deals: 5 x 10, 4 x 20, 3 x 35; position ceil(9) = 9 -> 20 days
Proposal, 6 deals: 14, 14, 21, 21, 30, 30; position ceil(4.5) = 5 -> 30 days
Negotiation, 3 won deals: no threshold (under 5); O-043 (48 days) and O-037 (57 days) reviewed by hand
Stalled: O-019 Proposal 135 days $12,000; O-041 Discovery 114 days $15,000; O-031 Demo 104 days $30,000
= 3 deals, $57,000 (O-041: 2026-03-09 to 2026-07-01 = 22 + 30 + 31 + 30 + 1 = 114 days)
Plan: target $150,000 in 13 weeks at $25,000 a deal (3 won deals, $75,000 / 3), overall rates
Stage Deals entering Pipeline Deals a week Pipeline a week
Closed won $150,000 / $25,000 = 6.0 $150,000 0.5 $11,538
Negotiation 6.0 / 0.75 = 8.0 $200,000 0.6 $15,385
Proposal 8.0 / 0.60 = 13.3 $333,333 1.0 $25,641
Demo 13.3 / 0.50 = 26.7 $666,667 2.1 $51,282
Discovery 26.7 / 0.60 = 44.4 $1,111,111 3.4 $85,470
Check: 6 / 0.135 = 44.4. Discovery pipeline / target = $1,111,111 / $150,000 = 7.4x
Demo at 55% instead of 50%: 13.3 / 0.55 / 0.60 = 40.4 Discovery opportunities, 4.0 fewer
Slack to #revenue-leadership each quarter:
"Stage conversion as of {{as_of}}: {{stage_rates}}. Lowest by segment: {{lowest_by_segment}}.
Stalled: {{stalled_count}} deals, {{stalled_amount}} ({{stalled_list}}). To book {{target}}: {{first_stage_per_week}}
new opportunities a week. Table: {{sheet_url}}"
Tab history: quarter, group, stage, decided, advanced, conversion, threshold, stalled_count, stalled_amountCost, time saved, and break-even
Tool cost here is your share of an LLM plan, which depends on your vendor, so it is an input. Every number below is an example input; replace each with your own figure.
Inputs (all assumptions)
Replace each value with your own figure.
- THours a quarter to build the conversion, stall, and plan tables by hand (export, cleanup, three cuts, thresholds, write-up)8AssumptionTime the next quarterly pipeline planning prep.
- VHours a quarter with the prompt or template (export, review the data check and the results)1AssumptionTime the first two quarterly runs.
- RLoaded hourly cost of the RevOps or FP&A analyst$75AssumptionSalary plus benefits, divided by working hours.
- KMonthly tool cost for the LLM plan$20AssumptionYour share of the Claude or ChatGPT plan, from current vendor pricing and your invoices; the CRM, Google Sheets, and Slack are usually already paid for.
Formulas
- Time saved per quarter
T - V - 8 - 1 = 7 hours
- Time saved per week
(T - V) / 13 - 7 / 13 = 0.5 hours
- Value of time saved per quarter
(T - V) x R - 7 x $75 = $525
- Tool cost per quarter
K x 3 - $20 x 3 = $60
- Break-even hours per quarter
K x 3 / R - $60 / $75 = 0.8 hours, so the run covers its tool cost once it saves 48 minutes a quarter
- Discovery opportunities for a $150,000 quarter (fictional example data)
target / deal size / end-to-end conversion - $150,000 / $25,000 / 0.135 = 44.4, or 3.4 a week over 13 weeks
- The math counts analyst time only. Acting on stalled deals or a weak stage may change bookings, but by how much depends on your business, so it is not added here.
- Conversion rates are history, not a forecast: a pricing change, a new stage definition, or a new sales motion can move them, and a rate resting on a few decided deals can move a lot. Recheck the rates each quarter before relying on the plan.
- Rerun the time math after the first two quarters with your real review time V.
Common questions
- How do you calculate stage-to-stage conversion rate?
- Conversion at a stage = deals that reached the next stage / deals decided at the stage, where decided = deals that reached it minus deals still open in it. In the fictional example, 27 deals reached Demo, 3 are still open there, and 12 reached Proposal, so Demo converts 12 / 24 = 50.0%.
- Why leave open deals out of conversion rates?
- An open deal has no result yet, so counting it as a loss makes recent stages and cohorts look worse than they are. In the fictional example, the product of the stage rates is 13.5% while won / closed deals is 3 / 38 = 7.9%, because 7 of the 9 open deals have already passed Discovery and dropping them takes deals that were going well out of the early stages.
- Where do HubSpot and Salesforce keep the date a deal entered each stage?
- HubSpot has a date entered property for each deal stage in a pipeline, which you can add to a deals export. Salesforce keeps stage changes in opportunity history, which you can report on, and some orgs also keep a date field per stage. Check a few deals against their record history before trusting either, since reps who move several stages at once compress the days.
- How do you work back from a bookings target to the pipeline each stage needs?
- Won deals needed = target / average deal size, then divide by each stage's conversion from the last stage back to the first. In the fictional example, $150,000 / $25,000 = 6 won deals, 6 / 0.75 = 8 in Negotiation, 8 / 0.6 = 13.3 in Proposal, 13.3 / 0.5 = 26.7 in Demo, and 26.7 / 0.6 = 44.4 entering Discovery, 3.4 a week over 13 weeks.
- When is a deal stalled in a stage?
- Here, when it has been in its current stage longer than the 75th percentile of days that deals which moved past that stage spent there, a default you can change. In the fictional example the Demo threshold is 20 days and O-031 has been in Demo for 104; a stage with fewer than 5 deals that moved past it gets no threshold, and its open deals are reviewed by hand.
Keep going
Related playbooks
- RevOpsIntermediate
Measure Win Rate by Lead Source, Not One Blended Number
Ops leaders report one blended win rate, which hides that outbound, inbound demo requests, partners, and events convert and close very differently, so budget and SDR time keep going to the channels that look fine on average instead of the ones that turn pipeline into revenue.
HubSpot or SalesforceGoogle SheetsClaude or ChatGPTEstimate: 0.5 hrs/week - 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 - 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
Flag Slipping Deals Before the Forecast Call
A deal whose close date has moved twice, or that has sat in the same stage for weeks, still counts in commit at full value until someone asks about it on the forecast call, so the commit and best-case numbers carry deals the history already says are slipping, and finance learns the size of the problem when the quarter closes.
HubSpot or SalesforceGoogle Sheets or ClayClaude or ChatGPT+1Estimate: 1.5 hrs/week - Finance/FP&AIntermediate
Cost per Opportunity by Channel: Spend, SQOs, and Share of ACV
Channel spend is reviewed as a blended CAC, or as cost per click, so a source that produces cheap SQOs that never close looks efficient, a source with a high win rate and ACV looks expensive, and finance and RevOps argue about the budget without a shared cost per SQO and cost per expected closed-won deal.
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 - RevOpsIntermediate
Measure Pipeline Velocity by Segment and the Create Volume Remaining Quota Needs
Open pipeline is counted in dollars of coverage, but nobody measures how fast each segment actually turns opportunities into bookings, so a long-cycle enterprise book can look covered while it cannot produce the remaining quota in the days left, and a cycle that stretched by two weeks never shows up as a dollars-per-day problem.
HubSpot or SalesforceGoogle SheetsClaude or ChatGPT+1Estimate: 0.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
Need help implementing a playbook?
Our team builds custom Clay workflows and AI automations for revenue teams.
Get it built for you