Skip to content
Browse Microsoft Forms tutorials

Microsoft Forms is good at collecting answers, but a SharePoint list is often a better home for them. Once responses are in a list, you can report on them in Power BI, use them in a Power App, or add other automation.

This walkthrough builds a three-step flow: a trigger that starts when someone submits the form, an action that reads the answers, and an action that creates the list item. The example is an employee satisfaction survey, but the same pattern works for intake and request forms.

Before you begin

Have these ready:

1. Create the SharePoint list

Create one column for each answer you want to keep. You do not need a column for every question in the form.

Include a couple of keywords from each question in the column name. The flow’s dynamic content search uses the question wording, so matching keywords make the mapping in Step 6 much faster.

Form questionExample columnColumn type
How long have you been in the organization?Length Present OrgSingle line of text
What is your job role?Job RoleSingle line of text
Overall, how satisfied are you…?How SatisfiedSingle line of text
On a scale of 0-10, how likely are you to recommend…?Likely to RecommendSingle line of text
Same question, stored as a numberLikely to Recommend NumberNumber
I am enabled to support…Enabled to SupportSingle line of text
I have adequate tools…Adequate ToolsSingle line of text
I have adequate training…Adequate TrainingSingle line of text
Other feedbackOther FeedbackMultiple lines of text

Choose the type based on how you will use the answer:

  • Number: use this when you plan to chart or calculate the value, for example in Power BI. Map only answers that are always numeric to a Number column. The example keeps the same answer in both a text column and a Number column so you can compare the two. If a numeric question is optional, or on a branch some people skip, see Step 6.
  • Multiple lines of text: use this for open-ended answers. A Single line of text column holds 255 characters, while Multiple lines of text holds up to 63,999.
  • Single line of text: a good fit for short choice answers.

By default, everyone who can open the list can read every stored answer, because list items inherit the list’s permissions. If the answers are sensitive, limit who can open the list.

Edit column pane shows Other Feedback set to Multiple lines of text

2. Decide where the form will live

The answer changes how you select the form in Step 3.

Where the form isHow to select it in the flowThings to plan for
My formsChoose it from the Form Id listDecide who will manage the form if the owner is no longer available
A Microsoft 365 group or teamChoose Enter custom value and paste its Form IdGroup forms may not appear in the dropdown, but Microsoft documents this manual method

A form that belongs to a group can work well for long-term ownership, because moving a form to a group gives members full editing capabilities.

Forms home page shows My forms above the My groups section

If you would rather have a personal copy of a group form, open the group’s forms, select … on the form, and select Copy. Then check My forms for the new copy.

Group forms page with the form's menu open on Copy

A copy is a new form. Only the questions, format, and layout are copied, and existing responses do not carry over. Send respondents the link from the copy, because the flow only watches the form you select.

3. Add the Forms trigger

  1. In Power Automate, create an automated cloud flow from blank, then choose Add a trigger.
  2. Search for Microsoft Forms and select When a new response is submitted.
  3. In Form Id, select your form.
  4. If your form belongs to a group:
    1. Open the form for editing and look at the browser’s address bar.
    2. Copy only the part after FormId=.
    3. In Form Id, select Enter custom value and paste the value.

Form Id dropdown lists forms and an Enter custom value option

The connector’s trigger list may show a second trigger with a similar name marked [DEPRECATED]. Use the one without that label.

4. Read the response

The trigger only tells the flow that a response exists. A second action retrieves the answers.

  1. Select + under the trigger, then Add an action.
  2. Search for Microsoft Forms and select Get response details. Do not choose Get form details, which returns information about the form itself, such as its title and status.
  3. In Form Id, select the same form or paste the same custom value.
  4. Click in Response Id and select Response Id from the trigger’s dynamic content.

Get response details uses the survey form and the Response Id token

5. Add the SharePoint action

  1. Select +, then Add an action.
  2. Search for SharePoint and select Create item.
  3. In Site Address, select your site. If it is not listed, select Enter custom value and paste the site URL.
  4. In List Name, select your list.
  5. Open Advanced parameters and select Show all so that every column is available.

6. Map each column to its answer

For each column, click in the field and open dynamic content. Search for a keyword from the matching question, then select the answer from Get response details.

Create item fields filled with Microsoft Forms answer tokens under the three-step flow

To store an answer in both a text and a Number column, map the text field first. A Number field’s dynamic content may list only number values, such as Response Id, and not the form’s answers. To add the answer there, copy its token from the text field and paste it into the Number field, or enter it through the expression editor (fx), whose Dynamic content tab lists the form’s answers, as with the expression below.

A question the respondent didn’t answer comes through empty. That includes optional questions and questions on a branch they didn’t take. In the example survey, individual contributors never see the manager questions, so Enabled to Support, Adequate Tools, and Adequate Training stay blank for them. A blank text column is fine, but a Number column may reject an empty value and fail the run. If a numeric question can be skipped, enter this expression in its field instead of the token:

