Back to blog

How We Think About Stall Detection in SMB Sales Pipelines

How We Think About Stall Detection in SMB Sales Pipelines cover

When we started building the stall detection model that powers TRAICK's deal rankings, the first design question was not "what algorithm should we use." It was "what does a stalled deal actually look like?" The obvious answer is deal age, and deal age is part of the answer. But a deal that has been sitting in "Proposal Sent" for 12 days is not necessarily stalling. It might be in a perfectly normal evaluation window for that type of buyer.

The more precise question is: when does a deal's age in a particular stage start to predict a meaningfully lower close probability? That question requires data about what normal looks like for different stage names and deal contexts. Most SMB teams do not have that data explicitly, but it is sitting in their closed-deal history. The challenge is extracting a useful signal from it.

Starting with what we knew would not work

The first approach we sketched was a simple threshold model: flag any deal that has been in its current stage for more than N days. This is how most CRM alert systems work when they have alerts at all. You set a number, deals that exceed it get flagged, done.

The problem is that N has to be chosen somehow, and there is no single right number. A deal in "Qualification" should move faster than a deal in "Legal Review." A deal with a $5,000 value has a different expected evaluation timeline than one at $50,000. A SaaS deal where the buyer is making a self-serve decision moves on a different clock than a professional services deal that requires a statement of work and internal approval. A single threshold applied to all stages and all deal types produces so many false positives that reps learn to ignore the alerts within two weeks.

The model needed to be stage-aware and, ideally, team-aware. Stage-aware means the threshold for "Proposal Sent" is calibrated separately from the threshold for "Negotiation." Team-aware means the thresholds ideally reflect the team's own historical patterns rather than industry averages that may not apply to their specific buyers.

The signal families we chose to track

We settled on four primary signal families, each measuring a different dimension of deal health.

Stage age relative to that team's historical close times in that stage. If the team's median time-in-stage for "Proposal Sent" is 8 days for deals that eventually closed, then a deal at 24 days is sitting at 3x the median. That is a meaningful outlier. A deal at 11 days is within normal range. The ratio matters more than the absolute number.

Contact gap: days since the last logged contact activity of any kind. Not just emails from the rep, but also logged calls, meeting records, and replies from the prospect. The contact gap signal is strongest when it crosses 14 days in mid-to-late stages, because by that point the evaluation should be active and silence is unusual rather than expected.

Engagement velocity: whether email and meeting activity has accelerated or decelerated over the last 14 days compared to the prior 14 days. A deal where contact frequency is dropping is a different situation from one where it is stable or increasing. The direction of the trend matters, not just the current level.

Stakeholder completeness: whether the deal has at least one logged contact who received an outbound touch in the last 30 days. This catches a specific failure mode in multi-contact deals where the rep was speaking to a coordinator but the actual decision-maker has never been engaged. A deal with a logged champion contact who has not been touched in six weeks is not "active" in any meaningful sense, regardless of what other activity is logged.

How the signals get weighted

Each signal family gets weighted differently depending on the stage of the deal. A 15-day contact gap in "Qualification" is less alarming than a 15-day contact gap in "Negotiation," because early-stage deals often have natural pauses while the prospect gathers internal stakeholders. Late-stage deals should be moving, and silence there means something has stalled. The weighting scheme needs to reflect this stage-dependency to avoid producing alerts that reps know are wrong and therefore learn to dismiss.

We also apply a recency decay to the engagement velocity signal. Deal activity tends to be lumpy: three touches in a week, then a quiet period, then three more. A model that looks at a single trailing window misreads the lump as a trend. Looking at activity across two windows of equal length and comparing the ratio gives a more stable signal about whether contact frequency is genuinely decreasing or just in a normal inter-touch gap.

The signals we decided to ignore

Deal value was the most tempting signal to include and the one we decided to weight at zero for stall detection specifically. A high-value deal that is stalling is not stalling because it is high-value. It is stalling because of the same behavioral signals as a lower-value deal. The contact gap exists, the engagement velocity is dropping, the stage age is long. Weighting by deal value produces a model that prioritizes your biggest deals by default, which sounds useful but is actually deal-size bias dressed up as analytics. It finds the deals you are already paying attention to, not the ones you are missing.

We keep deal value as a separate ranking input that affects how a stalled deal gets prioritized in the final action list, but it does not affect the stall probability calculation itself. The distinction matters because conflating the two produces a model that is less useful for small deals than for large ones, and in an SMB pipeline, the aggregate value of mid-size deals that slip through unnoticed often exceeds the value of the large deals that were already being watched carefully.

We also decided not to model prospect seniority as a stall signal, even though the intuition is plausible that a deal where you have only been speaking to a junior contact is more likely to stall than one where you have the economic buyer engaged. The reason we left it out is that seniority data in SMB CRMs is unreliable. Job titles are entered inconsistently, decision-making authority varies significantly across company sizes, and the signal quality from this field was too low to add value over the four signal families already in the model.

The calibration challenge

Building a stage-aware model requires enough closed-deal history per stage to calculate meaningful medians. A team that has 12 months of CRM history and closes 15 deals per quarter has something to work with. A team that just switched CRMs six months ago and migrated data imperfectly has a calibration problem.

In the absence of sufficient team-specific history, the model falls back to category defaults derived from the signal patterns we can observe across the SMB deals that have been run through TRAICK. These defaults are not as precise as team-specific calibration, but they are more accurate than the fixed-threshold approach that most alternative tools use. As the team accumulates more closed-deal data, the calibration shifts toward their own patterns.

This is the aspect of building a detection model that the product description rarely captures: a stall detection system is not a static configuration. It is a model that needs to be calibrated to the specific team's deal velocity and buyer behavior. The signals that matter for a three-person revenue team selling $15,000 professional services engagements are similar in category but different in threshold from a five-person team selling $80,000 software licenses with a 60-day typical cycle. Getting the thresholds right is an ongoing calibration, not a one-time setup.

Ready to see your pipeline signals?

Connect your CRM and get your first ranked action list in the same week.

Get Early Access