Flow cannot set a Person column: user could not be found
Short answer: a SharePoint Person column does not take a plain name. In "Update item", fill the Person field with the person's email through the SharePoint action "Resolve person", then use its result. Microsoft says Resolve person returns "a single matching user value so it can be assigned to a column of type person", and that it errors if there are no matches or multiple matches. A second way is to build a claim from the email: the prefix i:0#.f|membership| followed by the email. Microsoft's connector reference does not list that prefix, so test it with one person first.
Menu and action names in Microsoft 365 change from time to time. The exact names may differ on your screen.
What this looks like
You build a flow in https://make.powerautomate.com. It reads a name or an email from somewhere else, such as an Excel file, a form or a text column. It then creates or updates a SharePoint list item and puts that value in a Person column, for example "Owner". Most rows work. A few rows stop the flow with this message:
"The specified user could not be found"
That is the error text in a Microsoft Q&A question on this problem. The person who asked had tried the email addresses and the names as stored in a database. Neither worked for four people.
What a claim is
A claim is a short text string that tells SharePoint which account you mean. A Microsoft Q&A answer to that question says a SharePoint Person column expects a claim, not a plain email address. The answer gives this pattern: the prefix i:0#.f|membership| followed by the person's email.
Microsoft's pages do not describe the claim format in the connector reference. The Q&A answers are the source for the pattern on this page. They are community answers on a Microsoft site, so treat the pattern as a starting point and test it in your own tenant.
The Microsoft SharePoint connector page also lists a "Claims" field on a user value, with the description "user claims". The same list holds the display name, the email, a picture, a department and a job title. This shows that a person value in SharePoint carries more than a name.
Before you start
Make sure you can answer three questions.
- Which column is the Person column? Use the exact column name.
- Does the column allow one person or several? The fix is different for each.
- Where does the value come from? A list of emails split by a semicolon is a different job than one email per row.
Our advice, not a Microsoft rule: look at the rows that fail first. Check whether the email is spelled the same as the account in your directory. Check for extra spaces. A hidden space at the end of a cell is easy to miss.
The example list
Use a small test list so you can try each fix. Call it "Documentation requests". Besides Title, it needs three columns:
- Owner: Person. Allow one person for the first test.
- Owner email: Single line of text. The flow reads the email from here.
- Owners: Single line of text. For the several-people test, put two emails in one cell with a semicolon between them.
Fill Title with any short text. If Title is required in your list, every Create item must fill it.
Fix 1. Build the claim from the email
A Microsoft Q&A answer built the claim from the email with the Select action, shown in the next section. The asker later wrote: "Problem solved perfectly!" For one email per row, the same idea fits in one expression.
For one person per item:
- Open your flow at https://make.powerautomate.com and edit it.
- Find the SharePoint action "Create item" or "Update item". The connector page lists both. "Update item" asks for a site address, a list name, an item Id and the changed values.
- Click the Person field.
- Open the Expression tab, not the dynamic content tab.
- Enter an expression that joins the prefix and the email, in this form: concat('i:0#.f|membership|', triggerOutputs()?['body/OwnerEmail']).
- Replace OwnerEmail with the internal name of your email column. The internal name can differ from the display name.
- Save and test with one item.
Our advice, not a Microsoft rule: if your people-picker field shows a different label for the claim box, such as the column name with the word "Claims" after it, use that box. The exact names may differ.
Fix 1 for several people at once
The Q&A question was about a cell that held several owners separated by a semicolon. The accepted answer used the Data Operation action "Select" and gave these two settings. In the From box it split the cell on the semicolon, using the split function with the semicolon as the separator. In the Map box it put the prefix i:0#.f|membership| followed by the current item value.
The result is a list of claims, one per person. You then feed that list to the Person column, which must be set to allow more than one person.
Steps:
- Add the action "Select" before your Create item or Update item action.
- In From, use the split function on the cell that holds the emails. The separator is the semicolon.
- In Map, build each claim from the prefix and the current item.
- In the SharePoint action, switch the Person field to use the whole list from Select. The field may offer a small icon for "enter entire array". The exact names may differ.
- Test with a row that has two people.
The same Q&A thread shows another answer that adds only the prefix in front of the Owner field in Create item. The person who asked reported that this made the flow slow on two rows, and the thread does not say why. The answer that worked for that asker was the Select method.
Fix 2. Use the Resolve person action
Microsoft's connector page lists a SharePoint action named "Resolve person". Here is the text from that page:
"Returns a single matching user value so it can be assigned to a column of type person. If there are no matches, or multiple matches, this action will error out."
The page lists these inputs: Site Address, List or Library, Column, and "Email or name", with the note "Use the email address, or the full name of the user."
Steps:
- Add "Resolve person" before your Create item or Update item action.
- Set the Site Address and the list.
- In Column, pick your Person column.
- In "Email or name", use your email value.
- In the Person field of Create item or Update item, use the result of Resolve person.
The action returns a user value that carries a claims field, a display name and an email, as the connector page lists. Using it means you do not type the prefix yourself.
Two cautions from Microsoft's own sentence. First, if there is no match, the action stops with an error. Second, if there are several matches, it also stops with an error. Search by email, not by name. Our advice, not a Microsoft rule: an email is less likely than a name to match two people.
Copy-ready expressions
Our advice, not a Microsoft rule: replace OwnerEmail with the internal name of your column.
- Claim from one email: concat('i:0#.f|membership|', triggerOutputs()?['body/OwnerEmail'])
- Claims from a semicolon list, in the Select action. From: split(items('Apply_to_each')?['Owners'], ';') and Map: i:0#.f|membership|@{item()}
- Resolve person: set "Email or name" to the email, then pick the result of Resolve person in the Person field.
Clear a Person column or set several people
This guide does not give a method for clearing a Person column. Test any approach on one row, then open the list to see the result.
For several people, the column must allow more than one person. Two sourced routes: the Select method above, which builds one claim per person, or the HTTP route below with a list of Ids.
Which error means which cause
- "The specified user could not be found": the text from a Microsoft Q&A question. The thread does not give the cause. Our advice, not a Microsoft rule: check the email spelling and spaces.
- Resolve person stops with an error: Microsoft says this happens when there are no matches, or multiple matches.
- Flow runs slowly after you add only the prefix in Create item: a Q&A asker reported it, and the thread does not say why. The Select method worked for that asker.
Which fix to pick
- One person per row, email in a column: Fix 1 or Fix 2 both fit. Fix 2 has one more action but no prefix to type.
- A cell with several emails: Fix 1 with Select.
- Names only, no emails: Fix 2, with a full name. Expect errors for any name that matches two people.
- A guest from another company: Microsoft's pages do not describe the claim for guests in these sources. Use Fix 2 and test. If the person cannot be found at all, see "SharePoint people picker cannot find a user or guest".
A second route for hard cases
Another Microsoft Q&A answer shows a different route. It uses the action "Send an HTTP request to SharePoint" and sets the people field by the user or group Id. The answer says: "To update a people field (single or multiple) in Power Automate, you can use Send an HTTP request to SharePoint REST API by setting field with user or group Id."
The answer gives this format. For a field named Editor, a single person is 'EditorId' : 1, and several people are 'EditorId' : { 'results': [1, 2, 3] }, where the numbers are the Ids of users or groups. Its example request body sets "EditorId": 17, and its headers include "IF-MATCH": "*" and "X-HTTP-Method": "MERGE". This is more work and needs the Id of each person in the site. Our advice, not a Microsoft rule: try Fix 1 or Fix 2 first, and keep this route for rows those cannot handle.
The connector page also warns that the HTTP action "may execute any SharePoint REST API you have access to", so proceed with caution.
Check your work
- Add one test row for each case: one person, several people, a person who is a guest.
- Run the flow. Open the run history at https://make.powerautomate.com and look at each step.
- Open the list. Check that the Person column shows a name and a photo, not blank.
- Try a row with an email that does not exist. The flow should fail on that row in a way you can see, or skip it on purpose.
- Check a row where the Person cell is empty.
What to avoid
- Do not type a name into a Person field by hand and expect it to match. Names are not unique.
- Do not skip the test row. Run one before you run a list of 500.
- Do not rely on a green run. Open the list and look at the Person column.
- Do not paste emails with extra spaces. Trim them first.
- Do not use "When an item is created or modified" and then update the same item in the flow without a guard. Your own step can start the flow again.
- Do not use the HTTP action just because it is flexible. It can run any SharePoint call you have access to.
- Do not count on views for privacy. Views are not security.
Related guides
If you also want the email from a Person column, see "Show or copy the email from a SharePoint Person column".
Honest limits
The claim pattern on this page comes from community answers on a Microsoft site. Microsoft's pages do not describe the pattern in the connector reference. It may not fit every account type, and a different identity setup may use a different prefix. Resolve person is the documented action, so use it when the claim does not work. Also, a flow cannot create a person who does not exist in your directory.
When to get help
You can build all of this yourself in Microsoft 365. If you would rather have it built and tested for your team, I do that. A tracker like this is a fixed price: $5,000 for one, built in 2 weeks. See "What a SharePoint tracker costs to build". Bring one example of the problem to a free call.
I am Al Davies. I run 250 High Street LLC and build SharePoint trackers and Power Automate flows for operations teams. I work remotely. The first call is free, and I will not try to sell you anything.
See trackers I built: Tools I built
FAQ
Can I fill a Person column with an email?
Yes, through Resolve person, which accepts "the email address, or the full name of the user", or through a claim built from the email.
How do I update a Person column with an HTTP request?
A Microsoft Q&A answer uses "Send an HTTP request to SharePoint" and sets the field name plus Id to the user Id, such as 'EditorId' : 1.
Can I set a Person column that allows several people?
Yes. One Q&A answer sets 'EditorId' : { 'results': [1, 2, 3] } by HTTP, and another splits a semicolon list with Select and builds one claim per entry.
Is the claim prefix an official Microsoft format?
Microsoft's connector reference does not describe it. It appears in Microsoft Q&A answers, so test it, or use Resolve person, which the connector page documents.
What does Resolve person do when two people match?
Microsoft's page says that if there are no matches, or multiple matches, the action will error out. An email is the safer input, which is our advice, not a Microsoft rule.
Sources
- Microsoft Q&A, Specific user can not be found while running PowerAutomate on Sharepoint
- Microsoft Q&A, Set SharePoint group to people picker column in Power Automate using REST API
- Microsoft Learn, SharePoint connector reference