Power Automate Condition If Blank: Complete Guide (17 Examples)

To build a Power Automate condition if blank check, add a Condition with empty(triggerBody()?['CustomerNotes']) on the left, choose is equal to, and enter the expression true on the right. The True branch runs when the field has no value.

That covers most flows, but blank isn’t always one thing. A SharePoint date can be null, an Excel cell can hold an empty string, and a Forms answer can be nothing but spaces.

Below are the exact expressions I use in the new designer for SharePoint, Forms, Excel, Dataverse, arrays, and trigger conditions, plus the errors that trip people up most.

Table of Contents

What Does a Condition If Blank Do in Power Automate?

A Power Automate condition if blank means the flow tests whether a value has no usable content before it runs the next action.

In most flows, that means checking for null, an empty string, an empty array, or a missing property, then sending the run down the True or False branch.

Blank is a business idea, not one single data type. A missing due date, an optional Forms answer, and an empty SharePoint person column all look blank to a user, but they may arrive in the flow payload differently.

The most common solution is the empty() expression. For example, if the Comments field has no value, this expression returns true:

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

Key point: In the Condition action, compare the result to the expression true, not the text string 'true'.

Stop Sending Incomplete Emails

Blank checks prevent awkward messages like Hello , your request is approved. Instead, you can replace missing values with N/A, skip the email, or send the item to a data-quality review path.

Avoid Failed Date and Number Formatting

Functions such as formatDateTime() and formatNumber() expect a real value. If a SharePoint date or number column is blank, wrap the action in a condition or use an inline fallback before formatting.

If your flow also formats dates, this Power Automate formatDateTime guide pairs well with the examples below.

Keep Apply to Each Loops Clean

Blank rows from Excel, optional attachments, and empty arrays from Get items can create unnecessary loops. A blank check lets the flow stop early or filter out rows before the main business logic runs.

How Do You Use empty() in a Condition If Blank?

To use empty() in a Condition if blank, add a Condition action, put an empty(value) expression on the left side, choose is equal to, and put the expression true on the right side. The True branch runs when the value is blank.

Follow these steps in the new designer:

  1. Open your cloud flow and select + where the check should run.
  2. Select Add an action.
  3. Search for Condition and choose the Condition control.
  4. In the left value box, select fx and enter your empty() expression.
  5. Set the operator to is equal to.
  6. In the right value box, select fx and enter true.
  7. Put your blank-value actions in True and your normal actions in False.

For a SharePoint text column named Customer Notes, the expression might be:

empty(triggerBody()?['CustomerNotes'])
Power Automate condition if blank using empty() is equal to true in the new designer
A Condition with empty() on the left, is equal to, and the expression true on the right

Watch out: If you type true directly into the text box instead of using the expression editor, the designer may treat it as a string. Always use the fx expression value for booleans.

New to cloud flows? The step-by-step Power Automate tutorials cover triggers, actions, and expressions from the ground up.

1. Text Column Is Blank

Use empty() for normal blank text fields:

empty(triggerBody()?['Title'])

This is the simplest expression for optional names, comments, descriptions, and single-line text columns.

2. Text Column Is Blank or Spaces Only

Use trim() when users enter spaces:

empty(trim(coalesce(triggerBody()?['CustomerNotes'], '')))

coalesce() turns a null value into an empty string first. Then trim() removes spaces before empty() checks the result.

Power Automate empty trim coalesce expression to treat spaces as blank
The blank-or-spaces expression in the new designer expression editor

I tested this on a SharePoint item whose Customer Notes held only two spaces. Plain empty() would call that text, but the trimmed version sent the run down the True branch:

Power Automate run history showing a blank condition evaluated to True
Run results: the spaces-only Customer Notes value evaluated to True

3. Field Is Not Blank

Wrap the blank check in not():

not(empty(triggerBody()?['CustomerNotes']))

Use this when the Yes branch should run only when a user entered a value.

Is Blank Different From Null or Empty String?

Yes. In Power Automate, blank is the plain-English result you want, while null, '', [], and {} are different technical representations. The right expression depends on whether the connector returns a missing value, an empty text value, an empty collection, or an empty object.

Value TypeExampleWhat It MeansBest Check
NullnullNo value existsequals(value, null) or empty(value)
Empty string''Text exists but has no charactersempty(value)
Whitespace string' 'Text has spaces onlyempty(trim(coalesce(value, '')))
Empty array[]No rows or itemsempty(array) or length(array) is 0
Empty object{}Object has no propertiesempty(object)
Missing propertyproperty not presentPath cannot be foundUse ? safe navigation

