Filter Rows vs Trigger Conditions in Power Automate
Why your flow might not even start
Recently in a Power Platform WhatsApp group, someone asked a very good question about created/modified trigger filtering in Power Automate.
“Isn't Power Automate being hit either way? You're just deciding whether to continue or not. So you aren't really reducing the number of Power Automate executions with that filter?”
This is actually a very common misunderstanding, even among experienced Power Platform developers.
My answer in the group was:
Trigger Conditions are evaluated server-side before the flow starts. The system decides whether the flow should execute or not.
Because this topic comes up frequently, I thought it would be useful to write a short blog explaining:
- How Trigger Conditions actually work internally
- How Filter Rows works
- Why both help reduce unnecessary flow executions
The Misconception: “The flow runs anyway”
Many developers assume the following sequence happens:
Record Updated
Then
Power Automate flow is triggered
Then
A condition inside the flow is checked
Then
The flow stops if the condition is not met
If this were true, then yes, the flow would still count as an execution.
But this is not how Trigger Conditions work.
What Actually Happens Internally
When you configure a Trigger Condition, the evaluation happens before the flow instance is created.
Record Updated
Then
Power Automate trigger receives the event
Then
Trigger Condition is evaluated on the server side
Then
If the condition is True
Then
Flow instance is created
Then
Actions execute
If the condition evaluates to False:
Record Updated
Then
Trigger Condition is evaluated
Then
Condition is False
Then
Flow instance is not created
Meaning:
- The flow never runs
- No flow execution is created
- No actions execute
- No API calls are consumed
Trigger Conditions vs Conditions Inside the Flow
Scenario 1 — Condition inside the Flow
Trigger: When a row is modified
Then
Condition inside the flow: State = Texas
Then
If Yes, send an email
Here is the problem.
Every update still starts the flow when you use a normal Condition action inside the flow. The check happens only after the flow has already begun.
| Update Event | Flow Runs |
|---|---|
| Customer name changed | Yes |
| Phone number updated | Yes |
| Notes updated | Yes |
| State changed to Texas | Yes |
Even if the condition fails, the flow still ran.
- Wasted flow runs
- Extra API calls
- Unnecessary system load
Scenario 2 — Using Trigger Conditions
Trigger: When a row is modified
Trigger Condition:
@equals(triggerOutputs()?['body/address1_stateorprovince'], 'Texas')
With Trigger Conditions, the check happens before the flow instance is created. If the condition is false, the flow does not start.
| Update Event | Trigger Condition Result | Flow Runs |
|---|---|---|
| Customer name changed | False | No |
| Phone number updated | False | No |
| Notes updated | False | No |
| State changed to Texas | True | Yes |
Now the flow starts only when the target business condition is met.
Where Trigger Conditions Are Configured
- Open your flow
- Click the Trigger
- Click Settings
- Add your expression under Trigger Conditions
@equals(triggerOutputs()?['body/address1_stateorprovince'], 'Texas')
Multiple trigger conditions can be added, and they act as AND conditions.
What About “Filter Rows”?
If you are using Dataverse triggers, you will also see Filter Rows.
address1_stateorprovince eq 'Texas'
Filter Rows uses OData query syntax.
Unlike Trigger Conditions, Filter Rows works even earlier in the process.
Example:
address1_stateorprovince eq 'Virginia'
| Record Updated | Flow Triggered |
|---|---|
| State = Florida | No |
| State = Virginia | Yes |
This prevents non-matching events from even reaching the flow trigger.
Filter Rows vs Trigger Conditions
| Feature | Filter Rows | Trigger Conditions |
|---|---|---|
| Evaluation level | Dataverse event subscription | Power Automate trigger engine |
| Syntax | OData query | Workflow expression |
| Capabilities | Simple column filters | Complex logic such as and, or, empty, and comparisons |
| Best use case | Record filtering | Business rule validation |
Filter Rows runs first, then Trigger Conditions.
In practice, both must evaluate to true for the flow to start.
Using Both Together
The best design is often to use both features together.
Example:
Filter Rows:
address1_stateorprovince eq 'Virginia'
Trigger Condition:
@equals(triggerOutputs()?['body/accountcategorycode'], 1)
In this example:
- Filter Rows first limits the event to records where the state is Virginia
- Trigger Condition then checks whether the account category matches the business rule
- The flow starts only if both conditions are satisfied
Best Enterprise Design Pattern
In high-volume Dataverse environments, the best trigger configuration usually looks like this:
Trigger
Then
Select Columns
Then
Filtering Columns
Then
Filter Rows
Then
Trigger Conditions
- Select Columns reduces payload size
- Filtering Columns ensures the flow triggers only when specific fields change
- Filter Rows limits which records generate events
- Trigger Conditions applies the final business rule before the flow starts
Real Enterprise Example
Imagine a customer table where you only want to notify a team when a record belongs to Virginia.
Poor design:
Trigger: When a row is modified
Then
Condition inside flow:
If State = Virginia
Then
Send notification
This runs every time the record is edited, even when the state is not Virginia.
Better design:
Filter Rows:
address1_stateorprovince eq 'Virginia'
And optionally:
Trigger Condition:
@not(empty(triggerOutputs()?['body/emailaddress1']))
Now the flow starts only when:
- The updated record belongs to Virginia
- The record has the business data needed for the next step
SharePoint Example
SharePoint does not offer Dataverse-style Filter Rows in the same trigger experience, but it does support Trigger Conditions.
Example:
@equals(triggerOutputs()?['body/State'], 'California')
This means the flow starts only when the SharePoint item has a State value of California.
Common Mistakes
Using Conditions inside the flow for basic filtering
Trigger
Then
Condition
Then
Exit
This wastes executions because the flow has already started.
Ignoring Trigger Conditions
Many developers simply do not realize this feature exists.
Putting complex logic in Filter Rows
Filter Rows supports OData syntax only. It is not the place for full workflow expressions.
Not using Filtering Columns
If the flow only cares about a few fields, configure the trigger to watch those fields instead of reacting to every update.
Performance Impact
Using Filter Rows and Trigger Conditions properly helps:
- Reduce flow runs
- Reduce API consumption
- Improve performance
- Prevent throttling
- Improve maintainability
This becomes extremely important in enterprise environments where thousands of records may be updated daily.
Final Takeaway
Coming back to the original WhatsApp question:
“Isn't Power Automate being hit either way?”
The answer is No.
Trigger Conditions are evaluated server-side before the flow instance is created.
If the condition evaluates to false, the flow never starts.
And if you are using Dataverse, Filter Rows can stop irrelevant events even earlier.
That is why Trigger Conditions and Filter Rows are critical optimization techniques when building scalable Power Automate solutions.
Tip: Before publishing, you may want to replace sample column names with the exact logical names from your own environment.
-- Warm Regards, Sudip Chakrovorty, M.S. Hand Ph.: +1-(614) 309-8282 (EDT)