I had the same issue and figured out a solution. The trick is to convert today's date into SharePoint's internal column name format and then use it dynamically to check if the data is filled or not. Here's the full step-by-step:
Important background:
SharePoint doesn't store column names as-is. If your column name contains special characters (like /) or starts with a number, SharePoint encodes the internal name. For example:
| Display Name |
Internal Name |
16/03/2026 |
OData__x0031_6_x002f_03_x002f_2026 |
The encoding rules:
- Column name starts with a number → first digit gets hex encoded as
_x003{digit}_
/ becomes _x002f_
- Prefix
OData_ is added
-
So you need to build today's date in this encoded format dynamically.
Step 1 — Recurrence
Set it to run daily at your preferred time.
Step 2 — Get items
Connect to your SharePoint list. This returns all rows from your list.
Step 3 — Compose (name it "TodaysDateReadable")
Expression:
formatDateTime(convertFromUtc(utcNow(), 'India Standard Time'), 'dd/MM/yyyy')
Output example: 19/03/2026
Adjust the timezone as per your region.
Step 4 — Compose (name it "TodaysColumnName")
This converts the readable date into SharePoint's internal column name format:
concat(
'OData__x003',
substring(outputs('TodaysDateReadable'), 0, 1),
'_',
substring(outputs('TodaysDateReadable'), 1, 1),
'_x002f_',
substring(outputs('TodaysDateReadable'), 3, 2),
'_x002f_',
substring(outputs('TodaysDateReadable'), 6, 4)
)
This dynamically handles any date because day values only start with 0, 1, 2, or 3, and the hex encoding pattern is _x003{digit}_ for all of them:
| Date |
First Digit |
Encoded As |
01/04/2026 |
0 |
OData__x0030_1_x002f_04_x002f_2026 |
16/03/2026 |
1 |
OData__x0031_6_x002f_03_x002f_2026 |
25/12/2026 |
2 |
OData__x0032_5_x002f_12_x002f_2026 |
31/01/2026 |
3 |
OData__x0033_1_x002f_01_x002f_2026 |
Step 5 — Apply to each
Select output: value from Get items.
Step 6 — Inside the loop: Condition
Compare today's column value to check if the data has been filled against each person's name:
- Left side:
items('Apply_to_each')?[outputs('TodaysColumnName')]
- Operator: is equal to
- Right side:
true
This checks whether the data for today's date column is filled for each row in your list.
Step 7 — Inside "If no" branch: Take action based on your requirement
If the condition is not met, it means the data is not filled against that person's name for today's date. What you do here depends entirely on your business need.
For example:
- To: Use the email column from your list —
items('Apply_to_each')?['YourEmailColumnInternalName']
- Subject: Based on your need — could be a reminder, escalation, or daily summary
- Body: Customize per your use case — mention the date using
outputs('TodaysDateReadable') so the recipient knows which date is missing
For the email column or any other column you reference inside the loop, use the internal name from your list. You can include outputs('TodaysDateReadable') in your message so the recipient knows which date's data is missing.
Complete flow overview:
Recurrence (daily)
↓
Get items → all rows from SharePoint list
↓
TodaysDateReadable → "19/03/2026"
↓
TodaysColumnName → "OData__x0031_9_x002f_03_x002f_2026"
↓
Apply to each row
├── Condition → items('Apply_to_each')?[outputs('TodaysColumnName')] equals true?
│ ├── Yes → data is filled, do nothing
│ └── No → data not filled, take action per your requirement
Key takeaway:
The whole solution works because SharePoint's internal name encoding for columns with special characters follows a predictable pattern. Once you understand that / = _x002f_ and the first digit gets encoded as _x003{digit}_, you can dynamically build the internal column name from today's date without any manual mappings or metadata lookups.
Things to watch out for:
- Make sure your date format in Step 3 exactly matches your column names — especially leading zeros. If your columns use
6/03/2026 instead of 06/03/2026, adjust the format string accordingly.
- If a column for today's date doesn't exist in the list, the expression will return
null. You may want to handle that in your condition to avoid false triggers.
- If your columns are a different type (like text instead of Yes/No), adjust the condition comparison accordingly — for example, check if the value is empty/null instead of comparing to
true.
-
If this helps resolve your issue, please consider marking the response as Verified so it can help others facing a similar scenario.
If you found this helpful, you can also click “Yes” on “Was this reply helpful?” or give it a Like.