A property maintenance request tracker in SharePoint
Short answer: make one Microsoft Forms request form that writes each request into one SharePoint list, with columns for unit, problem type, urgency, status, vendor, date reported and date done. Share one link or QR code so texts and emails stop being the way requests arrive. This is a tracker, not legal advice on repair deadlines.
Then save four views so you can see what is urgent, what is waiting and what is finished. A request that has a row cannot be forgotten as easily as a text message.
Why requests get lost
A repair request can arrive as a text at night, an email at noon or a remark from a resident on the stairs. Each channel keeps its own pile. Over a few weeks the piles cause trouble:
- A text slides out of view and nobody books the fix.
- Two staff reply to one email, or neither does.
- No one can state the number of open jobs.
- The same burst pipe gets two vendor calls, or none.
- You have no record of the day a job came in or the day it closed.
One shared list fed by one form removes the scatter, because everyone reads the same rows. If you are leaving a spreadsheet, see "Replace a spreadsheet tracker with a SharePoint list". If your requests arrive in a shared mailbox, see "Requests lost in a shared inbox: add an owner and a status".
Before you start
Three decisions are cheaper to make while the list is empty than after it holds 200 rows.
- Where requests enter. Publish one link or QR code, and send it back to anyone who texts or emails a repair.
- Who checks the list each morning. One named person, so an after-hours emergency from the night before is seen first thing.
- Who may change a status. A short list of staff, not every resident or vendor.
This guide covers a tracking list only. It is not legal advice, and it says nothing about your lease, local rules, your own repair policy or response deadlines.
Step 1. Create the list
Menu names can differ slightly on your screen.
- Go to your SharePoint site, or open Microsoft Lists in your web browser.
- Pick the option for a new list and choose a blank list.
- Call it "Maintenance requests".
Step 2. Add the columns
Microsoft's column types page covers each type named here. Our advice, not a Microsoft rule: start with ten columns.
- Title, which every list already has. Rename it "Problem" if that reads better. Keep it to a short phrase such as "Hallway light out".
- Unit or location (Single line of text). Examples: "Unit 12C" or "Laundry room".
- Request type (Choice). Values, one per line: 1 Plumbing, 2 Electrical, 3 Heating and cooling, 4 Appliance, 5 Locks and doors, 6 Other. Swap in your own.
- Reported by (Single line of text). A unit number or a role such as "Resident, Unit 12C" is enough. Skip full names.
- Urgency (Choice). Values: 1 Urgent, 2 Normal, 3 Low. Default: 2 Normal.
- Status (Choice). Values: 1 New, 2 Scheduled, 3 Done. Default: 1 New.
- Assigned vendor. Microsoft says the Person or Group type offers a searchable pick list of people and groups. That suits your own staff. An outside plumber may not be in your directory, so for those use a plain text column holding the company name.
- Date reported (Date and time, date only). Microsoft says a Date and time column can default to today's date, so set that default.
- Date done (Date and time, date only). Leave it empty until the job closes.
- Details (Multiple lines of text). The request in the reporter's own words.
Microsoft says a column can be marked required, which blocks any new item that leaves it empty. Our advice: require Unit or location, Request type and Urgency. Keep Assigned vendor and Date done optional because they get filled in later.
Our advice, not a Microsoft rule: number the Choice values, so 1 Urgent, 2 Normal and 3 Low stay easy to tell apart.
Step 3. Test with two requests
Enter two sample requests, one routine and one after-hours emergency, and put "TEST" at the start of each Title so you can find them. Remove both once the list works.
- TEST Routine: Unit 4B, Request type 1 Plumbing, Urgency 2 Normal, Status 1 New, Assigned vendor blank, Date reported today, Details "Slow drip under the kitchen sink".
- TEST Emergency: Unit 9A, Request type 3 Heating and cooling, Urgency 1 Urgent, Status 1 New, Date reported today, Details "No heat, reported at 11 PM".
After Step 5, open the list in a phone's web browser, as a manager would. Does the emergency sit above the routine one in the Open requests view? Can you tell which unit and which vendor each needs without opening the row? Drop any column that slows entry.
Step 4. Collect requests with one form
You have two ways to take requests. Pick one so every request lands in the same list.
Option A: the list's own new-item form. People with access to the list open the link and add an item. This is the simplest. It only works for people who have access to your site. Tenants and visitors may not.
Option B: a Microsoft Form. You build a short form with a few questions, such as unit, problem, request type and details. A Power Automate flow then copies each response into the list as a new row. This suits people outside your team who have no access to the list. Microsoft's page for the Forms connector says the connector only works with organizational accounts, so whoever builds the flow needs a work or school account. Whether tenants must sign in is a form setting: select Collect responses and pick Anyone can respond. Check with your admin about what your account includes.
For the full steps of Option B, see "Save Microsoft Forms answers to a SharePoint list". Two points from Microsoft's connector page matter here:
- The trigger is "When a new response is submitted". It gives the flow a Response Id. You then use "Get response details" to fetch the answers.
- In the SharePoint "Create item" step, the form choices and the list choices must be the same words. If the form offers "Plumbing" but the list has "1 Plumbing", the row may fail, or it may save a value your views and filters do not match. Use the same text, number included, in both places, or leave Request type for your team to fill in after the row arrives.
Leave Status, Urgency and Assigned vendor out of the form if you want your team to decide them. A new row then starts as 1 New and 2 Normal from the defaults. One way to start is to let the person tell you if it is an emergency in the Details field, and have your team set Urgency. An emergency such as a gas smell or a fire should go to the phone and the emergency services, not to a form. Say that on the form itself.
Copy-ready form questions
Build the form with these eight questions. Numbers are for reference.
- Unit or location (text)
- Where in the unit, such as kitchen or hallway (text)
- The problem in a few words (text)
- Request type (choice: use the exact words of your list, number included)
- Details (long text)
- Is this an emergency? (choice: Yes or No). Add a line under it: "Gas smell, fire or flooding: call the emergency number, do not wait for this form."
- Reported by, as a unit number or role (text)
- Date the problem started (date)
A filled-in request, as it lands in the list: Row 12, Unit 4B, Problem "Slow drip under the kitchen sink", Request type 1 Plumbing, Urgency 2 Normal, Status 1 New, Reported by "Resident, Unit 4B", Date reported 10/12.
Question 6 does not set Urgency by itself. Your team reads it and sets Urgency in the list.
For people with no email, keep a paper form with the same eight questions. Whoever receives it types it into the same form, so every request still lands in the list.
What this tracker does not decide
Response deadlines come from your lease and local law. This tracker records when a request came in and when the job was done. It does not tell you how fast you must respond or who is responsible for a repair. Check your lease, and ask a local housing office or a lawyer.
Step 5. Build four views
Microsoft says views let you sort, filter and group list data. Microsoft says a filter built on [Today] or [Me] has to be made in the classic view editor (Edit current view, then Filters). Our advice, not a Microsoft rule: use that same editor for blank and "is not equal to" filters too. Microsoft says a column-header filter cannot take [Today] or [Me]. Exact names may differ on your screen.
- Open requests. In the classic view editor, set Status is not equal to 3 Done. Sort by Urgency, ascending, then by Date reported, ascending. Microsoft says the classic editor lets you sort by up to two columns. This is the view you open each morning. The urgent, oldest items are at the top.
- Waiting for a vendor. In the classic view editor, set Status is equal to 1 New, And Assigned vendor is empty. Group by Request type. These are requests nobody has picked up. If your Assigned vendor column is text, use the same blank-value filter.
- Scheduled. Set Status is equal to 2 Scheduled. Sort by Unit or location. Use this to plan visits by building.
- Done recently. In the classic view editor, set Status is equal to 3 Done, And Date done is greater than or equal to [Today] minus 30. Microsoft's page shows a filter with [Today] minus a number of days. Sort by Date done, descending.
Microsoft says a personal view is seen only by you, while a public view is seen by everyone who uses the list, and you may need extra permission to create a public one. Make the four views public so every manager sees the same thing. Microsoft also says a view cannot be switched between personal and public after it is made, and only a public view can be the default.
For turning old open rows red, see "Turn overdue rows red in a SharePoint list". For the size of a list as it grows, see "Move closed items to an archive list so the main list stays fast".
Step 6. Optional: a daily nudge for urgent items
Power Automate can run on a timer, look for urgent jobs nobody has booked and email you. Build it small.
- Create a scheduled cloud flow. Pick the Recurrence trigger, Interval 1, Frequency Day.
- Add the SharePoint action Get items and point it at the Maintenance requests list.
- Under Advanced options, put this in Filter Query: Status eq '1 New' and Urgency eq '1 Urgent'
- Fill in Top Count. Microsoft says Get items returns 100 by default and that Top Count can go up to the 5,000 list view threshold. Enter the largest urgent backlog you could face.
- Switch Pagination on in the action settings if the list could get big. Microsoft says to turn Pagination on for lists above 5,000 items.
- Finish with one email or Teams message that lists the count or the problem titles.
Leave Top Count empty and the flow can quietly skip every row after the 100th. For the message step, see "Send a reminder before a due date in a SharePoint list".
The text in the filter has to equal your Choice values character for character, number included. Rename 1 Urgent in the list and the flow needs the same edit.
Step 7. Limit what you store about residents
A repair log needs the unit and the fault. It does not need the resident's name or phone. Store "Unit 4B, no heat" and leave out family details, work hours and anything else about the household. If a contact is required, give it its own column and narrow who can open the list.
A saved view is a display choice, not a lock. Anyone who can open the list can switch to another view and read every column of every row. Permissions are what restrict access, and your admin sets those. To hide one column, read "Keep one column private (like pay or notes) in a shared list". To show each person just their own rows, read "Let each person see only their own items in a SharePoint list".
Our advice, not a Microsoft rule, for access levels:
- Property managers: edit.
- Outside vendors such as Vendor 12 who need their own jobs: ask your admin for the safest route, and never give them the full list, which holds other units.
- Owners or board members who only watch progress: read.
What to avoid
- Keeping two intake routes. While texts still count, the list lags. Send the form link back every time.
- Typing status, request type or urgency freehand. Choice columns let you filter and count, so keep the number prefixes.
- Piling on columns. If entering a request drags past a minute, staff stop entering them.
- Guessing Date done afterward. Stamp it in the moment you set Status to 3 Done.
- Choice spellings that drift between form, list and flow. A mismatch can fail a row or hide it from a view.
- Leaving Top Count empty in a flow. It returns 100 rows and says nothing.
- Counting on views to shield personal details. They do not.
- Taking emergencies through a form. A gas smell or fire goes to a phone call.
- Removing finished rows. Keep them and filter them out of daily views.
- A calculated "days open" column. SharePoint blocks [Today] in calculated column formulas, so use the Done recently view or a flow.
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 tenants add a request without a Microsoft 365 account?
Not through the list's own form, which needs access to your site. A Microsoft Form set to Anyone can respond can take answers from people outside your organization, and a flow copies them into the list. Microsoft says the Forms connector works only with organizational accounts, so whoever builds the flow needs a work or school account.
How does a tenant request maintenance from a landlord?
Through whatever channel the landlord sets up. If the landlord uses this tracker, that is the one form link or QR code they share.
How long does a landlord have to respond to a maintenance request?
This tracker does not decide that. Response times come from your lease and local law, so check those or ask a local housing office.
Is there a maintenance request form template?
This guide lists eight copy-ready form questions and the list columns that go with them, so you can build the form in Microsoft Forms.
Why can't I filter by [Today] from the column header?
Microsoft says the [Today] and [Me] filters cannot be used when you filter from a column header. Use the classic view editor (Edit current view, then Filters).
Sources
- Microsoft Support, Choose who can fill out a form or quiz
- Microsoft Support, List and library column types and options
- Microsoft Support, Use filtering to modify a SharePoint view
- Microsoft Support, Create, change, or delete a view of a list or library
- Microsoft Learn, Microsoft Forms connector reference
- Microsoft Learn, In-depth analysis into Get items and Get files SharePoint actions