GTM Playbooks
RevOpsIntermediateLast reviewed Run it in your LLM

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

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.

Open the Actor on Apify

Partner link: GTM Playbooks has a commercial relationship with this data source. See the affiliate disclosure.

Copy, paste, run

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.

Download .mdSKILL.mdExample CSV
# 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

  1. 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.
  2. Paste the prompt. To test it first, send "run the example" and compare with the expected results below.
  3. 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.
  4. 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)
Expected conversion by stage (advanced / decided)
GroupDealsOpenDiscoveryDemoProposalNegotiationEnd to end
All deals47960.0% (27/45)50.0% (12/24)60.0% (6/10)75.0% (3/4)13.5%
Mid-market24569.6% (16/23)60.0% (9/15)42.9% (3/7)50.0% (1/2)8.9%
SMB23450.0% (11/22)33.3% (3/9)100.0% (3/3)100.0% (2/2)16.7%
2025-Q423160.9% (14/23)50.0% (7/14)50.0% (3/6)66.7% (2/3)10.1%
2026-Q119350.0% (9/18)37.5% (3/8)66.7% (2/3)100.0% (1/1)12.5%
2026-Q2 (maturing)55100.0% (4/4)100.0% (2/2)100.0% (1/1)n/an/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
Deals and pipeline needed at each stage
StageConversion to next (%)Deals enteringPipeline enteringDeals a weekPipeline a weekRemove
44.4$1,111,1113.4$85,470
Lowest
26.7$666,6672.1$51,282
13.3$333,3331.0$25,641
8.0$200,0000.6$15,385
Closed wontarget6.0$150,0000.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. 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. 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. 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. 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. 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. 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. 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. 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_amount

Cost, 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 quarterT - 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 quarterK x 3
$20 x 3 = $60
Break-even hours per quarterK 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

View all RevOps

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you