Product notes · v0.1 · 7 October 2026
How I built Pipeline Truth
The problem, who it's for, the spec, where AI helps and where it doesn't, and how I'd know if it's working. I wrote this the way I'd write it for an engineering and design team.
1. The problem
A sales forecast is only as good as the CRM data under it. Most teams already suspect theirs isn't good:
- In Gartner's State of Sales Operations survey, only 45% of sales leaders and sellers had high confidence in their organisation's forecast accuracy, and only 47% believed their organisation had high-quality data. Gartner names poor data quality as one of the main contributors to inaccurate forecasts, and notes that many organisations don't measure data quality at all.
- Salesforce's State of Sales research puts the share of reps' time spent on non-selling tasks at 60%. Asking reps to type more into the CRM competes directly with selling.
So the gap I went after is the one Gartner points to: teams don't measure their pipeline data quality. A RevOps lead can feel that the forecast is shaky. What they usually can't do in five minutes is put a number on it, show it in money, and point to the deals and owners behind it.
Problem statement: RevOps and sales leaders have no fast, trustworthy way to see how much of their open pipeline sits on stale or missing data before a forecast call.
2. Who it's for
These are my working hypotheses. Discovery conversations are meant to confirm or kill them.
| User | Job to be done | What they need from the tool |
RevOps / Sales Ops lead Primary user | "Before Monday's forecast call, show me where the data is lying to us." | A score they can track week to week, the specific deals to fix, and something to send to managers. |
| Front-line sales manager | "Tell me which of my reps' deals to inspect in 1:1s." | An owner view and a fix list sorted by money at risk. |
| CRO / VP Sales | "How much of the commit should I believe?" | One number for commit exposure and a short written brief. |
Main adoption barrier: trust and privacy. Nobody uploads a real pipeline to a stranger's server. That drove the most important design decision: everything runs in the browser.
3. Discovery
v0.1 is built from public research and how Salesforce reports are structured. The next step is talking to the people who'd use it. I'm running short conversations with RevOps practitioners and will publish what changes as a result. Findings will be added here only from real conversations, with permission, and anonymised.
Interview guide (20 minutes)
- Walk me through the last time you prepared for a forecast call. Where did the numbers come from?
- When did you last find a deal in the forecast that was clearly stale? How did you find it?
- What do you check first when you don't trust a rep's pipeline?
- Which CRM fields do your reps reliably keep up to date, and which ones never?
- Have you tried to measure data quality before? What happened?
- [Show the tool] What would you do with this result tomorrow morning? What's missing or wrong?
What I want to learn: (1) which checks matter most, (2) whether value-weighted or count-based scoring is more useful, (3) whether teams would rerun this weekly, and what would make them.
4. Spec for v0.1
Goal: In under two minutes, a RevOps lead goes from a Salesforce export to a money-weighted view of pipeline data quality and a list of deals to fix.
Out of scope for v0.1: connecting directly to Salesforce (OAuth); predicting win probability; storing results; HubSpot and other CRMs (the column mapping works, but I haven't tested their exports).
Story 1: Get a result from my own export
As a RevOps lead, I want to drop in my Opportunities export and get a result without setup, so that I can try it before a meeting.
- Given a CSV with Stage, Amount and Close Date columns under standard Salesforce labels, when I drop it in, results render with no manual mapping.
- Given non-standard column names, I can map any field from a dropdown and results update immediately.
- Given dates where every value fits both MM/DD and DD/MM, a warning says which format was assumed and how to change it.
- No request containing file contents leaves the browser.
Story 2: See the risk in money, not just counts
As a CRO, I want to see how much pipeline value sits on deals with data issues, so that I know how much of the forecast to discount.
- The score is the share of open pipeline value on deals with no flagged issue, from 0 to 100.
- Each issue shows the number of deals and the value affected.
- If a Forecast Category column exists, Commit and Best Case exposure are shown separately. If not, the tool falls back to deals with probability ≥ 50%. If neither exists, it says which column to add.
- Checks that can't run because a column is missing are listed as "not measured", never silently counted as passing.
Story 3: Know who to talk to and what to fix
As a sales manager, I want a fix list and an owner view, so that I can run focused pipeline reviews.
- The owner table is sorted by flagged value, largest first.
- The fix list shows the 15 largest flagged deals, each with its issues and a suggested first fix. A CSV download includes all flagged deals.
Story 4: Get a brief I can forward
As a RevOps lead, I want a short written summary for my CRO, so that I don't have to write it from the charts.
- The brief is generated only when I click. Before that, I can see the exact JSON that would be sent.
- The payload contains aggregates only. Rep names are replaced with labels and swapped back in the browser.
- If the AI service is unavailable, the rest of the page keeps working and a clear message is shown.
5. AI decisions: where it adds value and where it's noise
Not AI The checks themselves
Flagging a past close date or a missing next step is a rule, not a judgement. Rules are explainable, give the same answer every time, and can be argued with in a pipeline review. An AI score for "data quality" would be harder to trust and impossible to audit. The method is public so anyone can check it.
AI Turning numbers into a brief
Charts take interpretation, and a CRO wants three sentences. Writing a short, specific narrative from structured numbers is where a language model is genuinely useful. The prompt restricts it to the numbers provided, rep labels only, and a fixed shape: headline, actions, biggest single fix.
AI, with limits Privacy by design
The model never sees deal names, accounts or rows. Rep names are replaced before sending. The server also strips the payload down to small, plain values, so the endpoint can't be used as a general chatbot.
Rejected AI win-probability per deal
It's tempting, but without historical outcomes and activity data it would be guesswork presented as confidence. In other words, noise. It's worth doing only with outcome data, and it isn't the problem this tool solves.
Later "Chat with your pipeline"
Useful only once the underlying data is trustworthy, and it would need the raw rows sent to a model. That reverses the privacy promise that makes people willing to try the tool. It's parked until there's a clear user need and a private way to do it.
6. How I'd know it's working
The site deliberately has no analytics today. Here's what I'd instrument with privacy-friendly, count-only events (no file data) if this were a product:
| Metric | Definition | Why it matters |
| Activation | % of visitors who run a check on their own file, not just the demo | Shows the privacy promise and export guide are enough to get real data in. |
| Time to first result | Seconds from landing to results, for own-file runs | The goal is under two minutes, including the export. |
| Mapping friction | % of own-file runs where the user changed a column mapping | High means auto-mapping is failing for real exports. |
| Action taken | % of runs that download the fix list or generate a brief | Separates "interesting" from "useful". |
| Weekly return | % of users who run another check within 14 days | The real test: does this become part of the forecast routine? |
7. Method: how the score works
A deal is open if its stage isn't marked as closed. Stages containing "closed", "won", "lost" or "disqualified" are marked closed by default, and you can change this. Each open deal gets checked against the rules below, as of the date you choose:
| Check | Flagged when | Needs column |
| Close date already passed | Close Date is earlier than the as-of date | Close Date |
| No next step | Next Step is blank | Next Step |
| No recent activity | Last Activity is blank or older than N days (default 30) | Last Activity |
| Stuck in stage | Days in the current stage exceed N (default 45), taken from Stage Duration or calculated from Last Stage Change Date | Stage Duration or Last Stage Change Date |
| Amount missing | Amount is blank or zero | Amount |
Health score = open pipeline value on deals with no flags ÷ total open pipeline value × 100. It's weighted by value because a stale $500k deal matters more to the forecast than a stale $5k one. Deals with no amount add nothing to the value, so they're also shown as a count. The bands (80+ healthy, 60–79 needs attention, below 60 at risk) are my own rule of thumb, not an industry benchmark.
Limits. The checks measure data hygiene, not deal quality. A deal can pass every check and still be lost. The thresholds are defaults you should tune to your sales cycle. Checks whose columns are missing are reported as not measured, so the score can only be optimistic, never pessimistic, when columns are missing.
8. What's next
- Trend view: compare two exports, for example this week and last week, so the score becomes a weekly habit rather than a one-off.
- Test with real exports from HubSpot and Pipedrive, then add their column names to auto-mapping.
- Per-stage thresholds: "stuck" should mean something different in Discovery than in Negotiation.
- The bigger lesson: every check here measures something a rep forgot to type. The lasting fix isn't better reminders. It's capturing activity, contacts and next steps automatically, at the source, so hygiene stops depending on memory. This tool shows the size of that gap. Closing it is a product of its own.
Changelog
- v0.1 · 7 Oct 2026: First release. Five checks, value-weighted score, stage, owner and forecast views, fix-list export, optional AI brief from aggregates only.
Sources
- Gartner, "Gartner Says Less Than 50% of Sales Leaders and Sellers Have High Confidence in Forecasting Accuracy", press release, 12 February 2020 (State of Sales Operations Survey). gartner.com
- Salesforce, "Sales Statistics" from the State of Sales report (2026): "Sales reps spend 60% of their time on non-selling tasks." salesforce.com