Back to module: Meeting Autopilot
LiveMeeting Autopilot

Column Name Monitor

Hourly SharePoint schema watchdog that catches renamed columns before they silently break every flow.

Use case

Someone renames a SharePoint column, and three flows break with no error anyone notices for a week. This flow calls the SharePoint REST API every hour, compares live display names against an expected map, and posts a diff table to Teams the moment they drift.

Who uses it

SharePoint administrators and anyone maintaining flows in production.

Real scenario

At 14:00 an admin renames 'DueDate' to 'Deadline' in the UI. At 15:00 Teams shows a diff table: Internal Name DueDate | Was 'DueDate' | Now 'Deadline' — and the audit item is already in the log list.

Time saved

Before

Hours of debugging per incident, discovered days later

After

Detected within the hour, with the exact field named

Time saved

Hours of debugging per incident

How it works

An hourly recurrence sends an HTTP request to SharePoint at _api/web/lists/getbytitle('List')/fields. A Compose holds the ExpectedColumns JSON map of internal name to display name. A loop over the returned fields compares each current title with the expected value, and any mismatch is appended to a diff table posted to Teams and written to a SharePoint audit log.

Step-by-step build

  1. 1

    Create a Scheduled cloud flow with a Recurrence trigger, Frequency Hour, Interval 1.

  2. 2

    Add Data Operation → Compose named 'ExpectedColumns' with a JSON object mapping internal names to expected display names, e.g. { "DueDate": "DueDate", "SAL": "SAL", "OwnerName": "Owner" }.

  3. 3

    Add Initialize variable 'DiffRows' (String) at top level.

  4. 4

    Add SharePoint → Send an HTTP request to SharePoint. Method GET, Uri: _api/web/lists/getbytitle('YourList')/fields?$select=InternalName,Title&$filter=Hidden eq false, Headers: Accept application/json;odata=nometadata.

  5. 5

    Add Apply to each over body('Send_an_HTTP_request_to_SharePoint')['value'].

  6. 6

    Inside the loop add a Condition: contains(outputs('ExpectedColumns'), item()?['InternalName']) is true AND not equals of outputs('ExpectedColumns')[item()?['InternalName']] and item()?['Title'].

  7. 7

    In the If yes branch append a <tr> to DiffRows with the internal name, the expected value ('Was') and item()?['Title'] ('Now').

  8. 8

    After the loop add a Condition on empty(variables('DiffRows')); if not empty, post a Teams message with the diff table 'Internal Name | Was | Now' and create an item in the SharePoint 'SchemaAuditLog' list recording the timestamp and the diff.

  9. 9

    If nothing changed, Terminate as Succeeded so the run history stays readable.

  10. 10

    Keep the ExpectedColumns map in source control alongside your flow documentation and update it whenever a rename is intentional.

Copilot prompt

Paste this into Power Automate Copilot to scaffold the flow.

Copilot
Create a scheduled cloud flow that runs every hour. Compose a JSON object ExpectedColumns mapping SharePoint internal column names to their expected display names, initialize a string variable DiffRows, then use 'Send an HTTP request to SharePoint' with a GET to _api/web/lists/getbytitle('YourList')/fields selecting InternalName and Title. Loop the returned fields and, when the current Title differs from the expected display name, append a diff row. If any differences exist, post a Teams table with Internal Name, Was and Now, and log the change to a SharePoint audit list.

Screenshots

Captures are added as each step is published.

Trigger configuration
Main action pane
Expression editor
Result in Microsoft 365

Explore more flows