The Microsoft expression reference documents empty() for strings, arrays, and objects. In real connector payloads, nullable fields often work well with empty(), but equals(value, null) is clearer when you specifically want to detect null.

4. Compare Directly to Null

Use this when you want to know whether a property is truly null:

equals(triggerBody()?['DueDate'], null)

In the Condition UI, you can also put the date field on the left and compare it to the expression null on the right.

5. Replace Null With a Safe Fallback

Use coalesce() when you want the first non-null value:

coalesce(triggerBody()?['CustomerName'], 'N/A')

This is excellent for email bodies and table outputs. If the customer name is null, the flow uses N/A instead.

6. Use Safe Navigation for Missing Properties

The question mark operator prevents the flow from failing when a property path is missing:

triggerBody()?['AssignedTo']?['Email']

Without ?, a missing person object can cause a runtime error before your condition gets a chance to decide what to do.

Which Blank Check Expression Should You Use?

Use empty() for most blank text, arrays, and objects; use equals(value, null) when you must distinguish null from an empty string; use length() when counting rows matters; use coalesce() when you need a fallback value instead of a Condition branch.

Here is the practical rule of thumb:

  • Use empty() for simple blank checks.
  • Use not(empty()) for not blank checks.
  • Use equals(value, null) when the connector returns a true null.
  • Use length(array) when you need the number of items.
  • Use coalesce() when you want to display a default.
  • Use trim() when users may enter spaces.

For flows that should not even start unless a value is present, use trigger conditions instead of adding a Condition after the trigger. This Power Automate trigger conditions tutorial explains that pattern in more depth.

7. Use length() for an Empty Array

This expression returns true when Get items returns no rows:

equals(length(body('Get_items')?['value']), 0)

length() is useful when you also want to log how many records were found.

8. Use empty() for an Empty Array

This version is shorter and easier to read:

empty(body('Get_items')?['value'])

Both approaches are valid. Choose the one that makes the flow easiest for your team to maintain.

9. Use an Inline if() to Show N/A

Use if() when you do not need a separate branch:

if(empty(triggerBody()?['CustomerName']), 'N/A', triggerBody()?['CustomerName'])

This works well in email bodies, Teams messages, HTML table columns, and approval details.

How Do You Check Blank Fields by Connector?

Different connectors return blank values in different shapes. SharePoint choice and person columns are objects, Forms optional answers are usually text values, Excel empty cells often behave like empty strings, and Dataverse columns commonly return null when no value is stored.

Here’s the demo SharePoint list I used for the examples below. Several rows have no email, notes, due date, status, or assigned person:

SharePoint list with blank email, notes, date, choice, and person columns
The Customer Requests demo list with several blank columns

10. SharePoint Text, Date, and Number Columns

Text is straightforward:

empty(triggerBody()?['Title'])

For a SharePoint date column named Due Date with internal name DueDate, check blank before formatting:

empty(triggerBody()?['DueDate'])

For a number column named Budget, use the same pattern:

empty(triggerBody()?['Budget'])

If you later calculate due dates, keep time zones and date-only columns in mind. This Power Automate addDays tutorial is useful when the blank date becomes a calculated deadline.

11. SharePoint Choice, Person, and Lookup Columns

Choice, person, and lookup fields are usually objects. Check the property you actually need:

empty(triggerBody()?['Status']?['Value'])
empty(triggerBody()?['AssignedTo']?['Email'])
empty(triggerBody()?['Project']?['Value'])

Heads up: For multi-select choice, multi-person, or multi-lookup columns, the value is usually an array. Check the array itself with empty() before using its first item.

12. Microsoft Forms Optional Questions

Optional Forms answers can be blank when the responder skips a question. Use the dynamic content token or the response body path generated by your flow:

empty(outputs('Get_response_details')?['body/r7c9f2b1a4d8e4a1a9f0d2a1c3b5e6f7'])

For readability, consider renaming the Forms question action output in a Compose action first, then checking that Compose output.

13. Excel Empty Cells and Blank Rows

Excel Online empty cells often come through as empty strings. Check a specific cell like this:

empty(item()?['Email'])

To remove blank rows from a table, add a Filter array action and keep rows where a required column is not blank:

not(empty(trim(coalesce(item()?['Email'], ''))))

This avoids creating approvals, emails, or Dataverse rows for empty spreadsheet lines.

14. Dataverse Null Columns

