Snowflake Case Study
Banner imageBanner imageBanner image
Sep 22, 2026
read time icon
4
mins.

How to Identify Stuck Sales Deals in Salesforce

Sonny Aulakh
Sonny Aulakh
Founder of MaxIQ
How to Identify Stuck Sales Deals in Salesforce
In this article
It's time to Rethink Sales Compensation
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Explore this topic with AI

Key Takeaways (TL;DR)

Salesforce does not have a built-in “stuck deal” flag, so you need to define the signals yourself.

  • Use Opportunity History to find deals spending too long in the same stage.
  • Use Last Activity to spot open opportunities nobody has touched recently.
  • For a reliable Days in Current Stage field, use a Flow to record the stage entry date and a formula to count the days.
  • Put these signals in list views, dashboards, and manager report subscriptions so stuck deals get reviewed before they distort the forecast.

Salesforce will not tell you a deal is stuck.

There is no stuck field, no standard report, no flag on the record. The stage says Negotiation, and it will keep saying Negotiation for as long as nobody touches it.

So you define what stuck means in your pipeline, build the report once, and let it run.

Two signals do most of the work. How long a deal has sat in its current stage, and how long it has been since anyone did anything on it.

Everything below covers both, starting with the version that needs no admin work at all.

Run the Opportunity History report

This needs no setup and no admin. It is the fastest way to see which deals have been sitting.

  1. Go to the Reports tab and click New Report.
  2. Search the report types for Opportunity History and select it, then click Start Report.
  3. Add From Stage, To Stage and Stage Duration as columns. The first two are usually there by default.
  4. Click the dropdown on the Stage Duration column, choose Summarize, and tick Sum and Average.
  5. Filter Opportunity Status to Open, and widen the close date range so it covers your full sales cycle.
  6. Save and run it.

One quirk to know about before the numbers confuse you.

Stage Duration measures a single visit to a stage, from the moment a deal enters it to the moment it leaves. If a deal goes from Proposal to Negotiation and then slides back to Proposal, you get two separate durations rather than one running total.

So deals that bounce backward, which are usually your most troubled ones, read lower than they should.

Find the deals nobody has touched

The second signal needs its own report.

  1. New Report, then the standard Opportunities report type.
  2. Add Last Activity as a column.
  3. Filter Opportunity Status to Open.
  4. Add a filter on Last Activity, less than LAST_N_DAYS:14. Widen or narrow that window to suit your sales cycle.
  5. Sort by Last Activity ascending so the coldest deals sit at the top.

Read this one with a caveat in mind.

Last Activity is populated by completed tasks and past events logged against the record. It reports what your team logged, not what your buyer did.

So a rep who never logs calls produces a deal that looks abandoned. And a rep who logs six unanswered emails produces a deal that looks active.

Useful, as long as you know which one you are looking at.

How do I see days in current stage?

Most guides on this tell you to create a formula field using a standard Last Stage Change Date field on the Opportunity.

That field exists in the Opportunity History report type. It is not a field on the Opportunity object, so the formula they describe will not save.

Here is the version that works. Two pieces: a date field that a Flow stamps whenever the stage changes, and a formula field that counts forward from it.

Create the date field

  1. Setup, Object Manager, Opportunity, Fields and Relationships, New.
  2. Choose Date as the data type. Label it Stage Entry Date.
  3. Set field-level security and save.

Build the Flow

  1. Setup, Flows, New Flow, and choose Record-Triggered Flow.
  2. Object: Opportunity. Trigger: A record is updated.
  3. Set the entry condition to Stage, Is Changed, True.
  4. Optimize the flow for Fast Field Updates.
  5. Add an Update Triggering Record element and set Stage Entry Date to the formula {!$Flow.CurrentDate}.
  6. Save and activate.

Create the formula field

Back in Object Manager, add a new field on Opportunity. Type Formula, return type Number, zero decimal places.

Formula: TODAY() - Stage_Entry_Date__c

Label it Days in Current Stage. Save and add it to the page layout.

One gap to plan for. The Flow only fires on stage changes from the moment you activate it, so every open deal in your pipeline will have an empty Stage Entry Date until it moves.

Either run a one-time data load using the last stage change dates from your Opportunity History report, or accept that the field becomes accurate over a single sales cycle.

Put it where people will see it

A report sitting in a folder changes nothing.

Three placements, in rough order of how much use they get.

  1. Add Days in Current Stage to your pipeline list view and to the Kanban card. Reps see it without running anything, which is the only way most of them will ever see it.
  2. Put the stuck deals report on the sales dashboard as a component, filtered to open pipeline in the current quarter.
  3. Subscribe your managers to the report on a schedule that lands the morning of the pipeline call. Open the report, use the dropdown, choose Subscribe, set the frequency and recipients.

The subscription is the one that changes behaviour. A dashboard needs somebody to remember it exists.

What to do when a deal is stuck

Four moves. Pick one per deal and give it a date.

  • Re-qualify it. If nobody on the buyer's side has articulated a reason to solve this now, the stage is wrong rather than the timeline.
  • Multithread it. Write the intro email for your champion to forward instead of asking them to make an introduction they keep postponing.
  • Move the close date honestly. A slipped date in the system is worth more than a confident number in a forecast call.
  • Close it lost. Some of these died months ago and the pipeline has been carrying the body.
See it in the product
What's new in MaxIQ Conversation Intelligence

Every capability walked through one by one, with screenshots from real calls.

See What's New
Sonny Aulakh
Sonny Aulakh
Founder of MaxIQ
He writes about the challenges revenue teams face in forecasting, onboarding, and expansion, and how AI can transform the customer journey into predictable, repeatable growth. Before founding MaxIQ, Sonny held senior roles across sales, operations, and growth, giving him firsthand insight into the inefficiencies that slow down go-to-market teams.
about author

Frequently asked questions

FAQs

Frequently Asked Questions

Does Salesforce have a built-in stuck deals report?

How do I see how many days an opportunity has been in its current stage?

Why does my stage duration look lower than it should?

How many days in a stage means a deal is stuck?

Can Salesforce alert me automatically when a deal goes quiet?