A 45-person B2B SaaS company. HubSpot, a 14-tab forecast spreadsheet, and two and a half hours every Thursday to build a report that was already out of date by Monday. Here is what we connected, the five tiles we built, and the three outcomes, including a mid-market coverage gap that had been invisible for six months.

This is a case study from a build we completed in Q1 2026. The client is a B2B SaaS company, 45 people, a six-rep sales team, and an annual contract value between €15,000 and €80,000. We have anonymised the company name and kept the numbers as close to real as we are able to share.

Before: the Thursday afternoon ritual

The sales operations lead had a standing block in her calendar every Thursday afternoon: two and a half hours to build the Friday pipeline report. Not because the data was hard to find, HubSpot had all of it, but because HubSpot's native reporting could not produce what the leadership team actually wanted to see before the Monday forecast call.

The process went like this. Export all open deals from HubSpot to CSV. Open the master forecast spreadsheet. Strip out closed-lost deals from last week. Pull the updated stage-weighted pipeline by multiplying each deal value against the historical win rate for its stage, which lived in a separate tab she had built and maintained herself. Update the coverage ratio. Fill in last week's closed-won, recalculate attainment against quota. Paste the rep-committed numbers from the Friday Slack thread. Save. Send.

The spreadsheet had 14 tabs by the time they came to us. Three people had contributed formulas over two years. The win rates in the weighting tab were last updated in Q3 2024 and no longer matched the company's current segment mix.

The Monday forecast call started 10 to 15 minutes late most weeks. Not because the report was not ready, it was always ready by Friday evening, but because someone on the leadership team would ask a follow-up question that required opening HubSpot to check a deal, which required opening the CRM export, which surfaced a discrepancy between the export and the spreadsheet. By the time the conversation resolved, the first agenda item had consumed 20 minutes.

The underlying problem: the spreadsheet was a snapshot of HubSpot as of Thursday afternoon. By the time it was read on Monday morning, the CRM had moved on. Deals had been updated, new ones had been entered, one rep's verbal had gone cold over the weekend. The report answered last week's question, not this morning's.

What we built

The discovery call brief was clear: the leadership team needed to walk into the Monday call with pipeline numbers they trusted without anyone having to prepare them. The sales ops lead needed her Thursday afternoons back. Rep attainment visibility was a secondary ask, she wanted to see whether rep-committed and stage-weighted were converging or diverging before the forecast locked.

We connected HubSpot via API, deal stage, owner, value, close date, last activity, and segment. The board has five tiles:

Stage-weighted pipeline. Total open pipeline multiplied against win rates per stage, refreshed every minute. Win rates are computed from HubSpot's own closed history, 18 months of actuals, so the weighting updates as the company's close rates evolve, not every time someone remembers to update a spreadsheet tab.

Coverage ratio by segment. Weighted pipeline versus quota for SMB and mid-market separately. The company's two segments had meaningfully different win rates and average contract values; collapsing them into one coverage number had been masking a persistent mid-market shortfall.

Deal velocity by stage. Average days each deal spends in Discovery, Evaluation, Proposal, and Negotiation, compared against the trailing 12-week baseline. A deal moving slower than baseline shows a small lag indicator on the tile before the rep flags it in the Friday Slack thread.

Rep attainment and committed versus weighted. For each rep: closed-won to date, rep-committed forecast, and the stage-weighted number the model predicts. Where committed and weighted diverge by more than 20%, the tile flags it. The intent is not to second-guess the rep, it is to surface the conversations worth having before the quarter ends.

Lost reasons this quarter. Closed-lost deals grouped by the lost reason field in HubSpot. The company was not previously tracking this systematically; by week four they had their first clean read of which competitor was winning on price versus which was winning on feature gaps.

Build time was six days. Day one: discovery, data mapping, reviewing HubSpot's deal structure and what the leadership team actually asked in forecast calls. Days two and three: connecting the HubSpot API, building the stage-weighted pipeline and coverage tiles, validating the weighting logic against two prior quarters of actuals. Days four and five: deal velocity, rep attainment, lost reasons. Day six: review with the sales ops lead and two members of the leadership team. The board went live on day seven.

After: two quarters in

The Thursday afternoon pipeline build block is no longer in the calendar. The sales ops lead described the first Monday after go-live as disorienting, the leadership call opened on time, everyone was looking at the same numbers, and no one asked her to check a deal. The meeting finished seven minutes early.

Three specific outcomes that were measurable within the first two quarters:

The mid-market coverage gap surfaced in week one. The combined coverage ratio had looked healthy at 2.1x. The segment split revealed SMB at 2.8x and mid-market at 1.4x, below the threshold where the company's historical close rates could reliably hit quota. The VP of Sales knew mid-market had been harder but had not had a clean number to act on. Two mid-market accounts that had been sitting in Proposal for six weeks were re-qualified and escalated within the first week of the board being live. One closed in Q2. The other was lost but was lost quickly, which freed up the rep's time six weeks earlier than it would have.

Forecast accuracy improved by the end of Q2. Committed versus stage-weighted divergence across the team averaged 31% going into Q1, meaning rep-committed and the model were disagreeing by nearly a third of pipeline. By the end of Q2, after the reps had been looking at the comparison tile for six months, the divergence had dropped to 14%. Not because anyone made them change how they forecasted, because they could see the pattern in their own numbers and adjusted how they committed.

Lost reason data changed a product conversation. By week eight, the lost reasons tile had enough data to show that feature-gap losses were concentrated in one competitor and in deals above €40K ACV. The sales ops lead brought the export to a product review meeting. It was the first time the product team had seen a structured read of what the sales team was losing on. Two of the gaps identified were already on the roadmap but had been lower priority. One was not on the roadmap at all.

The spreadsheet still exists. The sales ops lead kept it for a quarter as a backup, running the two in parallel to verify the numbers matched. They matched within rounding every week. She stopped opening it in week twelve.

What made it work

The data was already in HubSpot. Every number the spreadsheet contained came from a CRM export. The problem was not data availability, it was that the assembly step required a human, happened on a fixed schedule, and produced a snapshot that aged out before it was acted on.

The discovery conversation surfaced one thing we did not expect: the win rates in the spreadsheet weighting tab were wrong, and everyone knew they were wrong, but no one had fixed them because updating them required pulling two years of closed history, recalculating per stage and segment, and doing that calculation without breaking the dependent formulas. The board does that automatically from HubSpot's deal history. The first time the leadership team saw win rates that actually matched recent performance, the stage-weighted pipeline dropped by roughly 15%, a more accurate number than they had been working from.

That recalibration was uncomfortable for about a week. Then the Monday calls got better.