HubSpot now ships a native stalled-deal flag — a calculated property called “Is Stalled After Timestamp” plus a preset “Stalled Deals” view — but it’s one fixed formula (20% longer than that deal owner’s own closed-won average for that stage), not a threshold you set per stage, and it doesn’t notify anyone by itself. If you’ve read that HubSpot has nothing here at all, that’s stale: it has something now. It’s just thinner than “stuck deal” usually means in practice. Here’s what HubSpot actually ships, what it still doesn’t do, two honest ways to close the rest of the gap yourself, and where an app does it for you.
HubSpot now flags stalled deals — with real limits
This is worth stating plainly, because a lot of what’s written about this topic (including an earlier version of this page) is stale. HubSpot’s default deal properties documentation lists a calculated property called Is Stalled After Timestamp, defined in HubSpot’s own words as:
“timestamp when Time in stage became 20% longer than the deal owner’s closed-won average for that stage. This is set automatically by HubSpot.”
Alongside it, HubSpot’s sales workspace guide documents a preset Stalled Deals view:
“deals that have been in a stage longer than average. These are deals where the time spent in a specific stage is at least 20% longer than the average time spent in that specific stage for all deals owned by the same deal owner.”
So: “HubSpot has no native stuck-deal signal” hasn’t been accurate for a while. If you’re on a tier with the calculated deal properties, this exists today, set automatically, no configuration required.
What the native feature still doesn’t do
Read both quotes above closely and the gap is specific, not vague:
- It’s one fixed formula, not a threshold you set. The 20% figure isn’t an admin setting — HubSpot’s documentation gives no option to tighten it for a fast stage or loosen it for a slow one. Every stage, every pipeline, gets the same math.
- It benchmarks a rep against themselves, not a team standard. The comparison is each deal owner’s own historical closed-won average — not a shared SLA the whole team is held to. Two reps can have very different “stalled” lines for the identical stage.
- It’s a property and a list view, not an alert. Nothing pushes a notification when a deal crosses the line — someone has to open the Stalled Deals view, or you have to build a workflow yourself enrolled on “Is Stalled After Timestamp is known” to get anything resembling a push.
- New deals and new reps have no baseline. The formula depends on a deal owner having closed-won history in that stage; it says nothing about reps or stages without enough history yet.
None of that is a per-stage threshold with proactive alerting across every pipeline, which is what the forum threads below are actually asking for — before and after this feature shipped.
What people are actually asking for
Three long-running threads, none of them resolved by a HubSpot feature, all still getting traffic years after they were posted:
- “Deal Filter” (6,231 views) — the original post: “I’m trying to create a filter that will let me check on any stagnant deals. So for example, if any deals have not moved in the last 30 days.” The accepted answer lands on a manual Last Modified Date is before [X] filter combined with excluding closed stages — a filter you have to keep re-dating by hand, not a saved rule that stays current.
- “Historical and aging reports” (5,876 views, 15 replies, 32 kudos) — opens with “I have had issues on several occasions with creating reports that show historical activity on deals or aging,” and names “real-time deal stage aging” as the first example. Still active as recently as January 2025.
- “Time Spent In Between Two Stages” (7,264 views) — “This is really a big problem we have where we have a pipeline and we want to track the time spent on each deal stage — as well as — time spent in between two stages.” The workaround in the thread involves hand-building a custom “Entered [stage] date” property per stage plus a calculation property, well past what most teams will maintain.
Two more make the same point from the reporting and alerting side: “How to build a report to show stale Deals? (Stuck in a stage for a while)” and “Deal Stuck in Stage for >15 days”, which asks specifically for a follow-up alert to the deal owner once a deal sits 15+ days in one stage. Nobody in either thread points to a native alert, because — even with the Stalled Deals view now in place — there still isn’t one that pushes a notification on its own.
Two honest ways to get past the native view
Route 1: the Inactive cards toggle, used deliberately
Turn on Inactive cards in Card setup and set the days threshold to whatever your fastest-moving stage should tolerate. It costs nothing beyond what you’re already paying, and works on every tier that has the board view. The honest limits still apply: it’s activity-based, not stage-based, and it’s one number for the whole pipeline. It will surface deals nobody has touched — a real and useful signal, different from the native Stalled Deals view’s stage-duration signal — but it will miss a deal that’s getting touched regularly while stalled in the same stage, and it can’t distinguish “day 5 of a 60-day enterprise stage” from “day 5 of a 3-day demo-follow-up stage.”
Route 2: a workflow keyed to a stage-duration property
Deals on Professional or Enterprise carry live stage-calculated properties: Time in current stage, Date entered current stage, and now Is Stalled After Timestamp. HubSpot’s own documentation is specific that Time in current stage and Date entered current stage are safe to build workflows on — it explicitly warns that Cumulative time and Latest time in [stage] won’t enroll a record correctly while it’s still sitting in that stage. So: build a deal-based workflow, enroll on Time in current stage crossing a threshold you choose (or on Is Stalled After Timestamp “is known,” if HubSpot’s own 20%-over-average math is close enough for your team), branch it per pipeline stage since your tolerance differs by stage, and end the branch with an internal notification or a “stuck” flag property you can filter and report on.
This gets you the real thing — a per-stage threshold with a notification, on a standard your whole team shares rather than each rep’s personal average — but you’re building and maintaining N branches (one per stage you care about), across however many pipelines you run, by hand.
Or skip building it
If what you want is the report and the review ritual, not the workflow-building exercise: Pipeline Reports for HubSpot reads the same stage-history data over the API and applies a configurable stuck-deal threshold per pipeline stage automatically — every open deal that’s crossed its threshold, ranked by how overdue it is, across every pipeline, no native view to remember to check and no workflow branches to build and maintain. These threads keep landing on the same benchmark, Pipedrive, which shows time-in-stage and stage-age natively, and ask why a CRM at HubSpot’s price point makes you build the equivalent by hand. It covers deals only for now — tickets and other objects aren’t supported yet, so if that’s specifically what you need, the routes above are your options today. If what you actually need is time-limit enforcement with manager/director escalation layered on HubSpot’s native data rather than a ranked report, a dedicated app called Pipeline SLA does that — a different tool for a different part of this problem. For the companion question — how long a given deal has actually been in its current stage — see HubSpot Time in Deal Stage: What’s Native, What Isn’t. Install via HubSpot OAuth — no card required to try it.