This is the part your users actually see and touch. We’re building a simple form where they type in what they need and click Submit. Behind the scenes, everything we built in Parts 1-3 springs into action.
I’ll walk you through every single click. If you’ve never built a Power App before, that’s totally fine — just follow along.
Part A: Create the App
Step 1: Open your web browser and go to make.powerapps.com
Step 2: Sign in with your work account if prompted
Step 3: On the left side menu, click “Create”
Step 4: Look for the option “Blank app” and click it
Step 5: Choose “Blank canvas app”
Step 6: A box pops up. Type a name: “Site Request Form”
Step 7: Under “Format,” choose “Tablet”
Step 8: Click “Create”
You’ll now see a blank canvas. This is where we build the form.
Part B: Connect to Your Data
Step 1: On the left side, find the icon that looks like a database cylinder (called “Data”)
Step 2: Click “Add data”
Step 3: In the search box, type “SharePoint”
Step 4: Click “SharePoint” when it appears
Step 5: Choose your site from the list (or paste your site address)
Step 6: Find and check the box next to “SiteProvisioningRequests”
Step 7: Click “Connect”
Your form can now talk to the list we built in Part 1.
Part C: Set the Starting Values
This tells the app what to remember when it opens.
Step 1: At the very top of the left tree menu, click the word “App”
Step 2: Look at the top left — there’s a dropdown that probably says “OnStart” (if not, click the dropdown and choose “OnStart”)
Step 3: Click in the big formula box to the right
Step 4: Type or paste this exactly:
Set(varUserEmail, User().Email);
Set(varUserName, User().FullName);
Set(varIsSubmitting, false);
Set(varValidationLog, "")
Step 5: Click somewhere else to save it
Step 6: Right-click on “App” in the tree menu and choose “Run OnStart” (this makes it activate now)
Part D: Add a Title
Step 1: At the top, click “Insert”
Step 2: Click “Text label”
Step 3: A label appears on the canvas. Drag it to the top
Step 4: With it selected, look for the “Text” property box at top left
Step 5: Type: “Request a New SharePoint Site”
Step 6: On the right panel, make the font bigger (try size 28) and bold
Part E: Add the Input Boxes
Now we add the fields users type into. We’ll add four text boxes. For each one, you’ll do the same steps.
Adding the Site Title box:
Step 1: Click “Insert” at the top
Step 2: Click “Text input”
Step 3: A box appears. Drag it below the title
Step 4: On the right panel, find the “Name” field at the very top and rename it to: txtSiteTitle
Step 5: Find the “Default” property and clear it (make it empty)
Step 6: Find “Hint text” and type: “Enter site name”
Add three more the same way, naming them:
- txtSiteAlias (hint: “Short name for the URL”)
- txtDescription (hint: “What is this site for?”)
- txtJustification (hint: “Why do you need it?”)
For txtDescription and txtJustification, also change the “Mode” property to “Multiline” so people can type more.
Tip: Add a small label above each box so users know what it’s for. Insert a Text label, type “Site Title”, place it above the box. Repeat for each field.
Part F: Add the Security Group Boxes (Auto-Fill Magic)
These boxes fill in automatically based on the Site Alias. Neat trick.
Owners Group box:
Step 1: Insert another “Text input”
Step 2: Rename it to: txtOwnersSG
Step 3: Click on the “Default” property box
Step 4: Paste this formula:
If(!IsBlank(txtSiteAlias.Text), "SG-Sites-" & Lower(Trim(txtSiteAlias.Text)) & "-Owners", "")
Now when someone types “finance” as the alias, this box automatically shows “SG-Sites-finance-Owners”.
Members Group box:
Step 1: Insert “Text input”, rename to txtMembersSG
Step 2: Set Default to:
If(!IsBlank(txtSiteAlias.Text), "SG-Sites-" & Lower(Trim(txtSiteAlias.Text)) & "-Members", "")
Visitors Group box:
Step 1: Insert “Text input”, rename to txtVisitorsSG
Step 2: Set Default to:
If(!IsBlank(txtSiteAlias.Text), "SG-Sites-" & Lower(Trim(txtSiteAlias.Text)) & "-Visitors", "")
Part G: Add a Sensitivity Dropdown
Step 1: Click “Insert”
Step 2: Search for and click “Drop down”
Step 3: Rename it to: ddlSensitivity
Step 4: On the right panel, find “Items”
Step 5: In the formula box, type:
["Public", "Internal", "Confidential"]
Step 6: Set the “Default selected items” to “Internal”
Part H: Add the Submit Button
Step 1: Click “Insert”
Step 2: Click “Button”
Step 3: Drag it to the bottom of your form
Step 4: On the right panel, change the “Text” to “Submit Request”
Step 5: Rename the button to: btnSubmit
Now the important part — what happens when they click it.
Step 6: With the button selected, find the “OnSelect” property
Step 7: Paste this formula:
Set(varIsSubmitting, true);
Set(varValidationLog, "Checking your request..." & Char(10));
Set(varAliasClean, Lower(Trim(txtSiteAlias.Text)));
Set(varSGResult, CheckSecurityGroups.Run(
varAliasClean,
Trim(txtOwnersSG.Text),
Trim(txtMembersSG.Text),
Trim(txtVisitorsSG.Text)
));
If(
varSGResult.ownersexists <> "true" ||
varSGResult.membersexists <> "true" ||
varSGResult.visitorsexists <> "true",
Set(varValidationLog, "One or more security groups don't exist yet. Please create them first, then try again."),
Patch('SiteProvisioningRequests', Defaults('SiteProvisioningRequests'),
{
Title: txtSiteTitle.Text,
SiteAlias: varAliasClean,
Description: txtDescription.Text,
BusinessJustification: txtJustification.Text,
PrimaryOwner: {
'@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
Claims: "i:0#.f|membership|" & User().Email,
Email: User().Email,
DisplayName: User().FullName
},
SensitivityLabel: {Value: ddlSensitivity.Selected.Value},
OwnersGroupName: Trim(txtOwnersSG.Text),
OwnersGroupId: varSGResult.ownersid,
MembersGroupName: Trim(txtMembersSG.Text),
MembersGroupId: varSGResult.membersid,
VisitorsGroupName: Trim(txtVisitorsSG.Text),
VisitorsGroupId: varSGResult.visitorsid,
Status: {Value: "Pending Manager Approval"}
}
);
Set(varValidationLog, "Success! Your request has been submitted. You'll get an email once your manager reviews it.");
Reset(txtSiteTitle);
Reset(txtSiteAlias);
Reset(txtDescription);
Reset(txtJustification)
);
Set(varIsSubmitting, false)
Don’t worry about understanding every line. In plain English, it: checks the security groups exist, and if they do, saves the request and clears the form. If not, it tells the user what to fix.
Part I: Add a Status Message
This shows the user what happened after they click Submit.
Step 1: Click “Insert” then “Text label”
Step 2: Place it below the button
Step 3: Rename it to: lblStatus
Step 4: Set its “Text” property to:
varValidationLog
Step 5: Make it a decent size (14) so it’s easy to read
Now when someone submits, they’ll see either “Success!” or a helpful error message right there.
Part J: Test Your Form
Step 1: Click the “Play” button (triangle icon) at the top right
Step 2: Fill in the form with test information
Step 3: Watch the security group boxes fill in automatically as you type the alias
Step 4: Click “Submit Request”
Step 5: You should see the success message, and a new item should appear in your SharePoint list
If something doesn’t work, check the status message — it usually tells you what’s wrong.
Part K: Publish and Share
Step 1: Press the X or Escape to exit the test mode
Step 2: Click “File” at the top left
Step 3: Click “Save” then “Publish”
Step 4: Wait for it to finish
Step 5: Click “Share”
Step 6: Add the people or groups who should use the form
Step 7: Set their access to “User” (not Co-owner)
Step 8: Also share the CheckSecurityGroups flow with them — go to Power Automate, open that flow, click “Edit,” then under “Run only users,” add the same people
That’s it! Your users now have a simple form, and everything behind the scenes runs automatically.
7 Lessons I Learned the Hard Way
Lesson 1: The invisible newline character. SharePoint sometimes adds a hidden character to email addresses that breaks things. Always clean your values with the Trim formula. This one cost me three hours of confusion.
Lesson 2: Private networks block webhooks. If your Azure account is locked down for security (which is good), the simple webhook connection won’t work. You’ll need a “data gateway” or API Management to bridge the gap.
Lesson 3: Certificates expire. Set a calendar reminder to renew yours before the expiry date, or everything suddenly stops working.
Lesson 4: Test with someone else’s account. Your own admin account has special access that hides permission problems. Always test as a regular user before rolling out.
Lesson 5: The empty owners trick. Leaving the site’s Owners group empty and using a custom “Designers” group means users can manage content but can’t accidentally delete the whole site. Great for peace of mind.
Lesson 6: Watch your capital letters. Some values come back in lowercase even when you expect capitals. Double-check when things don’t match.
Lesson 7: Save your webhook URLs immediately. Azure only shows them once. Lose it and you have to recreate the whole thing.
The Results
Before: 4 to 6 hours of IT time per request, with users waiting days.
After: About 10 minutes start to finish, completely self-service.
Over a year, at 100 to 200 requests, that’s 500 to 1,200 hours saved. And every site is configured perfectly, every single time.
Would I Do It Again?
Without hesitation. A few days of building saved hundreds of hours and eliminated an entire category of manual work. If your team creates SharePoint sites regularly, this pays for itself almost immediately.
Questions? Drop them in the comments — I’m happy to help you build your own.