What is a "trigger," anyway?

Power Automate lets you build "flows" — automated recipes that say "when this happens, do that" — without writing traditional code. Every flow starts with a trigger, and picking the right one is the first decision you make on any automation. The easiest way to picture a trigger is a doorbell camera: it sits there quietly watching for something to happen (motion at the door, a new record showing up), and the moment it does, it automatically springs into action. There are three broad kinds of triggers:

The Dataverse trigger, up close

Dataverse is Microsoft's built-in business database underneath Dynamics 365 — it's where records like Accounts, Contacts, and Cases actually live. The trigger you'll reach for constantly in CRM-related automation is called "When a row is added, modified, or deleted." It behaves a lot like a mail-sorting rule in your email inbox: "when an email arrives from this sender, move it to this folder" — except here it's watching database records instead of emails. It's more configurable than it first looks:

Design tip: push as much filtering as you can into the trigger's filter columns and conditions, rather than checking for the same thing a few steps into the flow. It's cheaper to run, easier to read, and keeps your run history free of clutter from flows that started only to immediately stop.

Real-world CRM automation examples

Notify the owner about a big deal

Trigger: a row changes on the Opportunity table, watching the estimated value field specifically. Condition: check whether the new value crosses a threshold (say, over $100,000) and it hasn't already been flagged. Action: send an email or Teams message to the deal's owner, and optionally flip a "High Value Flag" so the flow doesn't send the same alert again on every future edit. It's the same idea as a banking app that texts you only the first time your balance crosses a certain amount, not every single time afterward.

Case escalation

Trigger: a row changes on the Case table, watching the priority field. Condition: priority is now High or Urgent, and the case is still open. Action: reassign it to a senior support queue, alert the support manager, and optionally move the case forward a stage in its business process flow.

Lead assignment

Trigger: a new row is added to the Lead table. Actions: look up the right salesperson (often based on territory, or simply the next person in a round-robin list), then update the lead's owner field to match. This is a common, low-code replacement for older assignment rules or heavier custom code, whenever the actual assignment logic is simple enough to describe in plain steps.

Keeping documents organized with SharePoint

A frequent request is to keep documents related to a CRM record in a properly organized SharePoint folder, rather than as loose attachments sitting directly on the record. A typical pattern looks like this:

  1. Trigger when a new row is added (for example, a new Account or Case).
  2. Create a SharePoint folder named after that record's ID or name (with any characters SharePoint doesn't allow cleaned up first).
  3. Write the folder's web address back onto the Dataverse record, so a user can click straight through to it from the record's form.
  4. Later, other flows can use SharePoint's "Create file" action to drop generated documents, like quotes or contracts, straight into that same folder.

This keeps things scalable: SharePoint is purpose-built for storing large numbers of files and tracking their version history, in a way that basic record attachments aren't really designed to handle at scale — think of it as the difference between a proper filing cabinet and a shoebox full of loose papers.

Getting sign-off with multi-level approval flows

The Approvals connector handles the common situation of "someone needs to say yes before this can move forward." It's the same everyday process as getting a purchase order signed off by your manager, and then by their manager too if the amount is large enough. For a multi-level approval (say, a discount request that needs a manager's approval, and a director's approval too above a certain size), the flow's shape typically looks like this:

Trigger: Row modified (Quote) - discount % changed
  -> Start and wait for an approval (manager)
     -> Condition: approved?
        Yes -> discount > 20%?
                 Yes -> Start and wait for an approval (director)
                 No  -> Update Row: status = Approved
        No  -> Update Row: status = Rejected, notify requester

Keeping each approval as its own separate "Start and wait for an approval" step, instead of trying to squeeze the whole thing into one giant condition, makes the flow far easier to read and fix later — the same reason a checklist with clear steps beats one giant paragraph of instructions.

Reaching systems that aren't in the cloud

Not everything a flow needs to talk to lives on the internet. When a flow has to reach something that only exists inside a company's own network — an on-site SQL Server database, a shared file drive, or an older internal system — it needs the on-premises data gateway. Think of the gateway as a translator and phone line rolled into one: it lets a cloud service like Power Automate securely "call in" to a system living inside a private building's network, without having to punch a hole in the company firewall to let outside traffic in. Practically, it's a small piece of software installed on a machine inside that network, and both Power Automate and Power BI can route requests through it.

Custom connectors solve a related but different problem. If a piece of software has its own web-based API (a way for other programs to talk to it) but Microsoft hasn't built an official connector for it yet, you can build your own by describing that API's actions in a standard format. Once built, it shows up in the flow designer looking and behaving just like any built-in connector. It's common to pair the two: a custom connector for an internal company system, tunneled through the gateway if that system only exists inside the private network.

Handling errors so flows fail gracefully

A flow running in production needs a plan for when something goes wrong, not just for when everything works. Two features matter most:

Common mistake: leaving every action on its default "only run if the previous step succeeded" setting. If step three of a ten-step flow fails, the entire run just quietly turns red in the history with nobody notified and nothing cleaned up. A Try/Catch-style pattern means a failure actually gets noticed instead of going silently unnoticed.

A note on licensing

Not every connector comes free with a standard Dynamics 365 or Microsoft 365 license. Connectors are split into standard and premium tiers, and using a premium connector (or a custom connector, or the on-premises data gateway, in most cases) requires a premium Power Automate license, billed either per user or per flow. This matters while you're still designing the flow, not just when it's time to turn it on: if a flow mixes one free, standard trigger with even a single premium action anywhere in its chain, the whole flow generally needs premium licensing to run. It's worth double-checking current licensing details against Microsoft's official documentation before committing to a specific connector in your design, since pricing and connector tiers do shift over time.