--- title: "Stale opportunities: Teams alerts with Power Automate" description: "How to find opportunities with no next step in Excel, SharePoint, or Dynamics, alert the owner in Teams, and run a low-noise pilot." author: "Carlos García" published: 2026-09-17 updated: 2026-09-17 language: en human_url: "https://kiia.cloud/blog/stale-opportunities-teams-alerts-power-automate/" --- > **In 60 seconds:** Define an opportunity with no next step using verifiable fields: it remains open and has an owner, stage, and amount, but no dated future action, or the date has passed. Run a scheduled review over an Excel table, SharePoint list, or Dynamics 365. Power Automate applies stage-specific rules and sends each owner a daily Teams digest; reserve immediate alerts for priority cases. After action, write the outcome, next step, date, owner, and alert state back to the system of record. Copilot can condense the queue, but it should not invent the sales action. Pilot one segment and measure coverage, time to contact, and false positives against a baseline. An opportunity does not become actionable because it appears on a red card. Sales, operations, and the flow first need one definition they can all evaluate in the same way. This is a Microsoft-native path for a team already working in Excel, SharePoint, Dynamics 365, and Teams. It does not require starting with an AI agent or replacing the CRM. It turns one specific omission—an open opportunity with no future action—into a visible, assigned, measurable queue. ## Define “no next step” with data, not intuition An initial rule can mark an opportunity as eligible when all these conditions are true: - the sales status is still **open**; - an active **owner** is assigned; - the **stage** is included in the pilot; - the **amount** and currency are available, although amount is not the only priority signal; - `next_step` is empty, `next_step_date` is empty, or that date has passed; - there is no valid pause, exclusion, or closure; - the last activity is older than the threshold for that stage. Do not use one “more than three days” rule for the entire pipeline. A newly qualified opportunity, a sent quote, and a negotiation can have different SLAs. Store the policy in a table or configuration the sales owner can inspect, for example: | Stage | Event that starts the clock | Threshold | Expected outcome | | --- | --- | --- | --- | | Qualified | qualification date | agreed SLA | call, meeting, or disqualification | | Quote sent | confirmed delivery | agreed SLA | customer review or justified pause | | Negotiation | last recorded activity | agreed SLA | decision, dependency, or follow-up date | The actual values belong to your operation. The flow should not invent them. It should not assume that a larger opportunity always warrants an immediate interruption either: priority, stage, date, and current commitment work together. If you are still validating the business case, [recovering forgotten sales](/blog/first-ai-agent-recover-forgotten-sales/) explains why next-step coverage is a useful first problem. Here, the focus is implementing it with Microsoft tools the team already has. ## Prepare a source the flow can read and correct Use the same minimum fields across all three paths: | Field | Purpose | | --- | --- | | `opportunity_id` | identify and update a record without relying on the account name | | `stage` and `status` | apply SLAs and exclude closed records | | `owner_id` | route work to an authorized identity | | `amount` and `currency` | rank with context, not promise close probability | | `last_activity_at` | calculate age from a verifiable event | | `next_step` and `next_step_date` | determine whether a valid future action exists | | `snooze_until` and `snooze_reason` | pause without erasing responsibility | | `last_alert_at` and `alert_state` | prevent duplicates and close the loop | **Excel in SharePoint or OneDrive.** Convert the range to a table, add a unique ID to each row, and avoid simultaneous edits while the flow writes. `List rows present in a table` returns 256 rows by default and needs pagination to retrieve more; Microsoft also notes temporary locks, filtering delays, and concurrent-modification conflicts in the [Excel Online (Business) connector](https://learn.microsoft.com/en-us/connectors/excelonlinebusiness/). It can support a small pilot, but it is not an indefinite transactional database. **SharePoint list.** Use typed columns for dates, person, stage, amount, and pause. You can review the list on a schedule or react to changes; the connector includes a [“When an item is created or modified” trigger](https://learn.microsoft.com/en-us/connectors/sharepointonline/). A list handles shared editing better than a workbook, but it still needs permissions, views, and a data-quality owner. **Dynamics 365 / Dataverse.** Query only open opportunities and the fields you need. The Dataverse connector can list, get, and update rows, and [trigger a flow when a row is added, modified, or deleted](https://learn.microsoft.com/en-us/power-automate/dataverse/create-update-delete-trigger). Filter on relevant columns so a cosmetic change does not start the process; one record can create several runs when it receives several updates. Do not copy names, phone numbers, email addresses, or full notes into Teams when the owner can open the original record. The card needs an ID, minimal sales context, and an access-controlled link. ## Build two flows, not a cascade of messages Separate detection from delivery: 1. A scheduled flow runs in the sales team's time zone and retrieves eligible opportunities. 2. It normalizes dates, stage, owner, and currency. 3. It excludes closed, snoozed, already handled, and recently alerted records. 4. It applies the versioned SLA and assigns a readable reason such as “quote has no future action” or “next step overdue.” 5. It creates or updates an alert record with a key such as `opportunity_id + rule_version + cutoff_date`. 6. A second section groups cases by owner and posts the digest in Teams. 7. Read, identity, and write failures enter an operational queue instead of disappearing inside run history. Power Automate can [run a cloud flow on a recurrence](https://learn.microsoft.com/en-us/power-automate/run-scheduled-tasks), with a configured time zone, days, and time. For this review, a scheduled cutoff is usually easier to operate than opening a run for every edit. Keep event-driven flows for changes that truly justify immediate attention. In Teams, a **chat to the owner** limits exposure and makes ownership clear. A **channel** works for a shared queue, sales shift, or records with no owner. The connector can [post to a chat or channel](https://learn.microsoft.com/en-us/power-automate/teams/send-a-message-in-teams), but the message should link to the system of record; Teams does not become the CRM. ## Design the alert for action, not alarm A useful digest shows, for each opportunity: - why it entered the queue; - stage, amount, and currency; - age since last activity and the applied SLA; - current next step, when overdue; - a link to the record; - permitted actions: **Record next step**, **Snooze**, **Reassign**, or **Close**. Avoid one card for every row. Group the daily queue by owner, keep the message to the most relevant cases, and link to a filtered view for the rest. Send an immediate alert only when an explicit rule warrants it—for example, a task promised for today that has expired or a priority opportunity with no owner. Noise control needs state: - **deduplication window:** do not repeat an alert while nothing material has changed; - **snooze with an expiry and reason:** pause until a date rather than hide forever; - **visible escalation:** after the agreed number of reviews, move the record to a management queue instead of adding mentions; - **exit event:** stop alerting when a future action is recorded, the opportunity is closed or reassigned, or a valid pause begins. Do not measure success by messages sent. A noisy flow can increase that number while making follow-up worse. ## Write the resolution back After an alert, the official record should retain: - the selected next step and committed date; - current owner and the person who made the change; - outcome: handled, snoozed, reassigned, closed, or false positive; - reason for a pause, closure, or dismissal; - alert date, rule version, and run identifier; - action date and, when relevant, the date of the first subsequent contact. A Teams response is not enough. If an action starts in a card, the flow should verify that the opportunity remains open, write the change to Excel, SharePoint, or Dynamics, and confirm the result. Make the write idempotent: Power Automate can retry, and triggers can run more than once. A stable key and a current-state check prevent two tasks or two contacts from being counted. ## Copilot can summarize the queue, not decide for sales Copilot adds value after the digest contains a correct list. It can condense ten reasons into one paragraph, group cases by stage, or draft a daily-meeting summary from permitted fields. The output should link to records and distinguish facts from generated prose. You do not need it to check whether a date is empty, compare a deadline, select the owner, or apply an SLA. Those are deterministic rules that are easier to test and audit. It should not invent “call tomorrow,” offer a discount, or infer why a customer has not replied. A useful separation is: - **rules:** eligibility, threshold, priority, deduplication, destination, and write-back; - **Copilot:** optional wording for a summary of an already validated queue; - **human owner:** the commercial next step and any customer commitment. ## Pilot one stage and measure the method Choose one region, team, or stage with enough real activity. Before alerts go live, measure a comparable period: how many eligible opportunities lack a next step and how long the team takes to act. During the pilot, record: - eligible opportunities and **leads touched** after an alert; - the share that ends with a valid next step; - time from detection to assignment and to first contact; - false positives and their cause: unrecorded activity, wrong SLA, wrong owner, or ignored pause; - snoozes, reassignments, closures, and repeated alerts; - flow failures and manual corrections; - observed sales outcomes, without automatically attributing them to the alert. Review concrete samples each week. If false positives are common, fix data or rules before adding AI. If nobody works the digest, revisit ownership and cadence before expanding the channel. The pilot tests whether forgotten work decreases; it does not promise a conversion lift. ## When to move to a custom solution Power Automate is usually enough while there is one primary source, the rules are readable, volume is manageable, and a person can operate exceptions. The guide to [what a business should automate first](/blog/what-to-automate-first-in-a-business/) helps keep the scope narrow, and this comparison of [Power Automate and custom development](/blog/copilot-power-automate-vs-custom-development/) covers the architecture decision. Consider a service or specialized agent when the queue must combine history from several sources, maintain long-lived state, prioritize from unstructured evidence, coordinate many teams or channels, or enforce permissions, tests, observability, and recovery controls that make the flow unmaintainable. Escalating does not mean granting freedom to send messages: preserve the same rules, traceability, and human approval first. If the next step eventually starts external communication, connect this queue to the pattern for [follow-up across WhatsApp, Teams, and CRM](/blog/automate-sales-follow-up-whatsapp-teams/). Detection belongs in the system of record; the contact channel needs its own consent, templates, and stop rules. Kiia can map the follow-up policy, build a pilot around the Microsoft source the team already uses, and leave a clear path to scale only when the process demands it. ## Frequently asked questions ### What does it mean for an opportunity to have no next step? It means the opportunity remains open and has an owner and stage, but it has no valid future action with a date and owner, or that date has passed. The exact age threshold should depend on the stage and the company's sales policy. ### Should we send an immediate alert or a daily digest? Use an immediate alert for events that need attention now, such as an overdue task on a priority opportunity. Group the rest into a daily digest for each owner to prevent duplicates and notification fatigue. ### When is Power Automate no longer enough? Consider a custom solution when you need to combine many sources, keep complex state, prioritize from unstructured context, coordinate several channels, or control volume, testing, and recovery more precisely than a maintainable flow allows.