Dataverse optional columns commonly return null when no value is stored. A direct null check is clear:

equals(outputs('Get_a_row_by_ID')?['body/emailaddress1'], null)

For display values, use coalesce():

coalesce(outputs('Get_a_row_by_ID')?['body/emailaddress1'], 'N/A')

If you store dates in variables before checking them, this guide to setting a variable to today’s date in Power Automate can help you keep the fallback logic consistent.

How Do You Check Empty Arrays and Attachments?

To check empty arrays and attachments, test the array returned by the previous action. Use empty(array) for a yes-or-no check, or equals(length(array), 0) when you also need the count for logging, branching, or troubleshooting.

15. Get Items Returned No Rows

For SharePoint Get items, the rows are in the value array:

empty(body('Get_items')?['value'])

If the result is blank, you can skip the email, create a log entry, or terminate the flow successfully.

16. Filter Array Returned No Matches

For a Filter array action named Filter_active_requests, use the body output:

empty(body('Filter_active_requests'))

This is one of the cleanest ways to stop a flow when no rows meet your criteria.

17. SharePoint Attachments Exist

After Get attachments, check the returned array:

not(empty(body('Get_attachments')))

If the expression is true, the item has at least one attachment. If it is false, the attachments array is blank.

How Do You Handle Not Blank and Multiple Checks?

For not blank logic, wrap your blank expression in not(). For multiple fields, combine checks with or() when any blank value should trigger the branch, or and() when every required value must be present before the flow continues.

Use or() when missing any required value should send the record to an error path:

or(
  empty(triggerBody()?['Title']),
  empty(triggerBody()?['DueDate']),
  empty(triggerBody()?['AssignedTo']?['Email'])
)

Use and() when all fields must be filled before the flow continues:

and(
  not(empty(triggerBody()?['Title'])),
  not(empty(triggerBody()?['DueDate'])),
  not(empty(triggerBody()?['AssignedTo']?['Email']))
)

For trigger conditions, add the expression under the trigger Settings so the flow does not run unless the value is present:

@not(empty(triggerBody()?['CustomerEmail']))

Trigger conditions use the @ prefix because they are stored as expressions in the trigger settings.

In the new designer, select the trigger, open the Settings tab, and select + Add under Trigger conditions. Then paste the expression:

Power Automate trigger condition to run only when a field is not blank
A not-blank trigger condition under the trigger’s Settings tab in the new designer

The same and/or thinking applies in canvas apps. If you build both, compare this with multiple If statements in Power Apps.

Why Is Your Blank Condition Not Working?

A blank condition usually fails for one of five reasons: the wrong property path, comparing to the string 'true' instead of the boolean true, spaces that count as text, the wrong data type, or an array checked like a single field.

#ProblemFix
1Condition compares to 'true'Use the expression true, not a typed string.
2SharePoint choice always looks blankCheck ?['Value'], not the whole choice object.
3Person column failsUse ?['Email'] or ?['DisplayName'] with safe navigation.
4Excel row contains spacesUse empty(trim(coalesce(value, ''))).
5Date formatting failsCheck blank before formatDateTime().
6Get items condition never worksCheck body('Get_items')?['value'], not the whole body.
7Filter array output is misunderstoodCheck body('Filter_array'), which is the filtered array.
8Null expression is typed as textUse fx and enter null.
9Missing object property causes InvalidTemplateAdd ? safe navigation to each object level.
10empty() receives a number in strict scenariosUse equals(value, null) for nullable numbers or convert carefully.
11Multi-select column treated as textCheck the array first, then loop or join values.
12Trigger condition never firesUse @not(empty(...)) in trigger settings and save the flow.

The error The template language function ’empty’ expects its parameter to be an object, an array or a string usually means you passed a value type the function cannot evaluate in that context.

Check the run history output, confirm the property path, and use equals(value, null) for pure null comparisons.

Power Automate Condition If Blank Cheat Sheet

The Power Automate if blank cheat sheet is a quick set of expressions for the most common conditions: blank text, not blank text, null values, whitespace-only strings, empty arrays, SharePoint lookup fields, person email fields, and fallback display values.