if(empty(<answer>), null, <answer>)

Replace each <answer> with the question’s answer: in the expression editor, place the cursor, open the Dynamic content tab, and select the answer from Get response details.

Check the Title field before moving on:

  • If Title has no asterisk, as in this example, it is optional and you can leave it blank.
  • If Title shows an asterisk, it is required. Map a value such as a short answer, or make the column optional in the list settings.

The item’s Created value records when the flow added the item, not when the person submitted the form. The two are usually close, but a delayed or resubmitted run adds the item later. If the original submission time matters, add a Date and time column with Include Time on, and map Submission time from Get response details if it’s listed in dynamic content.

7. Save and test the flow

  1. Rename the flow, for example Satisfaction survey results, then select Save.

  2. Open the form and select Collect responses.

  3. Copy the link, open it, and submit a test response.

    Form toolbar with Collect responses selected

  4. Refresh the SharePoint list and confirm that a new item appears with each answer in the correct column.

  5. If the form branches, submit one test response for each path, for example one as an individual contributor and one as a manager. Check that the run succeeds and the skipped answers are blank.

SharePoint list shows one new item with the submitted answers, including the value 4 in both the text and number columns

The flow starts with new submissions, so responses submitted before the flow was on are not added to the list.

Test again whenever you change the form. Each answer token belongs to a question in the form the flow uses. If you delete and re-add a question, or switch the flow to a copy of the form, select the form again in both Forms steps, check every field in Create item, and submit a new test response.

8. Optional: record the response and prevent duplicates

The flow so far adds one item per run. If you resubmit a run, for example after fixing a failed step, it processes the same response again and adds a second item. These optional steps record which response each item came from, and skip a response that’s already in the list.

  1. In the list, add two Single line of text columns named FormID and ResponseID, without spaces, so that the filter below can use those names. You can change the display names afterwards.

  2. In Create item, set FormID to your Form Id value, the same one the trigger uses. If you selected the form from the list, copy the value after FormId= from the form’s address, as in Step 3. Set ResponseID to Response Id from the trigger. Get response details needs both values to find a response, so together they identify it.

  3. Between Get response details and Create item, add the SharePoint Get items action for the same site and list. Under Advanced parameters, set Filter Query to the line below, replacing <Response Id> with the trigger’s Response Id token and <Form Id> with your Form Id. Keep the single quotation marks. Set Top Count to 1.

    ResponseID eq '<Response Id>' and FormID eq '<Form Id>'
  4. Add a Condition. In the first box, enter the expression length(body('Get_items')?['value']), choose is equal to, and enter 0. If you renamed Get items, use its new name, with underscores for spaces.

  5. Move Create item into the True branch, and leave False empty.

Now a resubmitted run finds the existing item and adds nothing. The check can’t stop two runs for the same response that start at the same moment, so it reduces duplicates rather than ruling them out. If the list may grow past 5,000 items, index the ResponseID column so that the filter keeps working within SharePoint’s list view threshold.

Troubleshooting

SymptomLikely causeWhat to do
The form is not in the Form Id listIt belongs to a groupUse Enter custom value with the value after FormId=, as in Step 3
The flow does not runThe flow is watching a different form, such as the original instead of a copyConfirm that the link you submitted belongs to the form selected in the trigger
Dynamic content shows only Response IdThe field is a Number column, whose dynamic content can leave out the form’s answers, or Get response details uses a different formFor a Number column, paste the answer’s token from a text field, or select the answer in the expression editor’s Dynamic content tab. Otherwise, confirm Get response details uses the same form
The flow fails on the Number columnThe answer is not numeric, or the question was skippedMap that answer to a text column, use a form question that only returns numbers, or use the empty-value expression in Step 6
A column is blank after you changed the formIts token belongs to a question that was removed or replacedSelect the answer again in Create item, then submit a test response
The same response appears twiceA run was resubmitted, or ran again for that responseAdd the duplicate check in Step 8
Long answers are cut off or rejectedThe column is Single line of textChange the column to Multiple lines of text
Earlier responses are missingThey were submitted before the flow was on, or to another copy of the formOnly new responses to the selected form start the flow. Copied forms do not include earlier responses
You need uploaded files in the listFile upload questions need extra stepsThis walkthrough covers text and number answers. Plan separate steps for attachments

Where to go next

With responses in a list, you can connect the list to Power BI, use it as a data source in a Power App, or extend the flow with an email notification after Create item.

Companion video

Video: Microsoft Forms to SharePoint with Power Automate (The Right Way)

If the player is blocked on your network, open the video on YouTube.

Need help applying this to your own setup? Read about consulting.