← Al Davies, 250 High Street

Expense approval with a SharePoint list

Short answer: build an expense list in SharePoint with one row per expense and the receipt attached, then add a Power Automate flow that sends each new row to the manager with the action "Start and wait for an approval" and writes the decision back to the row. Make one view for managers and one for finance (approved, not yet paid). This guide covers staff expenses only. It does not give accounting, tax or policy advice. Follow your own expense policy.

At a glance

Swipe sideways to see all columns.

ItemNumberWhat it means for you
Approval wait time30 daysA flow run times out pending steps after 30 days. Chase managers before then.
Items in one list30 millionOne row per expense will not reach this. Size is not the worry.
List view threshold5,000 itemsViews of more than 5,000 expenses can fail. Filter finance views by status or date.
Flow with repeated errors14 daysA flow that fails again and again is turned off. Watch run history.
Idle flow shut off90 daysA flow with no trigger in 90 days might be turned off. Quiet teams should check it.

Why expense approval gets messy

Expenses start as a photo of a receipt and a message. The message goes to a manager, or to finance, or to both. The manager says "fine" in a reply. Finance never sees that reply. Weeks later someone asks, "Did I get paid for the trip?"

Causes:

This guide and its neighbors

Other guides cover nearby jobs. "Purchase requests stuck waiting for approval: how to see them and move them" is about asking before you buy. This guide is about money a person already spent and wants back, with a receipt as proof.

Signs this is happening in your team

What to track

One row is one expense. A simple set of columns:

Microsoft lists these column types in its introduction to lists: Text, Number, Choice, Currency, Date and Time, Lookup, Yes/No and Calculated. Exact names may differ in your version.

Use the Title column for a short expense name, such as the trip or purchase.

Step 1. Create the list

  1. Open the SharePoint site your team uses, or the Lists app.
  2. Create a new list and choose the blank option.
  3. Name it "Expenses".
  4. Add the columns above. Add Status as a Choice column and set the default to Submitted, so no row is empty.

Use a Person column for Manager, not plain text. A Person column holds a real account. That helps later when you filter or send approvals. For a longer walk through of moving from a spreadsheet, see "Replace a spreadsheet tracker with a SharePoint list".

Step 2. Attach the receipt to the row

Microsoft says you can attach one or more files to a list item to add supporting detail, such as a spreadsheet or a document. Microsoft's service limits page lists 250 MB as the limit for a file attached to a list item, for Microsoft Lists and SharePoint lists. A phone photo of a receipt is far smaller than that.

The exact button to attach a file depends on the form you use, so look for an attach option when you open a new item. Test it with one real receipt before you tell the team.

Ask staff to attach the receipt when they submit, not later. A row without a receipt should not go to the manager. Whether a receipt is needed for a given amount is a question for your expense policy, not for this list.

Step 3. Name one manager per person

Write down who approves for each person, and who covers when that manager is away. Keep the rule to one page. In the list, the Manager column holds the name for each row.

If several people share the same manager, you can ask staff to pick the manager when they submit. To avoid wrong picks, keep the rule where people can see it, such as the top of the list page.

Step 4. Make a view for each job

A view is a saved way of showing the same list. Microsoft says you can create list views to organize, sort and filter data in different ways, and that the contents of the actual list do not change. Make these views:

  1. All expenses. Everything, newest first. This is the record.
  2. Waiting for a manager. Status is Submitted. Sort by the Expense date, oldest first.
  3. Waiting on me. For managers. Status is Submitted and Manager is the person viewing.
  4. For finance. Status is Approved, so finance sees what is ready to pay. When an item is paid, finance changes Status to Paid, and it drops out of the view.
  5. By category. Group by Category, with a total of the Amount column. Check that the total shows for your view type.

For view 3, use the [Me] keyword. Microsoft says [Me] works on people-based columns, and that you cannot use [Today] or [Me] when filtering from a column header. That page says to use the classic view editor for finer control: choose Edit current view, then find the Filters section and choose "Show items only when the following is true". Microsoft says you can define up to 10 filter statements there. Menu names may differ.

The same rule covers any filter on today's date. A calculated column cannot use today's date, because SharePoint blocks [Today] in formulas. If you want a view of requests that have waited too long, use a [Today] filter in the classic view editor. Microsoft gives an example of a date column greater than or equal to [Today] minus 30.

