# Sales Pipeline Review

> Opens with the stale close dates and deals with no next step, ranks stalled by stage-median age, and shapes it for a 30-minute call. Never edits your CRM.

- Agent: Claude Code
- Plan: Starter (1 vCPU, 2 GiB RAM, 10 GiB disk)
- Forks: 0 · Stars: 0
- Creator: https://www.jurniti.com/creator-ca0ff2
- Tags: claude-code, crm, gtm, hubspot, pipeline, sales, small-business
- Requires config (you provide): ANTHROPIC_API_KEY
- Skills: pipeline-review

**To fork:** open https://www.jurniti.com/templates/sales-pipeline-review and use the Fork action — it starts a Stripe Checkout for a new VM seeded with this template's persist disk (same flat plan price, no fork fee).

## README

# A third of your open deals have close dates in the past

The Monday meeting opens a 200-row table sorted by amount, everyone discusses the
top five, and nobody notices — or that forty deals have no scheduled next activity,
and the forecast is built on all of it.

## The close date is the most-lied-to field in any CRM

So the review starts there, before any pipeline maths:

- **Past close date on an open deal** — not a forecast, a data failure. Listed first,
  separately.
- **Pushed more than twice** — a qualification problem, not a timing one. You get the
  **push count**, not just the current date.
- **Clustering on the last day of the month or quarter** — reported plainly, not
  smoothed.

If your close dates are stale, the review opens with a **trust warning** — because
every number after it inherits the fiction, and that belongs at the top rather than
in a footnote.

## Stage age beats stage name

A deal sitting in "Negotiation" for 90 days is not in negotiation.

Each deal's days-in-stage is compared to **that stage's own median** from your
export — not a global average, which hides genuinely slow stages. Over 2x the median
is **STALLED**, whatever the label says.

No stage-change history in the export? It says `UNAVAILABLE` rather than substituting
deal age, which is a different measurement.

## No next step is the finding

A deal with no scheduled next activity is the strongest quiet predictor of a deal
that will die — and it's invisible in a stage report. Counted, named, near the top.

## Ranked by what's actionable, not by amount

1. **Data failures** — cheap to fix, and they corrupt every other number
2. **Stalled** — with days vs stage median
3. **Slipping** — with push counts
4. **Closing this period** — the short list actually worth the meeting

The biggest deal is not the most useful line in a review.

## Written for a 30-minute call

Each section leads with the count, then the deals. Nobody reads a 200-row table
aloud.

## What you supply

Your own Claude Code login, plus a deal export in `~/pipeline/exports/` — HubSpot
Deals with stage, amount, close date, owner and last activity. Pipedrive and
Salesforce exports work the same way.

No CRM key. The export is the input, which is also why it cannot edit a deal.

## Where this stops

It reads and drafts. It does not update deals, change stages, adjust amounts, or
close anything.

It won't invent stage weightings or a probability your export doesn't contain — most
CRM defaults are invented anyway. It won't say a deal will close or is lost, won't
guess why something slipped (`reason not in export`), and won't review a rep. It
reviews the pipeline, not the person.

Verified on build: the skill, the working tree, the `NEVER_EDIT_CRM` guard, the
close-date rules, the stage-age rule and the four-part ranking are present on a fresh
fork. Running it on your own pipeline is yours to do.