ScenarioExpression
Text is blankempty(triggerBody()?['Title'])
Text is not blanknot(empty(triggerBody()?['Title']))
Spaces count as blankempty(trim(coalesce(triggerBody()?['Title'], '')))
Value is nullequals(triggerBody()?['DueDate'], null)
Use fallback textcoalesce(triggerBody()?['CustomerName'], 'N/A')
Inline fallbackif(empty(triggerBody()?['CustomerName']), 'N/A', triggerBody()?['CustomerName'])
SharePoint choice blankempty(triggerBody()?['Status']?['Value'])
SharePoint person email blankempty(triggerBody()?['AssignedTo']?['Email'])
Get items returned no rowsempty(body('Get_items')?['value'])
Get items row count is zeroequals(length(body('Get_items')?['value']), 0)
Attachments existnot(empty(body('Get_attachments')))
Trigger only when not blank@not(empty(triggerBody()?['CustomerEmail']))

Pro tip: Name your actions clearly before copying expressions. body('Get_items') is easier to read and maintain than body('Get_items_3').

What Are the Best Practices for Blank Checks?

The best blank-check pattern is consistent, readable, and close to the point where bad data enters the flow. Normalize optional values early, name actions clearly, inspect run history before guessing, and choose one team standard for null, empty string, whitespace, and empty-array checks.

Normalize Values Before Business Logic

If a field is used many times, add a Compose action near the start of the flow and store the cleaned value there:

trim(coalesce(triggerBody()?['CustomerEmail'], ''))

Then every later action can reference the Compose output instead of repeating a long expression. This also makes troubleshooting easier because the run history shows the normalized value in one place.

Dates work the same way. Once a date can never be blank, you can format it safely, even with ordinal suffixes like 1st and 22nd.

Keep Data Validation Separate From Processing

Put required-field checks before approvals, emails, updates, and child flows. If a required value is blank, send the item to a clear exception path, update a status column, or terminate the flow with a friendly message.

This structure is easier to maintain than hiding blank checks inside every action. It also helps business users understand why one item did not move forward.

Prefer Explicit Property Paths

Do not check an entire complex object when you really need one property. For example, a SharePoint person object may contain claims, display name, email, department, and job title. If the business rule needs an email address, check ?['Email'].

The same rule applies to choice and lookup columns. Checking the visible Value property is more reliable than checking the wrapper object.

Test With Real Blank Samples

Create one test item for each blank type you expect: no date, no person, no choice, an Excel row with spaces, an empty Forms answer, and a query that returns no rows. Then run the flow and inspect the raw outputs.

Do not rely only on the designer preview. Runtime payloads are the source of truth, especially when connectors change optional fields or omit properties that have no value.

Use Terminate for Expected No-Data Runs

When a scheduled flow finds no rows, that is often a successful result, not an error. After a blank array check, add Terminate with Status set to Succeeded and a message like No open requests found.

This keeps your run history clean and prevents owners from investigating healthy runs that simply had no data to process.

Frequently Asked Questions

What is the best way to check if a field is blank in Power Automate?

The best general method is empty(value) compared to the expression true in a Condition action. Use equals(value, null) when you specifically need to test for null instead of any blank-like value.

Does empty() return true for an empty string in Power Automate?

Yes. An empty string like '' returns true with empty(), while a normal text value returns false. Microsoft documents empty() as a function for strings, arrays, and objects in the official workflow expression functions reference.

How do I check if Get items returned nothing?

Check the value array returned by *Get items*. Use empty(body('Get_items')?['value']) for a simple blank check or equals(length(body('Get_items')?['value']), 0) if you prefer a count-based condition.

How do I check if a value is not blank?

Use not(empty(value)). For example, not(empty(triggerBody()?['CustomerEmail'])) returns true when the email field has a value and false when it is blank.

Can I skip the flow when a trigger value is blank?

Yes. Open the trigger Settings in the new designer and add a trigger condition such as @not(empty(triggerBody()?['CustomerEmail'])). The flow run is skipped when the value is blank.

Conclusion

Power Automate condition if blank logic is reliable when you match the expression to the data shape. Use empty() for most text and arrays, equals(value, null) for true null checks, trim() for whitespace, and coalesce() or if() when you need a friendly fallback.

Quick recap:

  • Compare empty() to the expression true, not the string 'true'.
  • Use safe navigation like ?['Email'] for optional objects.
  • Check SharePoint choice, lookup, and person subproperties.
  • Check arrays from Get items, Filter array, and attachments before looping.
  • Move not blank checks into trigger conditions when the flow should not start.

Drop your scenario in the comments if a blank value is still confusing your flow, especially if it comes from SharePoint, Excel, Forms, or Dataverse.

More Power Platform Tutorials

Still deciding where blank checks belong, in the app or in the flow? These tutorials help you pick the right tool and clean up the data before it ever reaches a condition: