Skip to content
home

Power Automate Condition Always False? How to Fix It

When a Condition always takes the No branch, the flow is almost never broken. The two values you are comparing just aren't what you think they are. Here are the causes in order of how often I see them.

Awokunle WinnerUpdated 2 November 2026 4 min read

1. Look at the actual values in the run history

Open the flow's run history, open the failed or unexpected run and expand the Condition. It shows the left and right values it compared. Read them literally: a trailing space, a number shown as text or an object instead of a word is usually visible straight away.

If the value is hard to read, add a Compose action just before the Condition with the same dynamic content, run the flow again and look at its output.

2. Text versus number mismatch

The equals comparison does not treat the text "5" and the number 5 as the same thing. Values typed into the right-hand box of a Condition are treated as text, while a SharePoint Number column returns a number.

Convert one side so both match, using Advanced mode in the Condition:

@equals(int(triggerBody()?['Quantity']), 5)

3. Choice columns return an object

A SharePoint Choice column gives you an object with a Value property, not plain text. Pick the dynamic content item named Value (for example Status Value), or write the property yourself:

@equals(triggerBody()?['Status']?['Value'], 'Approved')

People columns work the same way: use Email or DisplayName, not the whole person object.

4. Yes/No columns are booleans

A Yes/No column returns true or false, not the words Yes or No. Compare against the expression true, not the text "Yes". In the basic Condition, choose "is equal to" and enter true from the Expression tab rather than typing it as text.

5. Blank values and null

An empty column is null, and comparing null to an empty string can fail. To test for blank, use empty() instead of equals:

@empty(triggerBody()?['Comments'])

Use coalesce() to supply a fallback so later comparisons always have something to work with:

@coalesce(triggerBody()?['Region'], 'Unknown')

6. Text case and hidden spaces

The equals function is case sensitive, so "approved" does not equal "Approved". Lower-case both sides, and trim the value if it comes from a form or an email:

@equals(toLower(trim(triggerBody()?['Status']?['Value'])), 'approved')

7. Dates compared as text

Dates arrive as text such as 2026-11-02T00:00:00Z. Comparing them as text with greater than or less than can give wrong results, especially if the formats differ. Convert both sides to ticks:

@greater(ticks(triggerBody()?['DueDate']), ticks(utcNow()))

Remember that utcNow() is UTC, so a date-only column can look a day off near midnight.

8. And versus Or groups

If you have several rows in one Condition, check whether the group is set to And or Or. With And, one false row sends the whole Condition to No. Open the Condition in Advanced mode to read the full expression and spot a stray row.

Test it in isolation

Want this done for you?

I build this for clients every week. Book a free 30-minute call and I'll tell you exactly what your team needs.

Awokunle Winner · replies within a day

Tell me what's slowing your team down.

Thirty minutes, no cost, no pitch deck. You'll leave knowing exactly what to build and what it should cost.

Book a free 30-min call