“I’m bored from manually creating columns in a SharePoint list, can I somehow automate it and create a column using Power Automate flow?”
Creating SharePoint columns doesn’t belong among the most entertaining tasks, especially if there’re multiple columns or multiple lists where you must create them. It can so easily turn into lots of annoying mouse clicks to do that. But do you have to do it manually? Wouldn’t it be much better if you could automate the task?
Easier approach: Get the field XML schema from SharePoint
Since the time I originally published this article I found an easier way to get the column schema as explained here.
Complicated approach: Create the field XML schema
Before you can create a new field, you must compose the field information, e.g. name, what type of field it is, etc. I found this blog post as a good reference for the XML for each of the column types, even though it needs a small change to be used in Power Automate flow. Let’s take an example, a single line of text column:
<Field
Type="Text"
DisplayName="Document Title English"
StaticName="TitleEN"
Name="TitleEN">
Description="Document Title in English"
Required="TRUE"
EnforceUniqueValues="FALSE"
Indexed="FALSE"
MaxLength="255"
Group="Demo"
ID="{161ef8f6-e73c-4c56-8a5f-c6a8900f2fc8}"
</Field>
You can see that there’re multiple names for the column. There’s the DisplayName, StaticName and Name. While the StaticName and Name are intended to be that column’s internal name, it’ll actually use the DisplayName. You don’t want that as such internal name would be terrible to work with. Therefore, use the same internal name for all the names – no spaces, no special characters, e.g.
<Field
Type="Text"
DisplayName="TitleEN"
StaticName="TitleEN"
Name="TitleEN">
Description="Document Title in English"
Required="TRUE"
EnforceUniqueValues="FALSE"
Indexed="FALSE"
MaxLength="255"
Group="Demo"
ID="{161ef8f6-e73c-4c56-8a5f-c6a8900f2fc8}"
</Field>
Use the XML schema in an HTTP request
You defined the column, now you can create it with an HTTP request to SharePoint.
Method: POST
Uri: _api/web/lists/getByTitle('<listName>')/fields/createfieldasxml
Headers:
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose"
}
Body:
{
'parameters': {
'__metadata': {
'type': 'SP.XmlSchemaFieldCreationInformation'
},
'SchemaXml': '<columnXmlDefinition>'
}
}
Note: <…> are placeholders, replace them including the < and >.

This request will take the column configuration from the XML and use it to create the column in the SharePoint list. But since you had to use the internal name in the XML definition, you should use one more step to rename the column (unless you’re fine keeping the internal name).
Change the column display name
The field can be renamed with another HTTP request to SharePoint. You’ll need the list name, the column internal name (from the XML definition) and the new name.
Method: PATCH
Uri: _api/web/lists/getByTitle('<listName>')/fields/getbytitle('<columnInternalName>')
Headers:
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"IF-MATCH": "*"
}
Body:
{
'__metadata': {
'type': 'SP.FieldText'
},
'Title': '<newColumnName>'
}
Note: <…> are placeholders, replace them including the < and >.

The request will find the column and change its name to the new value.
Summary
To create a new SharePoint column using Power Automate flow you’ll need three things. Firstly, the XML for the new column with all its settings. Secondly, an HTTP request that’ll take this XML and create the new column according to these instructions. And thirdly, another HTTP request to rename the column to a more user friendly display name.
You could add also one HTTP request in between to add the column to a view.
Hi,
Thanks for this solution as it is exactly I was looking for. Just I’m struggle with the Patch method as it returns a 501 error Not implemented.
I have search on the web for any specific solution for this issue, but I have not find any.
Any idea on this ?
Thanks for your feedback,
Jérémie
Hello Coste,
I’d double check the request if it’s exactly as in the article, Not Implemented sounds like an attempt to use some function that doesn’t exist.
Hello Tom!
Could the same steps to change the column display name also apply to the column description?
I just had a thought about using a flow to update the Description to act as a dynamic “input-tip” as to the next expected value in a sequence.
Thank you for all you do!
-Micah
Hello Micah,
you can, just use ‘Description’ instead of ‘Title’ in the HTTP request body.
Hi Tom,
Thanks for this. Works perfectly.
Once the column is created however it defaults as a hidden field. Is there any way for it to be created as an un-hidden column?
– Kieran
Hello Kieran,
it might be something in the list schema, try to get the schema from an existing SP list as explained here: https://tomriha.com/get-schema-for-a-new-sharepoint-column-with-power-automate/