Views are not security

A view that shows only Approved items does not hide the other items. Anyone with access to the list can open the full list or change the view. If expenses have private details, or finance must not be seen by others, a view will not protect them.

Microsoft says you can control whether people edit only the items they created or every item, and that item-level permissions can protect individual entries. Ask your admin to set permissions. Test with a normal staff account, not your own.

Step 5. Build the approval flow

You can send approvals by hand, by sending the manager a link to the row. That works for a small team. To make the manager's answer land in the list on its own, use Power Automate. Microsoft's tutorial builds an approval flow that starts when someone creates a request in a SharePoint Online list, uses a vacation request, and the same shape fits an expense.

  1. In Power Automate, create an automated cloud flow. Choose the SharePoint trigger "When an item is created" and pick your site and the Expenses list.
  2. Add the action "Start and wait for an approval" (under Standard approvals). Choose an Approval type. Microsoft's approvals page lists "Approve/Reject - First to respond" and "Approve/Reject - Everyone must approve" among its approval types.
  3. In Title, put the expense short name. In "Assigned to", enter the email address of the approver, taken from the Manager column of the new row. In Details, put the amount, date and reason. Microsoft says you can use Markdown to format the Details field.
  4. Add a Condition. In the left box pick the Outcome from the approval, then "is equal to", then Approve.
  5. In the "If yes" branch, add the SharePoint action "Update item". Set Status to Approved, Decision date to today's date (the utcNow() expression) and Manager comment to the approver's comments. Microsoft says the Site Address, List Name, Id and Title fields are required on Update item. Then send an email to the person who submitted.
  6. In the "If no" branch, add "Update item" to set Status to Rejected, with the date and comments, and send a different email.

Approvers can respond from an Outlook email, the approvals center in Power Automate, or the Power Automate app, according to Microsoft. The approvals page also says they can respond from a Microsoft Teams adaptive card or the Power Automate action center if they have a Power Automate license or an Office 365 or Dynamics 365 license with built-in Power Automate capabilities. That page also lists a Dataverse database and a valid license to create flows as prerequisites, and says the database is created for you in the default environment. Check with your admin which environment and licenses you have.

Microsoft's approvals page also lists sequential approval, where requests go one at a time in a set order. One manager is the simplest place to start. For a comparison of Teams and email approvals, see "Teams approvals vs email approvals".

Step 6. Test with one real expense

  1. Submit a test row with a receipt attached.
  2. Confirm the manager gets the request.
  3. Reject it once, then approve a second one. Check that the Status and comment come back to the list each time.
  4. Open the finance view and check the approved row shows up.
  5. Check what a normal staff account can see.

Delete test rows after you finish, or mark them clearly so finance does not pay them. Never ship the list with test rows in it.

Step 7. Run it for one month

Pick one team to start. At month end, ask finance what was missing. Fixes to consider are a new category, a clearer description rule, or a reminder to attach the receipt. Change the list a little at a time. Do not rebuild it each month.

What to avoid

Honest limits

A list records who asked, who said yes and when. It does not check receipts, amounts or rules for you. It does not pay anyone. Paying and booking the expense still happens in your finance process. Also, the approval flow needs the right licenses and a place to store approvals, so check with your admin first. Exact menu and action names may differ from the ones here.

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.

Tell me what's still manual

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

Updated 2026-10-27.

Can a list item hold a receipt?

Yes. Microsoft says you can attach one or more files to a list item. Its service limits page gives 250 MB as the limit for a file attached to a list item.

How do I set up expense approval in Power Automate?

Use the SharePoint trigger "When an item is created", then the action "Start and wait for an approval", then a Condition on the outcome and an "Update item" step that writes Status and the decision date back to the row.

Can managers approve from their phone?

Yes. Microsoft says approvers can respond from their email inbox, the approvals center in Power Automate, or the Power Automate app, and it links the Power Automate mobile app for Android and iOS.

Do I need Power Automate?

No. A list with a "Waiting for a manager" view works alone. Managers can open the row and change the Status. Power Automate adds the approval message and writes the answer back for you.

Who decides what expenses are allowed?

Your expense policy does. This guide does not give accounting, tax or policy advice. The list records requests and decisions.

Sources