System Explainer ·

Filling in a whole Microsoft Form at once, with a pre-filled link

For someone who uses a screen reader, a long Microsoft Form is slow going. A common way to cope is to draft the answers with Copilot, then paste them into the form one question at a time: move to Copilot, copy an answer, move back, find the right box, paste, check it landed. It takes a long time, and it's easy to put an answer in the wrong place. I wanted a way to load every answer at once, so the only job left is to check them and press Submit.

Why not an API?

Microsoft Forms has no official API for submitting responses. Microsoft Graph doesn't cover it, and the Power Automate Forms connector only reads responses. The form page itself talks to internal endpoints, but they're undocumented and can change without warning. Submitting on someone's behalf would also skip the step that matters most: them checking the answers.

Pre-filled links

Forms has a built-in feature for this. The form's owner opens the "..." menu, chooses Get Pre-filled URL, switches on Enable pre-filled answers, fills in some answers and copies the link. Anyone who opens that link sees the form with those answers already in place. The form never submits itself.

The Get Pre-filled URL panel in Microsoft Forms. Enable pre-filled answers is switched on at the top, and a dialog titled Copy Prefilled Link to Share shows the generated link with a Copy link button.
The owner switches on pre-filled answers, then copies the link.

What's in the link

The link is the normal form address with one extra part per question: the question's ID, an equals sign, and the answer. Question IDs are a letter r followed by 32 characters. One sample link gives you every ID, and after that you can write a link with any answers you like.

https://forms.cloud.microsoft/Pages/ResponsePage.aspx
  ?id=FORM-ID
  &r14e5513e…="No"
  &rea29e5f7…=Shorter queues at the bar…

Each question type writes its answer differently. I made a test form with one of each common type and decoded its link:

Question typeAnswerIn the link
TextShorter queues…The text as it is
Number33
Choice, pick one (and drop-down)No"No"
Choice, pick severalRadio, Flyer"[\"Radio\",\"Flyer\"]"
"Other" with typed textLocal newspaperAdded to the same list
Date17/10/2026"2026-10-17"
Rating (stars)55
Net Promoter Score99
Likert gridA column per rowEach row's ID with the column's number and hidden ID

Writing a new link

With the question IDs from the sample, I wrote a new link with different answers for all 14 questions and opened it in a private window. Thirteen filled in correctly, including every row of the grid, the date, the stars and the Net Promoter Score.

The Entertainment Event Feedback Survey opened from the pre-filled link. Every question has an answer selected or typed, including the grid, the date 17/10/2026, five stars and a score of 9, except question 6, where no option is selected.
Thirteen of fourteen answers filled in. Question 6 stayed blank.

The space you can't see

Question 6 stayed blank. While making the test form I'd left a space at the start of one option and at the end of another. On screen, all three options look normal. In the link from Get Pre-filled URL, they don't:

Option on screenHow Forms stored it
Too shortToo short
Just right%C2%A0Just right: a non-breaking space at the start
Too longToo long%C2%A0: a non-breaking space at the end

Forms saved each stray space as a non-breaking space, a different character that looks exactly like a normal one. A pre-filled answer has to match the option exactly, so my link's plain "Just right" matched nothing. I tested "Too long" three ways:

Question 6, How would you describe the length of the event, with the options Too short, Just right and Too long. None is selected.
Question 6 from the link that sent a plain "Just right". Nothing is selected.
Question 6 with Too long selected. Just right sits very slightly further right than the other two options.
The link with the non-breaking space fills in "Too long". Look closely and "Just right" sits a fraction to the right: that's its hidden leading space.
Why it matters: when an answer doesn't match, Forms doesn't show an error. The question is just left blank. With a screen reader, a blank question is easy to miss, so whoever submits should check every answer, every time.

Things to know before you use it

Question 9 filled with a long test answer of 41 numbered sentences, starting with START OF ANSWER and ending with END OF ANSWER.
A 3,917-character answer from a 5,739-character link. The last line, END OF ANSWER, shows nothing was cut off.

A helper for writing the links

Writing these links by hand isn't practical, so I made a small tool with two modes. In basic mode, you paste the sample link and your notes, and the tool gives you a prompt for Copilot or another AI. The AI writes the answers and the link. You paste its reply back, and the tool checks every answer against the form, fixes hidden-space mistakes, and reads the answers back to you question by question. Advanced mode is for typing answers yourself or loading them from a file. It opens on one of four made-up example forms, so you can see how it works without touching a real one.

Try the Microsoft Forms pre-filled link builder. It opens on an example form, so you can try every step before using your own.

Useful Microsoft pages

← Back to FlowNarrate