Stop people filling in a Microsoft Form more than once
Turn on "One response per person" in the form settings. It works only when the form is set to "Only people in my organization can respond" or "Specific people in my organization can respond". It does not work for "Anyone can respond", because those answers are anonymous and Forms cannot tell who sent them (per a Microsoft Q&A answer). For outside people, ask for an ID in the form, copy each response into a SharePoint list with Power Automate, and flag any ID that shows up twice. The exact names of menus and buttons may differ from what is written here, because Microsoft changes its screens from time to time.
Why people fill in a form twice
Most repeats are not tricks. A person is not sure the first answer went through, so they send it again. Or they fill it in on the phone, then again on the laptop. Or two people from the same team both answer for the team.
The result is the same: your count is wrong. Ten sign-ups look like twelve, or one person gets two orders.
Before you pick a fix, decide who your respondents are. The right fix depends on that.
- Staff or students who sign in with a work or school account: use the built-in setting.
- Customers, parents, vendors or other outside people: the built-in setting will not work, so use an ID and a list.
Fix 1. Use the built-in setting for signed-in people
Microsoft's page on choosing who can fill out a form gives three options: "Anyone can respond", "Only people in my organization can respond" and "Specific people in my organization can respond". The same page says: "Select One response per person if you don't want your recipients to submit a form or quiz more than once."
One way to start:
- Open your form in Microsoft Forms and open the settings.
- Under who can respond, choose "Only people in my organization can respond" or "Specific people in my organization can respond".
- Turn on "One response per person".
- Open the form link in a second browser profile, signed in as a different test person, and check that it works. Then try a second answer from the same account. It should be blocked.
Microsoft's page says: "If you limited Who can respond to this form to people from your organization, you can check the boxes below that setting to Record name and see who submitted each response, or limit responses to One response per person." You can clear Record name if you want answers to be anonymous. Exact names may differ.
Here is how the three audience options compare, from Microsoft's page on choosing who can fill out a form:
- "Anyone can respond": people inside or outside your organization can answer with the link. One response per person: not available. Records names: no.
- "Only people in my organization can respond": members of your organization can answer, others cannot, even with the link. One response per person: yes. Records names: yes, if "Record name" is checked.
- "Specific people in my organization can respond": only the people you pick can answer. One response per person: yes. Records names: yes, if "Record name" is checked.
The same page says respondents must be from your organization for their names to be recorded, and that you can clear "Record name" if you want answers to be anonymous. The one-response column above follows the Microsoft Q&A answer, since the Support page does not spell it out for "Anyone can respond".
What this fix does not do:
- It does not work for "Anyone can respond". A Microsoft Q&A answer says the built-in setting is limited to internal users and suggests voting for the feature on Microsoft's feedback site.
- It does not stop one person from using two accounts.
- It does not help with a team that should send one answer for the whole team. The form sees people, not teams.
Fix 2. For outside people, ask for an ID and flag repeats
If your form is open to anyone, Forms cannot tell people apart. So you give each person something that tells them apart, and you check it yourself. This method does not block the second answer. It marks it, so a person can review it. That is a different job, and for many teams it is enough.
What you build:
- A form with one question that asks for an ID. Examples: an order number, a member number, an email address, a student number.
- A SharePoint list that receives each response.
- A Power Automate flow that checks whether the ID is already in the list, then saves the response with a review flag.
Step 1. Choose the ID
This is the most important choice. The ID must be something each person has, and nobody else can easily guess.
- A number you send in the invite works well, such as a code in the email or letter.
- An email address is easy to ask for, but a person can type a different one.
- A name is a poor ID. Two different people can share a name.
Make the ID question required in the form. Add a short line under it: "Use the code from your invite." Short instructions cut down on typing mistakes.
Step 2. Build the list
Create a SharePoint list named "Form responses". The Title column comes with every new list and is required by default. Use it for the ID. Rename it to "ID" so it is clear.
Add these columns:
- Name: Single line of text.
- The answers you need from the form: one column for each question.
- Review: Choice, with these choices exactly: "1 First response" and "2 Repeat, review".
The numbers in front of the choices keep your order. A Choice column sorts by its text, so the numbers are there to keep the order you want. Set the default value of Review to "1 First response".
Choose column types before you create the columns. Changing a type later can damage data already in the column. That is our advice, not a Microsoft rule.
Step 3. Start the flow
Go to Power Automate and create a cloud flow. Microsoft's connector page for Forms lists the trigger "When a new response is submitted". It asks for a Form Id, so pick your form. The same page says this trigger returns a Response Id, and you use it with the "Get response details" action to fetch the answers.
- Add the trigger "When a new response is submitted" and pick your form.
- Add the action "Get response details". Use the same form and the Response Id from the trigger.
The Forms connector page says the connector only works with organizational accounts. That means the person who builds the flow needs a work or school account. Your respondents can still be outside people if the form allows it.
Step 4. Look for the same ID in the list
Add the SharePoint action "Get items". Pick your site and the "Form responses" list.
Two settings matter:
- Filter Query: the SharePoint connector page says this takes an ODATA filter, such as a column name, "eq", and a value in single quotes. For the ID, enter Title eq 'the ID answer', where you drop the ID answer in from the dynamic content list. Title is the internal name of the column, even though you renamed it. Internal names are used in filter queries.
- Top Count: set it to 1. You only need to know if one match exists. The default for Get items can return only 100 rows, so a Top Count of 1 is also the safe way to keep the step small. Pagination can stay off for this check, because one row is enough to answer the question.
Single quotes in an ID can break the filter. If your IDs can contain a single quote, avoid that kind of ID. That is our advice, not a Microsoft rule.
Step 5. Save the response with a flag
Add a Condition after "Get items". Check whether the list of items from "Get items" is empty.
- If it is empty, this ID is new. Add SharePoint "Create item". Fill in the ID, name and answers from "Get response details". Set Review to "1 First response".
- If it is not empty, this ID was seen before. Add SharePoint "Create item" with the same fields. Set Review to "2 Repeat, review".
You can save the repeat as a new row instead of dropping it. That way nobody loses an answer, and a person decides what to do. Maybe the second answer fixes a mistake in the first.
Map each field one to one. Make the Choice words in the flow match the Choice words in the list exactly, including the number at the front.
Step 6. Test it
- Submit the form once with a test ID. A row should appear with "1 First response".
- Submit again with the same ID. A second row should appear with "2 Repeat, review".
- Submit with a new ID. It should be "1 First response".
- If a row does not appear, open the flow in Power Automate and look at its run history. Select a run to see which step stopped.
Delete the test rows when you are done.
Step 7. Review the repeats
Make a view called "Repeats" that shows only rows where Review is "2 Repeat, review". Microsoft says filters that use [Today] or [Me] need the classic view editor (Edit current view, then Filters). I also use the classic view editor for blank and "is not equal to" filters, and that part is our advice, not a Microsoft rule. For this view, a plain filter on the Review column is enough.
Pick one person to check the view each day. Decide the rule in advance: keep the first, keep the latest, or ask the person.
Why not turn on Enforce unique values?
A SharePoint column has an "Enforce unique values" setting. It would refuse a second row with the same ID. That is an option if you want a hard block in the list. Know what it does before you use it.
An archived Microsoft page, written for SharePoint Foundation 2010, says:
- The column must be able to be indexed. A warning appears if it is not, and you can choose to index it automatically.
- Single line of text, choice (not multiple choice), number, date and time, and Title can be used. Multiple lines of text and calculated columns cannot.
- The comparison is not case sensitive.
- If the column already holds repeated values, the setting fails.
Screens in Microsoft 365 may differ from that page, so test on a small copy of the list. Also note that with this setting on, the flow cannot save the repeat row. The "Create item" action fails, and the person who filled in the form sees nothing. That is why this guide saves the row with a flag. If you want the hard block, remove the Review choice and let the failed run tell you about the repeat.
Can I cap the number of responses?
Not with a built-in setting. A Microsoft Q&A answer says: "there is no setting or feature in the Microsoft Forms to restrict the form responses to only first 50 respondents." That answer suggests a custom flow that turns off Accept responses. But the Forms connector page lists only two actions, Get form details and Get response details, and neither one changes form settings. The safer plan is a flow that alerts you at your number, and then you close the form. For the full steps, see "Close a Microsoft Form after a set number of responses".
What to avoid
- Do not use "One response per person" and expect it to work on a form open to anyone.
- Do not use a name as the ID.
- Do not delete repeat rows without asking. The second answer may be the correct one.
- Do not leave the ID question optional.
- Do not rename choices in the list without changing the flow. The Review text in the flow must match the list exactly.
- Do not share the list wider than you share the form results. Views are not security.
Honest limits
This method catches the same ID twice. It does not catch one person using two IDs, or one ID shared with a friend. It also does not stop the second answer from going to Forms. The row in Forms results still exists. The list is your clean copy.
The flow runs under the account that built it. If the account that owns the flow is closed, the repeat check stops. Our advice, not a Microsoft rule: add a co-owner while the builder is still on the team.
Microsoft lists a limit on the Forms connector of 300 calls per connection every 60 seconds. A small team will not reach it.
If you collect sensitive answers, check with your admin first about where that data can be stored.
For the base setup of copying Forms answers into a list, see "Save Microsoft Forms answers to a SharePoint list". For duplicate rows inside a spreadsheet, see "Stop duplicate entries in a shared spreadsheet".
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 Microsoft Forms limit one response per person?
Yes, for people in your organization. Choose "Only people in my organization can respond" or "Specific people in my organization can respond", then turn on "One response per person". Exact names may differ.
Why is "One response per person" missing or grayed out?
A Microsoft Q&A answer says it is not available when the form is set to "Anyone can respond". Change who can respond to your organization, then look again.
Can I stop outside people from answering twice?
Not with the built-in setting. One way to start is to ask for an ID in the form and flag repeat IDs in a SharePoint list.
Can a form with one response per person stay anonymous?
Microsoft's page says you can clear "Record name" for anonymous answers. A form open to anyone cannot limit one response per person.
Can I limit the number of responses to a form?
Not with a built-in setting, per a Microsoft Q&A answer. Use a Power Automate flow that alerts you at your number, then turn off "Accept responses" yourself.
Sources
- Choose who can fill out a form or quiz (Microsoft Support)
- Limiting Microsoft Form to One Submission per Person (Microsoft Q&A)
- Microsoft Forms connector reference (Microsoft Learn)
- SharePoint connector reference, Get items and Create item (Microsoft Learn)
- Enforcing Uniqueness in Column Values, archived for SharePoint Foundation 2010 (Microsoft Learn)
- Microsoft Q&A, How can I limit the number of forms responses