Open your opportunities list and sort by Next Step. You’ll probably see a lot of blanks, a few “follow up”, and one that says “call after Easter” from two years ago. Forecasts built on that are guesses. This guide builds a scheduled flow that runs every morning, finds opportunities that have gone quiet or have a missing or old next step, and gives the owner one clear task. You’ll also add a small record-triggered flow that stamps the date whenever Next Step changes, so “old” means something.
What you need
- Flow Builder. Salesforce’s pricing page lists it in every edition, but Free and Starter Suite are capped at 5 flows per org. This guide uses 2 flows. Pro Suite and above have no flow cap listed.
- System Administrator access, or an admin who can create fields and flows.
- A Default Workflow User set in Process Automation Settings. Trailhead lists this as a prerequisite for scheduled paths and scheduled flows.
- Two custom fields on Opportunity, created in step 1.
- Optional: a custom notification type, if you want a bell and mobile alert as well as a task.
How it fits together
Two flows:
- Record-triggered flow on Opportunity. When Next Step or Stage changes, it writes today’s date into two custom date fields.
- Schedule-triggered flow, daily at 7am. It loops through open opportunities and checks three things:
- Last Activity is more than 14 days ago (or blank)
- Next Step is blank
- Next Step hasn’t been updated in 21 days
If any are true, it creates one task for the owner and sets a “last nudged” date so the same opportunity isn’t flagged again for 7 days.
Step by step
1. Add three custom fields
On Opportunity, create these Date fields:
- Next Step Updated On (Next_Step_Updated_On__c)
- Stage Changed On (Stage_Changed_On__c)
- Hygiene Nudge Sent (Hygiene_Nudge_Sent__c)
Keep them off page layouts for now, or read-only. Reps don’t need to edit them.
2. Build the stamp flow
From Setup, go to Flows, click New Flow, and choose Record-Triggered Flow.
- Object: Opportunity
- Trigger: A record is created or updated
- Entry conditions: Stage Is Changed True, OR Next Step Is Changed True
- Optimize for: Fast Field Updates (you’re only updating the triggering record)
Then add two checks in a row, so a save that changes both fields stamps both:
- A Decision “Next step changed?” with the condition Next Step Is Changed True. On that path, an Assignment sets
{!$Record.Next_Step_Updated_On__c}to{!$Flow.CurrentDate}. - A second Decision “Stage changed?” with Stage Is Changed True. On that path, an Assignment sets
{!$Record.Stage_Changed_On__c}to{!$Flow.CurrentDate}.
In a Fast Field Updates flow, assigning values to $Record is how you update the triggering record, with no extra save.
Save it as “Opp - Stamp next step and stage dates” and activate it.
To backfill, run a quick data update setting both new fields to today on all open opportunities. Otherwise every open deal looks 3 years stale on day one.
3. Create the scheduled flow
New Flow, choose Schedule-Triggered Flow. In the Start element:
- Set Schedule: Start Date tomorrow, Start Time 7:00 AM, Frequency Daily. The start time uses your org’s default time zone.
- Choose Object: Opportunity
- Conditions: IsClosed equals False
Salesforce runs one flow interview per matching record and makes each record available as $Record. Records are processed in batches of 200 by default.
4. Add the checks as formulas
Create three Boolean formula resources:
- fxActivityStale:
OR(ISBLANK({!$Record.LastActivityDate}), {!$Record.LastActivityDate} < {!$Flow.CurrentDate} - 14) - fxNoNextStep:
ISBLANK({!$Record.NextStep}) - fxNextStepOld:
{!$Record.Next_Step_Updated_On__c} < {!$Flow.CurrentDate} - 21
And one to stop repeat nudges:
- fxNudgedRecently:
{!$Record.Hygiene_Nudge_Sent__c} >= {!$Flow.CurrentDate} - 7
Then add a Decision:
- Outcome Skip if fxNudgedRecently is True
- Outcome Needs attention if fxActivityStale OR fxNoNextStep OR fxNextStepOld is True
- Default outcome: do nothing
Adjust 14 and 21 days to your sales cycle. If most deals close in a month, use 7 and 14.
5. Create the task
On the Needs attention path, add a Create Records element for a Task:
- Subject: “Update opportunity: {!$Record.Name}”
- Related To ID:
{!$Record.Id} - Assigned To ID:
{!$Record.OwnerId} - Due Date Only:
{!$Flow.CurrentDate} - Priority: High
- Description: a text template like this:
This opportunity needs a quick update. Last activity: {!$Record.LastActivityDate} Next step: {!$Record.NextStep} Stage: {!$Record.StageName}, close date {!$Record.CloseDate} Please log your last touch, write a specific next step with a date (for example “Call Maria Tue 14th re: pricing”), or close it out.
The example in the description matters. “Follow up” isn’t a next step. “Call Maria Tue 14th re: pricing” is.
6. Stamp the nudge date
After the Create Records element, add an Update Records element that updates the opportunity the flow is running for ({!$Record.Id}) and sets Hygiene Nudge Sent to {!$Flow.CurrentDate}.
7. Optional: send a notification too
If tasks get ignored, add a desktop and mobile alert. In Setup, search Notification Builder, open Custom Notifications, and create a type (for example “Opportunity Hygiene”) with Desktop and Mobile channels. In the flow, use Get Records on Custom Notification Type to get its ID, then a Send Custom Notification action with the opportunity owner as recipient and the opportunity ID as target. Salesforce allows up to 10,000 notification actions per hour, which a small team won’t come near.
8. Debug, then activate
Use Debug on a few test opportunities: one fresh, one with a blank Next Step, one with old activity. Check that only the right ones get a task. Before you activate, count how many open opportunities match today. If it’s 150, that’s 150 tasks tomorrow morning. Start with longer thresholds (30 and 45 days) and tighten later.
9. Report on it weekly
Make a simple report: open opportunities with Hygiene Nudge Sent in the last 7 days, grouped by owner. In your pipeline meeting, go through that list first. That’s where the forecast is weakest.
Common mistakes
- Not backfilling the new date fields. Every opportunity gets flagged on day one.
- No repeat-nudge guard. Without Hygiene Nudge Sent, reps get the same task every single morning.
- Putting the checks in Start conditions only. Keep Start conditions simple (open opportunities) and do the date logic in formulas. It’s easier to read and change later.
- Forgetting the Default Workflow User. Scheduled flows need it set, and it’s often a person who has since left.
- Making the task generic. “Update this opp” gets closed without being done. Tell the rep exactly what’s missing.
When it’s worth getting help
If you have one sales process and under 500 open opportunities, you can build this from the steps above in a few hours. Help is worth it when you have several record types or sales processes with different rules, existing automation on Opportunity that might clash, or you want to tie this into forecasting or Pipeline Inspection. My Salesforce page covers how I work, and the B2B CRM niche page lists related automations.